val date1 = Date(); // 当前时间 val millisencond = date1.time // 时间戳,毫秒 val date2 = Date(millisencond) // 使用时间戳(毫秒)构建时间

Date 的格式化,与 SimpleDateFormat 搭配使用。

// Date 格式化输出
val s1 = date1.toString() // Tue Jun 30 11:01:03 CST 2020
val f1 = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
val s2 = f1.format(date1) // 2020-06-30 11:00:26.401

2 LocalDateTime,LocalDate,LocalTime

  • Java 8新特性(四):新的时间和日期API | 一书生VOID的博客
  • LocalDateTime - 廖雪峰的官方网站
  • // 总是以当前默认时区返回
    val d = LocalDate.now() // 当前日期
    val t = LocalTime.now() // 当前时间
    val dt = LocalDateTime.now() // 当前日期和时间
    val dtUtc = LocalDateTime.now(ZoneOffset.UTC) // UTC时间:2020-06-30T03:32:41.313
    

    格式化与 DateTimeFormatter 搭配使用。

    // 自定义格式化:
    val myDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSS")
    println("DateTimeFormatter 自定义格式化: ${myDateTimeFormatter.format(LocalDateTime.now())}
    // 用自定义格式解析:
    val dt2 = LocalDateTime.parse("2019/11/30 15:16:17.123", myDateTimeFormatter)
    println("DateTimeFormatter 用自定义格式解析:  $dt2")
    

    3 ZonedDateTime

    带时区信息的 DateTime

  • ZonedDateTime - 廖雪峰的官方网站
  • val zdt = ZonedDateTime.now() // 当前日期时间:2020-06-30T11:33:20.539+08:00[Asia/Shanghai]
    val zdt2 = ZonedDateTime.now().withZoneSameInstant(ZoneOffset.UTC) // UTC时间:2020-06-30T03:34:09.939Z
    

    4 Instant (时间戳)

  • 瞬时类 / Instant | JAVA8 官网笔记教程
  • val timestamp = Instant.now()
    println("时间戳(秒): ${timestamp.epochSecond}")  // 时间戳,秒
    println("时间戳(毫秒): ${timestamp.toEpochMilli()}")  // 时间戳,毫秒
    println("时间戳(毫秒): ${System.currentTimeMillis()}")  // 使用 System 获取时间戳,毫秒
    

    5 sql time/date/timestamp

    都是继承自 java.util.Date 类,用于数据库时间操作。
    基本的使用与 java.util.Date 一致。

  • java.sql.Date、java.sql.Time、java.sql.TimeStamp真的有区别吗? - 一梦、 - 博客园
  • [Java]java.sql.Timestamp(时间戳)_YOLO-CSDN博客_java.sql.timestamp
  • // Instant -> Timestamp(SQL)
    val sqlTimestamp = Timestamp.from(timestamp)
    // LocalDateTime -> Timestamp(SQL)
    val sqlTimestamp2 = Timestamp.valueOf(LocalDateTime.now())
    // Timestamp(SQL) -> LocalDateTime
    val localDateTime1 = LocalDateTime.ofInstant(Instant.ofEpochMilli(sqlTimestamp.time), ZoneOffset.UTC)
    val localDateTime2 = LocalDateTime.ofInstant(Instant.ofEpochMilli(sqlTimestamp.time), ZoneId.systemDefault())
    

    转换的基本逻辑,都是以时间戳为中间数据。部分情况需要注意时区的问题。

    // Date -> LocalDateTime
    val localDateTime = LocalDateTime.ofInstant(Date().toInstant(), ZoneId.systemDefault())
    // LocalDateTime -> Date
    val date = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant())
    

    还有 Duration 和 Period,用于表示时间段,可以看这里:

  • 周期和持续时间 / Period and Duration | JAVA8 官网笔记教程
  • LocalDateTime - 廖雪峰的官方网站
  • Java 8新特性(四):新的时间和日期API | 一书生VOID的博客
  • 时区与偏移:

  • 时区和偏移类 / Zone and Offset | JAVA8 官网笔记教程
  • 用新的API:LocalDateTimeLocalDateLocalTimeInstantDuration Period
    不用旧的 API:Date, java.sql.Date, java.sql.Time, java.sql.Timestamp

    最佳实践 - 廖雪峰的官方网站

    原文链接:https://www.cnblogs.com/jasongrass/p/13214395.html

    J.晒太阳的猫 https://www.cnblogs.com/jasongrass/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。