前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >如何构造一个 ZonedDateTime()

如何构造一个 ZonedDateTime()

原创
作者头像
张紫娃
修改2024-12-27 12:18:19
修改2024-12-27 12:18:19
2770
举报

如何构造一个 ZonedDateTime()

now 【可指定时区】

代码语言:java
复制
2024-04-21T20:29:24 执行如下代码

ZonedDateTime.now());                          //2024-04-21T20:29:24.583240700+08:00[Asia/Shanghai]
ZonedDateTime.now(ZoneId.of("Asia/Tokyo")));   //2024-04-21T21:29:24.583240700+09:00[Asia/Tokyo]
ZonedDateTime.now(Clock.systemUTC()));         //2024-04-21T12:29:24.583240700Z

of 【单纯构造值】

代码语言:java
复制
ZonedDateTime.of(2019, 7, 7, 20, 18, 18, 888, ZoneId.of("Asia/Tokyo"));                             //2019-07-07T20:18:18.000000888+09:00[Asia/Tokyo]
ZonedDateTime.of(LocalDate.of(2019, 7, 7), LocalTime.of(20, 18, 18, 888), ZoneId.of("Asia/Tokyo")); //2019-07-07T20:18:18.000000888+09:00[Asia/Tokyo]

LocalDateTime local_date_time = LocalDateTime.of(2019, 7, 7, 20, 18, 18, 888);
ZonedDateTime.of(local_date_time, ZoneId.of("Asia/Tokyo"));                                        //2019-07-07T20:18:18.000000888+09:00[Asia/Tokyo]
ZonedDateTime.of(local_date_time, ZoneId.of("Asia/Shanghai"));                                     //2019-07-07T20:18:18.000000888+08:00[Asia/Shanghai]

ofInstant 【XXX→instant→ZonedDateTime可借此进行时区转换,LocalDateTime直接进行时区转换】

代码语言:java
复制
Instant instant = LocalDateTime.of(2019, 7, 7, 20, 18, 18, 888).toInstant(ZoneOffset.ofHours(9));
ZonedDateTime.ofInstant(instant , ZoneOffset.ofHours(9)));       //2019-07-07T20:18:18.000000888+09:00
ZonedDateTime.ofInstant(instant , ZoneId.of("Asia/Tokyo")));     //2019-07-07T20:18:18.000000888+09:00[Asia/Tokyo]
ZonedDateTime.ofInstant(instant , ZoneId.of("Asia/Shanghai")));  //2019-07-07T19:18:18.000000888+08:00[Asia/Shanghai]

LocalDateTime local_date_time = LocalDateTime.of(2019, 7, 7, 20, 18, 18, 888);
ZonedDateTime.ofInstant(local_date_time, ZoneOffset.ofHours(9), ZoneOffset.ofHours(9)));                 //2019-07-07T20:18:18.000000888+09:00
ZonedDateTime.ofInstant(local_date_time, ZoneOffset.UTC, ZoneOffset.ofHours(9)));                        //2019-07-08T05:18:18.000000888+09:00
ZonedDateTime.ofInstant(local_date_time, ZoneOffset.ofHours(9), ZoneId.of("Asia/Shanghai")));            //2019-07-07T19:18:18.000000888+08:00[Asia/Shanghai]

parse 【单纯解析值 string→ZonedDateTime

代码语言:java
复制
ZonedDateTime.parse("2019-07-07T20:18:18.000000888+09:00")); //2019-07-07T20:18:18.000000888+09:00
ZonedDateTime.parse("2019-07-07T20:18:18+09:00"));           //2019-07-07T20:18:18+09:00
ZonedDateTime.parse("2019-07-07T20:18+09:00"));              //2019-07-07T20:18+09:00

ZonedDateTime.parse("Sun Oct 01 00:00:00 EDT 2017", DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy").withLocale(Locale.US)));                  
// 2017-10-01T00:00-04:00[America/New_York]

ZonedDateTime.parse("Sun Oct 01 00:00:00 EDT 2017 GMT+0800", DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy 'GMT'Z").withLocale(Locale.US)));  
// 2017-09-30T12:00-04:00[America/New_York]

atZone 【LocalDateTime → ZonedDateTime:附上时区而已】

代码语言:java
复制
LocalDateTime local_date_time = LocalDateTime.of(2019, 7, 7, 20, 18, 18, 888);

ZonedDateTime zonedDateTime = local_date_time.atZone(ZoneId.of("Asia/Tokyo")););    //2019-07-07T20:18:18.000000888+09:00[Asia/Tokyo]    【附上时区而已不换算】
ZonedDateTime zonedDateTime = local_date_time.atZone(ZoneId.of("Asia/Shanghai"));); //2019-07-07T20:18:18.000000888+08:00[Asia/Shanghai] 【附上时区而已不换算】

OffsetDateTime→ ZonedDateTime【存在时区转换】

代码语言:java
复制
OffsetDateTime offset_date_time = OffsetDateTime.of(2019, 7, 7, 20, 18, 18, 888, ZoneOffset.ofHours(9));

offset_date_time.toZonedDateTime());    //2019-07-07T20:18:18.000000888+09:00    【时区和偏移量转换而已】

offset_date_time.atZoneSameInstant(ZoneId.of("Asia/Tokyo")));     //2019-07-07T20:18:18.000000888+09:00[Asia/Tokyo]                  【存在时区转换】
offset_date_time.atZoneSameInstant(ZoneId.of("Asia/Shanghai")));  //2019-07-07T19:18:18.000000888+08:00[Asia/Shanghai]               【存在时区转换】

offset_date_time.atZoneSimilarLocal(ZoneId.of("Asia/Tokyo")));    //2019-07-07T20:18:18.000000888+09:00[Asia/Tokyo]                 【附上时区而已不换算】
offset_date_time.atZoneSimilarLocal(ZoneId.of("Asia/Shanghai"))); //2019-07-07T20:18:18.000000888+08:00[Asia/Shanghai]              【附上时区而已不换算】

Date 【Date→instant→ZonedDateTime可借此进行时区转换

代码语言:java
复制
Date DATE = new Date(1562501898000L);

DATE.toInstant().atZone(ZonedDateTime.now().getZone()));   //2019-07-07T20:18:18+08:00[Asia/Shanghai]
DATE.toInstant().atZone(ZonedDateTime.now().getOffset())); //2019-07-07T20:18:18+08:00

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何构造一个 ZonedDateTime()
    • now 【可指定时区】
    • of 【单纯构造值】
    • ofInstant 【XXX→instant→ZonedDateTime可借此进行时区转换,LocalDateTime直接进行时区转换】
    • parse 【单纯解析值 string→ZonedDateTime】
    • atZone 【LocalDateTime → ZonedDateTime:附上时区而已】
    • OffsetDateTime→ ZonedDateTime【存在时区转换】
    • Date 【Date→instant→ZonedDateTime可借此进行时区转换】
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档