一文解决Scala中的时间处理

​ 今天来介绍Scala获取时间的方式,及时间的处理。与Java获取的方式基本相同。主要是Java自带类LocalDateTime和Hutool包中时间处理的方式。基本可以覆盖所有的时间需求。

​ 时间处理主要分为以下几种方式,1. 时间获取,时间格式化,字符串时间的解析,时间求差,获取时间的开始和结束。另外有hutool包中有计算年龄和求是否瑞年的方法。

废话不多说,直接开始

1. Java自带时间处理

使用LocalDateTime类在解析字符串日期的时候会报java.time.format.DateTimeParseException,这是java1.8中的bug,在1.9中得到了解决。个人建议使用hutool工具包,有强大的处理功能。

package com.xx.spark.dateTime

import java.time.format.DateTimeFormatter
import java.time.{LocalDateTime, Month}

object TestLocalDateTime {

  def main(args: Array[String]): Unit = {

    //获取时间并显示格式
    //getNowDateTime()

    //构造日期
    //createDateTime

    //修改日期
    //alterDateTime

    //格式化日期
    //formatDateTime

    //解析时间
    parasDateTime
  }

  //获取时间
  def getNowDateTime() {

  val rightNow: LocalDateTime = LocalDateTime.now()

  println("" + rightNow)
  println("年:" + rightNow.getYear)
  println("mmonth:" + rightNow.getMonth)
  println("当前月的日" + rightNow.getDayOfMonth)
  println("当前年的日" + rightNow.getDayOfYear)
  println("当前周的日" + rightNow.getDayOfWeek)

  }

  //自定义时间
  def createDateTime()={
    val time = LocalDateTime.of(2020,4,21,8,52)
    println(time)
  }

  //修改时间
  def alterDateTime()={
    val time = LocalDateTime.now()
    val time2 = time.plusDays(2)
    println(time2)

    val hour = time.minusHours(2)
    println(hour)
  }

  //格式化日期
  def formatDateTime={
    val rightNow: LocalDateTime = LocalDateTime.now()

    val IOSDate = rightNow.format(DateTimeFormatter.ISO_DATE)  //2020-04-21
    val baseIOSDate = rightNow.format(DateTimeFormatter.ISO_LOCAL_DATE) //2020-04-21
    val userDefined = rightNow.format(DateTimeFormatter.ofPattern("yyyy/MM/dd")) //2020/04/21

    println(IOSDate)
    println(baseIOSDate)
    println(userDefined)
  }

  //时间解析 这个在jdk1.8有bug
  def parasDateTime={
     val parasDate = LocalDateTime.parse("2020-03-13 19:47:50",DateTimeFormatter.ISO_DATE)
    println(parasDate)
  }
}

2. hutool中的DateUtil包处理时间

首先需要导入依赖,版本可以自行在仓库中查找

      <dependency>
            <groupId>cn.hutoolgroupId>
            <artifactId>hutool-allartifactId>
            <version>${hutool_version}version>
        dependency>

处理信息如下

package com.xx.spark.dateTime

import java.util.Calendar

import cn.hutool.core.date.BetweenFormater.Level
import cn.hutool.core.date.{DateField, DateTime, DateUnit, DateUtil}

//使用hutool包解析时间
object HutoolDateTimeTest {

  def main(args: Array[String]): Unit = {
    //transfromDateTime

    //字符串日期解析
    //parasDateTime

    //时间格式化
    //formatDateTime

    //获取时间的部分
    //getPartDateTime

    //时间的开始和结束
    //beginAndEndDateTime

    //changeDateTime

    //diffDateTime
    //timmer

    //是否闰年
    println(DateUtil.isLeapYear(2020))

    //年龄
    println(DateUtil.ageOfNow("1991-04-07"))
  }

