java 如何在UTC对话中获取一天的开始和结束

3bygqnnd  于 2022-11-20  发布在  Java
关注(0)|答案(1)|浏览(207)

你好我正在尝试开始一天
印度时区

*一天的开始时间为:2022年11月20日00:00:00(印度当地时间)
*UTC时间:2022年11月20日下午05:30:00

hiz5n14c

hiz5n14c1#

tl; d天

LocalDate                                      // Represent a date-only value, without time-of-day, without time zone or offset.
.now( ZoneId.of( "Asia/Kolkata" ) )            // Capture the current date as seen in a particular time zone. For any given moment, the date varies around the globe by time zone. 
.atStartOfDay( ZoneId.of( "Asia/Kolkata" ) )   // Determine the first moment of the day. May or may not be 00:00. Returns a `ZonedDateTime` object.
.toInstant()                                   // Adjust to an offset from UTC of zero hours-minutes-seconds. Returns an `Instant` object.
.toString()                                    // Generate text in standard ISO 8601 format. Returns a `String` object, containing formatted text.

2022年11月19日18时30分

详细信息

捕获当前日期。

ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
LocalDate today = LocalDate.now( z ) ;

获取当天的第一个时刻。* 不要 * 假定当天从00:00开始。在某些时区中,某些日期的某些天从一天中的不同时间开始,如01:00。让 java.time 确定第一个时刻。

ZonedDateTime zdt = today.atStartOfDay( z ) ;

要通过UTC的挂钟时间查看同一时刻(与UTC的偏移量为零时-分-秒),请提取InstantInstant表示一个时刻,即时间线上的特定点,如UTC所示。

Instant instant = zdt.toInstant() ;

请在Ideone.com上查看该代码。

today.toString(): 2022-11-20
zdt.toString(): 2022-11-20T00:00+05:30[Asia/Kolkata]
instant.toString(): 2022-11-19T18:30:00Z

要生成各种格式的文本,请使用OffsetDateTime而不是InstantInstant类是 java.time 中的一个基本构建块类。OffsetDateTime类更灵活,包括生成非标准ISO 8601格式的文本的功能。

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;

要了解有关生成文本的更多信息,请参阅search Stack Overflow,以了解有关DateTimeFormatter类的现有问题和答案。
Java 8+提供了 java.time 的实现。Android 26+也是如此。对于早期的Android,最新的工具通过“API desugaring”提供了 java.time 的大部分功能。

相关问题