gpt4 book ai didi

java - 如何获取日期和时区格式

转载 作者:行者123 更新时间:2023-12-02 01:25:52 24 4
gpt4 key购买 nike

我正在创建一个日期并将其存储到数据库中,我想获取当前时间,即时区=“亚洲/伊斯坦 boolean ”而不是我的本地时间。

我正在本地计算机中创建日期,我的本地时区也是“亚洲/伊斯坦 boolean ”。

当我将它部署到我的服务器时,服务器时区是 utc,它每次都会变成 utc。

我有两台不同的机器,两台机器有不同的时区,所以我需要使用时区设置数据日期。

这就是我所做的。在我的本地计算机上没问题,但在 UTC 的服务器上失败

LocalDateTime localDateTime = LocalDateTime.now();
// it gives my local date time, 2019-07-09T10:30:03.171
// local date is now 1:30 pm, UTC is 3 hours after, it looks ok.
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of("Asia/Istanbul"));
//2019-07-09T10:30:03.171+03:00[Asia/Istanbul]
// it looks +3. I dont want to see +3, I want the date like 01:30 which is shiefted
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
zonedDateTime.format(formatter);
//2019-07-09T07:30:03.171Z
// zone is disappeared, this is 3 hours before UTC

当我创建它时,我期望像亚洲/伊斯坦 boolean 这样的日期。

最佳答案

我根本不会使用LocalDateTime。始终使用 ZonedDateTime 来消除对时间的任何疑问。另外,始终将 ZoneId(如果不是 Clock)传递给 now 方法。这使得您的代码独立于计算机和 JVM 的时区设置。

    ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("Asia/Istanbul"));
System.out.println(zonedDateTime);

2019-07-09T14:14:17.280852+03:00[Asia/Istanbul]

您可能误解了 +03:00 部分,人们有时会这样做。这意味着显示的时间已经比 UTC 早 3 小时。因此显示的时间点等于 11:14:17 UTC。

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(zonedDateTime.format(formatter));

2019-07-09 14:14:17

您的格式化程序不包含时区,因此不会显示。但现在是在伊斯坦 boolean 的时间。

您的代码出了什么问题?

我假设您代码中的注释是在 UTC 时间在您的服务器上运行的(并不完全清楚),并且您在 UTC 10:30 左右运行代码,与伊斯坦 boolean 的 13:30 相同。

LocalDateTime 是没有时区且没有 UTC 偏移的日期和时间。它的无参数 now 方法使用 JVM 的时区设置(在本例中为 UTC),因此为您提供相关日期的 10:30。我认为 ZonedDateTime.of 在这里是错误的:它从 LocalDateTime 获取 10:30 并从 ZoneId 对象获取伊斯坦 boolean 时区,并给出你10:30在伊斯坦 boolean ,这不是你想要的。您想要的是 13:30,也就是下午 1:30。

关于java - 如何获取日期和时区格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56950965/

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