gpt4 book ai didi

java - 将 localDate 与 UTC 结合使用

转载 作者:行者123 更新时间:2023-12-02 09:42:38 24 4
gpt4 key购买 nike

我在使用 UTC 格式的 LocalDate 时遇到问题。我的服务器使用 UTC,我的数据库也使用 UTC。我使用 LocalDate 来存储基于订阅的应用程序的 billingDate。

我们会在 UTC 午夜进行计费(当进行 billingDate <= LocalDate.now() 等比较时)。我们实际上打算在太平洋标准时间午夜之后的某个时间计费。

我真的觉得在这里使用 LocalDate 是合适的,因为我们只想在当天的某个时间点计费。但是,直接在代码中或在数据库中进行比较(billing_date <= CURRENT_DATE())时,它似乎并不实用。我是否犯了一个错误,这应该是 PST 中的 ZonedDateTime 吗?或者我们应该转换为 ZonedDateTime 进行比较?感觉很容易出错,我们需要记住在进行比较时进行转换,但也许这是正确的解决方案?

有人有过这种情况的经验并找到了很好的解决方案吗?

我已经查看了这个问题,但它没有回答我的问题:Spring REST LocalDate UTC differs of one day

最佳答案

我建议这只是将所需时区传递给 LocalDate.now(ZoneId) 的问题。

  • 使用 LocalDate.now(ZoneId.of("Asia/Manila")) 表示菲律宾标准时间。目前它的结果是 2019-07-09。
  • 使用 LocalDate.now(ZoneId.of("Pacific/Pitcairn")) 表示皮特凯恩标准时间。它刚刚给出了 2019-07-08。

我假设您指的不是太平洋标准时间,因为我们所说的没有时区使用太平洋标准时间(那些在冬季使用的时区现在采用太平洋夏令时)。无论如何,请注意,三个字母的时区缩写通常是不明确的。

具有 now 方法的 java.time 类通常具有它的三个重载变体:

  1. 采用我推荐用于一般用途的 ZoneId 参数的一个。
  2. 采用 Clock 参数的一个,非常适合可测试性。 时钟包含时区,因此该时钟也可以让您获取该指定时区的当前日期和/或时间。
  3. 不接受任何参数并使用 JVM 的默认时区。我建议您永远不要使用它。很高兴让读者知道您已经考虑了时区并选择了您想要的时区。而且同一 JVM 中运行的任何程序都可以随时更改默认时区,因此在实际工作中不够稳定。

关于java - 将 localDate 与 UTC 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56939000/

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