gpt4 book ai didi

java - 带 ZoneOffset 的时间戳格式

转载 作者:行者123 更新时间:2023-11-30 03:07:57 28 4
gpt4 key购买 nike

我想使用基于 UTC 的不同时间偏移来打印 now():

offset=ZoneOffset.ofHours(-1);
zoneId=ZoneId.ofOffset("UTC", offset);
timeStampformater=DateTimeFormatter.ofPattern("yyyy.MM.dd.hh.mm.ss").withZone(zoneId);
System.out.println(LocalDateTime.now().format(timeStampformater));

offset=ZoneOffset.ofHours(0);
zoneId=ZoneId.ofOffset("UTC", offset);
timeStampformater=DateTimeFormatter.ofPattern("yyyy.MM.dd.hh.mm.ss").withZone(zoneId);
System.out.println(LocalDateTime.now().format(timeStampformater));

offset=ZoneOffset.ofHours(1);
zoneId=ZoneId.ofOffset("UTC", offset);
timeStampformater=DateTimeFormatter.ofPattern("yyyy.MM.dd.hh.mm.ss").withZone(zoneId);
System.out.println(LocalDateTime.now().format(timeStampformater));

但是它总是打印相同的本地时间:

2015.12.15.09.56.00  -> should be 7:56
2015.12.15.09.56.00 -> should be 8:56
2015.12.15.09.56.00 -> OK because it is the local time.

最佳答案

方法DateTimeFormatter.withZone不更改日期/时间。在内部,格式化程序将时区设置为要格式化的日期/时间,然后对其进行格式化。引用其 Javadoc:

In all other cases, the override zone is added to the temporal, replacing any previous zone, but without changing the date/time.

LocalDateTime.now() 始终返回默认时区中的当前日期/时间。使用特定的 ZoneIdZoneOffset 设置时区(使用 atZone 创建 ZonedDateTime),您将获得相同的日期/时间,但在不同的时区(因此是不同的时刻)。

相反,您应该通过使用 LocalDateTime.now(ZoneId) 指定 ZoneIdZoneOffset 来构造 LocalDateTime :

offset = ZoneOffset.ofHours(-1);
zoneId = ZoneId.ofOffset("UTC", offset);
timeStampformater = DateTimeFormatter.ofPattern("yyyy.MM.dd.hh.mm.ss");
System.out.println(LocalDateTime.now(zoneId).format(timeStampformater));

offset = ZoneOffset.ofHours(0);
zoneId = ZoneId.ofOffset("UTC", offset);
timeStampformater = DateTimeFormatter.ofPattern("yyyy.MM.dd.hh.mm.ss");
System.out.println(LocalDateTime.now(zoneId).format(timeStampformater));

offset = ZoneOffset.ofHours(1);
zoneId = ZoneId.ofOffset("UTC", offset);
timeStampformater = DateTimeFormatter.ofPattern("yyyy.MM.dd.hh.mm.ss");
System.out.println(LocalDateTime.now(zoneId).format(timeStampformater));

请注意,您可以通过不使用 ZoneId 变量来简化代码。

offset = ZoneOffset.ofHours(-1);
timeStampformater = DateTimeFormatter.ofPattern("yyyy.MM.dd.hh.mm.ss");
System.out.println(LocalDateTime.now(offset).format(timeStampformater));

关于java - 带 ZoneOffset 的时间戳格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34284969/

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