在给定时区中将日期截断为一天的开始
Truncate date to start of the day in a given timeZone
我希望将给定 timeZone 的日期时间截断为 一天的开始 。
如果当前时间是 Mon Aug 24 15:38:42 America/Los_Angeles
,则应将其截断为当天的开始时间 Mon Aug 24 00:00:00 America/Los_Angeles
,然后应将其转换为等效的 UTC 时间。
我已经探索了 Joda Time Library, Apache Commons Library and ZonedDateTime
提供的方法,但所有方法都会截断 UTC 中的日期时间,而不是特定时区。
有人可以帮我解决这个问题吗?提前致谢。
您可以使用 ZonedDateTime
。在 ZonedDateTime
上使用 toLocalDate()
获得 LocalDate
,然后在 LocalDate
上使用 atStartOfDay
并使用区域 ZonedDateTime
实例获得一天的开始。
示例:
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("America/Los_Angeles"));
ZonedDateTime startOfDay = now.toLocalDate().atStartOfDay(now.getZone());
DateTimeFormatter formatter = DateTimeFormatter.RFC_1123_DATE_TIME;
System.out.println(now.format(formatter)); // Mon, 24 Aug 2020 10:41:41 -0700
System.out.println(startOfDay.format(formatter)); // Mon, 24 Aug 2020 00:00:00 -0700
ZonedDateTime
在其自己的时区截断。所以它可以比目前接受的答案更简单一些(这也是一个很好的正确答案)。
ZonedDateTime given = ZonedDateTime.of(2020, 8, 24, 15, 38, 42, 0, ZoneId.of("America/Los_Angeles"));
ZonedDateTime startOfDay = given.truncatedTo(ChronoUnit.DAYS);
System.out.println("Truncated to start of day: " + startOfDay);
Instant inUtc = startOfDay.toInstant();
System.out.println("In UTC: " + inUtc);
输出为:
Truncated to start of day: 2020-08-24T00:00-07:00[America/Los_Angeles]
In UTC: 2020-08-24T07:00:00Z
我希望将给定 timeZone 的日期时间截断为 一天的开始 。
如果当前时间是 Mon Aug 24 15:38:42 America/Los_Angeles
,则应将其截断为当天的开始时间 Mon Aug 24 00:00:00 America/Los_Angeles
,然后应将其转换为等效的 UTC 时间。
我已经探索了 Joda Time Library, Apache Commons Library and ZonedDateTime
提供的方法,但所有方法都会截断 UTC 中的日期时间,而不是特定时区。
有人可以帮我解决这个问题吗?提前致谢。
您可以使用 ZonedDateTime
。在 ZonedDateTime
上使用 toLocalDate()
获得 LocalDate
,然后在 LocalDate
上使用 atStartOfDay
并使用区域 ZonedDateTime
实例获得一天的开始。
示例:
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("America/Los_Angeles"));
ZonedDateTime startOfDay = now.toLocalDate().atStartOfDay(now.getZone());
DateTimeFormatter formatter = DateTimeFormatter.RFC_1123_DATE_TIME;
System.out.println(now.format(formatter)); // Mon, 24 Aug 2020 10:41:41 -0700
System.out.println(startOfDay.format(formatter)); // Mon, 24 Aug 2020 00:00:00 -0700
ZonedDateTime
在其自己的时区截断。所以它可以比目前接受的答案更简单一些(这也是一个很好的正确答案)。
ZonedDateTime given = ZonedDateTime.of(2020, 8, 24, 15, 38, 42, 0, ZoneId.of("America/Los_Angeles"));
ZonedDateTime startOfDay = given.truncatedTo(ChronoUnit.DAYS);
System.out.println("Truncated to start of day: " + startOfDay);
Instant inUtc = startOfDay.toInstant();
System.out.println("In UTC: " + inUtc);
输出为:
Truncated to start of day: 2020-08-24T00:00-07:00[America/Los_Angeles] In UTC: 2020-08-24T07:00:00Z