  //Date、long、Calendar之间的相互转换
  def transfromDateTime={

    //四个获取当前时间的方式
    val date1 = DateUtil.date()  //2020-04-21 09:27:30
    val date2 = DateUtil.date(Calendar.getInstance())  //2020-04-21 09:27:30
    val date3 = DateUtil.date(System.currentTimeMillis())  //2020-04-21 09:27:30
    val date4 = DateUtil.now()  //2020-04-21 09:27:30

    //获取当前日期
    val date5 = DateUtil.today() // 2020-04-21

    println(date1)
    println(date2)
    println(date3)
    println(date4)
    println(date5)

  }

  /**字符串日期解析,可以解析的字符串有这里只做部分演示
    *
    * yyyy-MM-dd HH:mm:ss
    * yyyy-MM-dd
    * HH:mm:ss
    * yyyy-MM-dd HH:mm
    * yyyy-MM-dd HH:mm:ss.SSS
    */

  def parasDateTime={
    val time1: DateTime = DateUtil.parse("2020-03-13 19:47:50")
    println(time1)  //2020-03-13 19:47:50

    val date: DateTime = DateUtil.parse("2020-03-13","yyyy-MM-dd")
    println(date)  //2020-03-13 00:00:00
    println(date.toDateStr)  //2020-03-13

  }

  //格式化日期
  def formatDateTime={
    val dateTime: DateTime = DateUtil.parse("2020-03-13")

    val date1 = DateUtil.format(dateTime,"yyyy/MM/dd")
    println(date1)   //2020/03/13

    val date2 = DateUtil.formatDate(dateTime)
    println(date2)   //2020-03-13

    val dateTime2=DateUtil.formatDateTime(dateTime)
    println(dateTime2) //2020-03-13 00:00:00

    val time = DateUtil.formatTime(dateTime)
    println(time)  //00:00:00

  }

  //获取时间的某部分
  def getPartDateTime={
    val date = DateUtil.date()
    println(date)  //2020-04-21 12:45:24

    val year = DateUtil.year(date)
    println(year)  //2020

    val month = DateUtil.month(date)
    println(month)  //3  月份是从0开始计算的

    val month2 = DateUtil.monthEnum(date)
    println(month2)  //APRIL

    val hour = DateUtil.hour(date,true)
    println(hour) //12

    val second = DateUtil.second(date)
    println(second)  //24

  }

  //开始和结束时间
  def beginAndEndDateTime={
    //val dt: String = DateUtil.now()
    val dt2: DateTime = DateUtil.date()

    val beginDate = DateUtil.beginOfDay(dt2)
    println(beginDate) //2020-04-21 00:00:00

    val endDateTime = DateUtil.endOfDay(dt2)
    println(endDateTime)  //2020-04-21 23:59:59
  }

  //日期偏移
  def changeDateTime={
    val dateTime = DateUtil.date()

    val dt1 = DateUtil.offset(dateTime,DateField.DAY_OF_MONTH,-365)
    println(dt1)  //2019-04-22 12:56:44

    val dt2 = DateUtil.offsetDay(dateTime,365)
    println(dt2)  //2021-04-21 12:58:50

    val dt3 = DateUtil.offsetHour(dateTime,-5)
    println(dt3)  //2020-04-21 07:58:50

    //针对当前时间的简化偏移
    println(DateUtil.yesterday())
    println(DateUtil.lastMonth())
    println(DateUtil.nextWeek())
  }


  //时间差
  def diffDateTime={
    val str = "2020-03-13 19:47:50"
    val dt1: DateTime = DateUtil.parse(str)
    val dt2 = DateUtil.date()

    val dateDiff: Long = DateUtil.between(dt1,dt2,DateUnit.MS)
    println(dateDiff)  //3345470

    //格式化时间差
    val diffdt = DateUtil.formatBetween(dateDiff,Level.DAY)
    println(diffdt)
  }

  //计时器
  def timmer={
    val timmer = DateUtil.timer()

    Thread.sleep(10000)

    println("消耗了时间是:"+timmer.interval())
    println(timmer.intervalMinute())
  }
}

基本信息都在代码中体现。

你可能感兴趣的:(Scala)