前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Java/Kotlin 中的日期与时间

Java/Kotlin 中的日期与时间

作者头像
jgrass
发布2024-12-25 16:34:46
发布2024-12-25 16:34:46
5800
代码可运行
举报
文章被收录于专栏:蔻丁杂记蔻丁杂记
运行总次数:0
代码可运行

整理编码中遇到的常用日期与时间操作,供参考。

1 Date

2 LocalDateTime,LocalDate,LocalTime

3 ZonedDateTime

4 Instant

5 java.sql Date Time TimeStamp

P.S. 以下均为 kotlin 代码。

1 Date

Date 已经不建议使用。 亲,建议你使用 LocalDateTime 而不是 Date 哦 - 掘金

还有 Calendar,见:

Date和Calendar - 廖雪峰的官方网站

代码语言:javascript
代码运行次数:0
复制
// Date 同时包含日期和时间val date1 = Date(); // 当前时间val millisencond = date1.time // 时间戳,毫秒val date2 = Date(millisencond) // 使用时间戳(毫秒)构建时间

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

代码语言:javascript
代码运行次数:0
复制
// Date 格式化输出val s1 = date1.toString() // Tue Jun 30 11:01:03 CST 2020val 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

代码语言:javascript
代码运行次数:0
复制
// 总是以当前默认时区返回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 搭配使用。

代码语言:javascript
代码运行次数:0
复制
// 自定义格式化: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

代码语言:javascript
代码运行次数:0
复制
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 (时间戳)

代码语言:javascript
代码运行次数:0
复制
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 一致。

转换

代码语言:javascript
代码运行次数:0
复制
// Instant -> Timestamp(SQL)val sqlTimestamp = Timestamp.from(timestamp)
// LocalDateTime -> Timestamp(SQL)val sqlTimestamp2 = Timestamp.valueOf(LocalDateTime.now())
// Timestamp(SQL) -> LocalDateTimeval localDateTime1 = LocalDateTime.ofInstant(Instant.ofEpochMilli(sqlTimestamp.time), ZoneOffset.UTC)val localDateTime2 = LocalDateTime.ofInstant(Instant.ofEpochMilli(sqlTimestamp.time), ZoneId.systemDefault())

数据库

对应Java类(旧)

对应Java类(新)

DATETIME

java.util.Date

LocalDateTime

DATE

java.sql.Date

LocalDate

TIME

java.sql.Time

LocalTime

TIMESTAMP

java.sql.Timestamp

LocalDateTime

表格来自:最佳实践 - 廖雪峰的官方网站

转换

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

代码语言:javascript
代码运行次数:0
复制
// Date -> LocalDateTimeval localDateTime = LocalDateTime.ofInstant(Date().toInstant(), ZoneId.systemDefault())
// LocalDateTime -> Dateval date = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant())

其它

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

时区与偏移:

最佳实践

用新的API:LocalDateTimeLocalDateLocalTimeInstantDurationPeriod

不用旧的 API:Date, java.sql.Date, java.sql.Time, java.sql.Timestamp

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

原文链接: https://cloud.tencent.com/developer/article/2481496

本作品采用 「署名 4.0 国际」 许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年6月30日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 Date
  • 2 LocalDateTime,LocalDate,LocalTime
  • 3 ZonedDateTime
  • 4 Instant (时间戳)
  • 5 sql time/date/timestamp
  • 转换
  • 其它
  • 最佳实践
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档