gpt4 book ai didi

java.time 相当于 Joda-Time `withTimeAtStartOfDay` ? (获取当天的第一刻)

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:31 27 4
gpt4 key购买 nike

Joda-Time图书馆,DateTime类提供了一种方法 withTimeAtStartOfDay获得当天的第一刻。您可能会认为那一刻是“午夜”。第一时刻通常是时间 00:00:00.000 但并非总是如此。

java.time package在 Java 8 及更高版本中发现具有等效功能?

最佳答案

等效于使用特殊方法,atStartOfDay , 在类里面 LocalDate :

ZoneId zoneId = ZoneId.of("America/New_York");
ZonedDateTime zdt = LocalDate.now(zoneId).atStartOfDay(zoneId);

另请注意,相当于 Joda-Time DateTime不是 LocalDateTime , 但是 ZonedDateTime . zoneId参数在这里很重要。迁移的具体示例 - 另请参阅 timezone website有关 Daylight Saving Time (DST) 的详细信息巴西的过渡:

Joda-Time(旧方法)

DateTime dt = 
new DateTime(2015, 10, 18, 12, 0, DateTimeZone.forID("America/Sao_Paulo"));
dt = dt.withTimeAtStartOfDay();
System.out.println(dt); // 2015-10-18T01:00:00.000-02:00

请注意,此代码甚至会在第一行调用 constructor 时抛出午夜异常。 .

java.time(新方式)

ZoneId zoneId = ZoneId.of("America/Sao_Paulo");
ZonedDateTime zdt =
ZonedDateTime.of(2015, 10, 18, 12, 0, 0, 0, zoneId);
zdt = zdt.toLocalDate().atStartOfDay(zoneId);
System.out.println(zdt); // 2015-10-18T01:00-02:00[America/Sao_Paulo]

第二个程序语句的行为与 Joda-Time 不同,因为它不会抛出异常,而是悄悄地将本地时间移动所讨论的时间间隔的大小,这里是一小时。这意味着,如果您选择了午夜,结果将是相同的(即在 1:00)。如果您选择了 00:30,则结果将为 01:30。上面给出的示例选择中午作为输入。

ZonedDateTime.of(…) 引用文档:

In most cases, there is only one valid offset for a local date-time. In the case of an overlap, when clocks are set back, there are two valid offsets. This method uses the earlier offset typically corresponding to "summer".

In the case of a gap, when clocks jump forward, there is no valid offset. Instead, the local date-time is adjusted to be later by the length of the gap. For a typical one hour daylight savings change, the local date-time will be moved one hour later into the offset typically corresponding to "summer".

不可能 100% 迁移所有细节,例如异常行为和应用的 DST 转换策略,因为两个库差异太大。但这是你的指导方针:

  • DateTime 替换为 ZonedDateTime
  • 考虑切换到 LocalDate 进行中间计算(参见示例)
  • 使用对时区的显式引用并将 DateTimeZone 替换为 ZoneId

关于java.time 相当于 Joda-Time `withTimeAtStartOfDay` ? (获取当天的第一刻),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30293748/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com