gpt4 book ai didi

java - 我们如何决定是使用 ZonedDateTime 还是 LocalDateTime?

转载 作者:行者123 更新时间:2023-12-03 08:44:21 24 4
gpt4 key购买 nike

有时候,当我们想要解决某些日期/时间问题时,我们会发现很难判断是使用ZonedDateTime还是LocalDateTime

例如,给定一个纪元,我们想知道一周中的哪一天。

我们发现可以使用 ZonedDateTimeLocalDateTime 来完成此任务。这是代码示例

import java.time.*;

public class Main {
public static void main(String[] args) {
long currentTimeMillis = System.currentTimeMillis();

// Yield correct result.
System.out.println("useLocalDateTime -> " + useLocalDateTime(currentTimeMillis));

// Also yield correct result.
System.out.println("useZonedDateTime -> " + useZonedDateTime(currentTimeMillis));
}

public static DayOfWeek useLocalDateTime(long currentTimeMillis) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(
Instant.ofEpochMilli(currentTimeMillis),
ZoneId.systemDefault()
);

DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();

return dayOfWeek;
}

public static DayOfWeek useZonedDateTime(long currentTimeMillis) {
ZonedDateTime zonedDateTime = Instant.ofEpochMilli(currentTimeMillis).atZone(ZoneId.systemDefault());

DayOfWeek dayOfWeek = zonedDateTime.getDayOfWeek();

return dayOfWeek;
}
}

在上述情况下,使用 ZonedDateTime 还是 LocalDateTime 更好?是否有任何指南,以便我们可以选择正确的类作为工具?

我一直认为 ZonedDateTimeLocalDateTime 更“功能丰富”。 LocalDateTime 可以完成的任何事情,ZonedDateTime 也可以完成,但反之则不然。因此,如果我纠结于选择哪个,我将默认选择 ZonedDateTime。这是一个正确的概念吗?

最佳答案

您是否需要存储附加到特定时区的时间数据,或者是否需要处理具有关联偏移量的时间数据?

如果您这样做,请使用ZonedDateTime

如果您不这样做,请使用LocalDateTime

我想使用ZonedDateTime的一些示例:

  • 我正在解析带有区域信息的 ISO 8601 时间戳。
  • 我正在查看来自位于两个不同物理位置的两个不同来源的数据。
  • 我正在尝试计算给定时间戳的星期几。

我想使用LocalDateTime的一些示例:

  • 我确信我的系统只需要关心一个时区 - 我的。
  • 我正在解析的数据没有时间戳信息。
  • 我想知道两个时间戳之间过去了多少秒。如果时间戳采用 ISO 8601 格式,则此可能首先转换为 ZonedDateTime,然后最终转化为 Duration

绝对跨时区注意一周中的日子,因为国际日期变更线可以根据您所在的实际位置来偏移一周中的日子。

关于java - 我们如何决定是使用 ZonedDateTime 还是 LocalDateTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62048952/

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