如何使用时区偏移格式化LocalDateTime

时间:2016-07-06 15:13:28

标签: java java-8

我试着这样做:

    ZoneOffset zoneOffset = ZoneOffset.ofHours(3);
    DateTimeFormatter fmt = DateTimeFormatter.ofPattern("HH:mm:ss");

    LocalDateTime dateTime = LocalDateTime.now();
    System.out.println("dateTimeWithoutOffset: " + fmt.format(dateTime));

    ZonedDateTime zonedDateTime = ZonedDateTime.of(dateTime, zoneOffset);
    System.out.println("dateWithOffset: " + fmt.format(zonedDateTime));

但我得到了相同的输出:

dateTimeWithoutOffset: 18:11:06
dateTimeWithOffset: 18:11:06

我想看到这样的事情:

dateTimeWithoutOffset: 18:11:06
dateTimeWithOffset: 21:11:06

我做错了什么?

2 个答案:

答案 0 :(得分:7)

如果您想使用区域偏移量,OffsetDateTimeZonedDateTime更有意义。

要将偏移应用于当地时间,一种方法是说时间是UTC,并且您希望当地时间在不同的时区。所以它看起来像:

OffsetDateTime timeUtc = dateTime.atOffset(ZoneOffset.UTC); //18:11:06 UTC
OffsetDateTime offsetTime = timeUtc.withOffsetSameInstant(zoneOffset); //21:11:06 +03:00
System.out.println("dateWithOffset: " + fmt.format(offsetTime)); //21:11:06

答案 1 :(得分:0)

因为我试图做相反的事情,并且四处寻找并遇到了这个问题,所以我用它来将服务器(UTC)上的日期转换为-7小时美国亚利桑那州凤凰城时间
注意:服务器是UTC

.empty

希望它能在类似情况下帮助其他人!