【问题标题】:dateTimeFormatter short time-zone name not returneddateTimeFormatter 未返回短时区名称
【发布时间】:2020-01-22 17:00:41
【问题描述】:

java8 中的以下代码没有返回短时区名称,而是返回“-08:00”

ZonedDateTime dateTime1 = ZonedDateTime.parse("2020-01-22T08:07:59.179-08:00");
ZoneId.of("America/Los_Angeles");
System.out.println(dateTime1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS z")));

这个输出:2020-01-22 08:07:59.179 -08:00

请告知哪种格式输入会产生“2020-01-22 08:07:59.179 PST”

【问题讨论】:

  • 仅供参考:与 UTC 的偏移量只是小时分秒数,如果早于 UTC,则为正,如果落后于 UTC,则为负。时区更多。时区是特定地区的人们使用的偏移量的过去、现在和未来变化的历史。政客们莫名其妙地经常出人意料地选择改变他们的管辖范围。另一件事:PST 等 2-4 个字母代码实际上不是时区;它们不是标准化的,甚至不是唯一的。实时时区名称为Continent/Region 格式。

标签: java java-8 date


【解决方案1】:

您可能需要将 zoneId 添加到您的日期:

import java.time.ZonedDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

public class StackOverflowTest {
  public static void main(String[] args){

    ZonedDateTime dateTime1 =
       ZonedDateTime.parse("2020-01-22T08:07:59.179-08:00")
      .withZoneSameInstant(ZoneId.of("America/Los_Angeles"));

    ZonedDateTime dateTime2 = // I'm at CET
       ZonedDateTime.parse("2020-01-22T08:07:59.179+01:00")
      .withZoneSameInstant(ZoneId.of("Europe/Berlin"));

    System.out.println(dateTime1.format(DateTimeFormatter
                                       .ofPattern("yyyy-MM-dd HH:mm:ss.SSS z")));
    System.out.println(dateTime2.format(DateTimeFormatter
                                       .ofPattern("yyyy-MM-dd HH:mm:ss.SSS z")));

/* prints
2020-01-22 08:07:59.179 GMT-08:00
2020-01-22 08:07:59.179 CET
*/
  }
}

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 2021-12-24
    • 2011-05-28
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    相关资源
    最近更新 更多