【发布时间】:2019-11-18 21:58:49
【问题描述】:
我正在创建一个日期并将其存储到数据库中,我想获取当前时间,即 timezone = "Asia/Istanbul" 而不是我的当地时间。
我正在本地计算机中创建日期,我的本地时区也是“亚洲/伊斯坦布尔”。
当我将它部署到我的服务器时,服务器时区是 utc,它每次都转向 utc。
我有不同的 2 台机器,2 台机器有不同的时区,所以我需要用时区设置我的数据日期。
这就是我所做的。在我的本地计算机上没问题,但在 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
我希望创建它时像亚洲/伊斯坦布尔这样的日期。
【问题讨论】:
-
错误的类。
LocalDateTime故意缺少任何时区或与 UTC 偏移的概念。阅读class Javadoc。该类不能代表时刻,即时间线上的特定点。我想不出任何情况下调用LocalDateTime.now()是正确的做法。
标签: java date timezone localdate