简介:之前写过一篇java.util.date转换java.time的博客,除了date转换成java.time外,偶尔也能碰见string转换成java.time的情况,所以另写一篇来记录一下(本文只涉及时间类型转换,不涉及时间处理),内容分为两个方面,一个是理论,一个是实操。
date转time:java.util.date转换java.time汇总-CSDN博客
结合了日期和时间,但没有时区信息
yyyy-MM-dd HH:mm:ssZonedDateTime带有时区信息的日期时间yyyy-MM-dd'T'HH:mm:ss.SSSXXXInstant代表时间戳,类似于Date,但精度更高yyyy-MM-dd'T'HH:mm:ss.SSSXXX这里介绍一个java.time用于日期时间格式化和解析的类:DateTimeFormatter
它可以将符合特定格式的字符串解析成相应的日期时间对象。
1.使用预定义的格式器进行转换
2.使用自定义格式器进行转换
使用 方法可以创建自定义的格式化器。以下是一些常见的模式字母及其含义:
- :时代 (例如 AD)
- :年 (四位数, ISO周日历系统)
- :年 (两位数, ISO周日历系统)
- 或 :月份
- :日
- :星期几
- :上午/下午标记
- :小时 (0-23)
- :小时 (1-12)
- :分钟
- :秒
- :毫秒
- :纳秒
- :时区ID
- :时区名称
- :时区偏移量
3.示例:
使用预定义的格式器:
输出结果:
当前日期 (ISO_LOCAL_DATE): 2024-10-29
当前日期时间 (ISO_LOCAL_DATE_TIME): 2024-10-29T15:10:17.909
当前带时区的日期时间 (ISO_ZONED_DATE_TIME): 2024-10-29T15:10:17.911+08:00[Asia/Shanghai]
使用自定义的格式器:
处理时区:
我们需要先通过DateTimeFormatter解析字符串中的时间格式
1.包含时区
java.time中带时区的有两种数据类型,分别是:Instant,ZonedDateTime。
Instant类型需要通过ZonedDateTime进行转换,java.time不提供直接转换成Instant的方法。
预定义格式:
假设我们有一个字符串:
"2024-10-29T18:03:00+08:00"
这是一个包含时区的字符串,属于ISO 8601格式,那我们可以直接使用预定义的格式器。
输出结果为:
Parsed ZonedDateTime: 2024-10-29T18:03+08:00
非预定义格式:
假设我们有一个字符串:
"2024-10-29 18:03:00 Asia/Shanghai"
这是一个包含时区的字符串,而且非预定义格式,因此我们需要创建一个匹配该格式的DateTimeFormatter
输出结果为:
Parsed Custom ZonedDateTime: 2024-10-29T18:03+08:00[Asia/Shanghai]
类型转换:
输出结果:
Parsed Custom ZonedDateTime: 2024-10-29T18:03+08:00[Asia/Shanghai]
ZonedDateTime to Instant: 2024-10-29T10:03:00Z
2.不包含时区
java.time中不包含时区的有三个数据类型,分别是LocalDateTime.LocalDate.LocalTime.
我们需要根据获取字符串是否包含日期和时间进行选择。
预定义格式:
假设我们拥有一个字符串:
"2024-10-29T18:10:30"
它不含时区,而且是标准的ISO 8601格式,而LocalDateTime默认支持这种格式,因此我们可以直接进行转换。
输出结果为:
2024-10-29T18:10:30
2024-10-29
18:10:30
非预定义格式:
假设我们拥有一个字符串:
"2024-10-29T18:10"
它不含时区,而且不是标准的ISO 8601格式,那么我们需要定义一个DateTimeFormatter
输出结果为:
2024-10-29T18:10
18:10
2024-10-29
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/61688.html