【问题标题】:java code to convert UTC time to local datetime with an offset comparejava代码将UTC时间转换为具有偏移比较的本地日期时间
【发布时间】:2017-07-31 13:02:45
【问题描述】:

我们收到相对于 UTC 时间的日期时间元素,例如 2004-04-12T13:20:00Z

我们希望在本地日期时间中输出日期时间,用相对于 UTC 时间的偏移量表示,例如 2004-04-12T12:20:00-01:00.

【问题讨论】:

  • 通过stackoverflow.com/questions/12487125/…。希望你得到正确的答案..
  • Java 8 日期和时间类非常适合这一点(比老式的 SimpleDateFormatCalendar 好得多)。你会使用 Java 8 吗?

标签: java datetime simpledateformat utc


【解决方案1】:

使用 Java 8 日期和时间类,这很简单。唯一要注意的是,如果我们想选择计算机的默认时区,我们需要通过ZoneDateTime,然后通过OffsetDateTime 来获取您请求的输出格式(另一个选项是使用具体DateTimeFormatter;现在我依赖OffsetDateTime.toString())。

    String utcTime = "2004-04-12T13:20:00Z";
    OffsetDateTime dateTimeWithOffset = Instant.parse(utcTime).atZone(ZoneId.systemDefault()).toOffsetDateTime();
    System.out.println(dateTimeWithOffset);

在我的电脑上打印出来

2004-04-12T14:20+01:00

在答案和代码中,我故意避免使用您在问题中使用的术语“本地日期时间”。这是为了避免与LocalDateTime 类混淆,后者用于任何时区或偏移信息的日期和时间。

【讨论】:

  • 好答案。我建议把你的名字localtime var 改成offsetDateTime 之类的名字,并指出原始发布者对“本地”一词的误解。
【解决方案2】:

希望以下解决方案有效。

String date_s = "2004-04-12T13:20:00Z"; 
    SimpleDateFormat dt = new SimpleDateFormat("yyyyy-MM-dd'T'HH:mm:ss'Z'"); 
    Date date = dt.parse(date_s); 

     Calendar cal = Calendar.getInstance(); // creates calendar
        cal.setTime(date); // sets calendar time/date
        cal.add(Calendar.HOUR, 1); // adds one hour (do any offset that you want here)
        String out = dt.format(cal.getTime());
        System.out.println(out.substring(1));

【讨论】:

  • 非常麻烦的 DateCalendar 类现在已被 java.time 类所取代。
【解决方案3】:

使用 Java 8 JDK,您可以使用 java.time.Instant 类来引用 UTC 时间。以及偏移时间的以下类:

java.time.LocalDate java.time.LocalTime java.time.LocalDateTime

例子:

Instant instant = Instant.now();
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.ofOffset("MyZoneId", ZoneOffset.ofHours(3)));

【讨论】:

    【解决方案4】:

    使用来自 java 8 API 的ZonedDateTime

    ZonedDateTime.ofInstant(Instant.parse("2004-04-12T13:20:00Z"), ZoneId.of("CET"))
    

    它会给你2004-04-12T15:20+02:00[CET]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多