【问题标题】:How to get Zone with new DateTime API in Java 8如何在 Java 8 中使用新的 DateTime API 获取区域
【发布时间】:2018-04-18 08:31:07
【问题描述】:

使用新的 API,我可以获得本地日期和时间:

LocalTime localTime = LocalTime.of(9,0,0);
LocalDate localDate = LocalDate.of(2017, Month.JUNE, 3);
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
System.out.println("LocalDateTime:" + localDateTime);

如果我需要将时间转换为特定时区,我也可以使用 ZoneId:

ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of("GMT"));
System.out.println("ZonedDateTime: " + zonedDateTime);

ZonedDateTime zonedDateTime2 = ZonedDateTime.of(localDateTime, ZoneId.of("Europe/London"));
System.out.println("ZonedDateTime London: " + zonedDateTime2);

我可以通过以下方式获取当前时间:

Instant currentTime = Instant.now();

我的问题。是否可以通过这个新 API 获取客户端机器上使用的当前时间的 ZoneId 和数字定义(如 +04:00) ?

【问题讨论】:

    标签: java datetime timezone


    【解决方案1】:

    您可以使用ZoneId.systemDefault()Here is documentation.

    【讨论】:

    • 太棒了。非常感谢。
    • 能否请您提供如何获取 ZoneId 的数字定义(如 +04:00)以获得完整答案。
    • 在这种情况下使用ZoneId.systemDefault().getRules().getOffset(Instant.now()); 但你应该知道这个偏移量取决于当前时间(日光时间等)
    【解决方案2】:

    要获得 GMT 和当前时区之间的秒数或小时数差异,我可以使用:

    ZonedDateTime zonedDateTimeCurrent = ZonedDateTime.of(LocalDateTime.now(), ZoneId.systemDefault());
    ZonedDateTime zonedDateTimeGMT = ZonedDateTime.of(LocalDateTime.now(), ZoneId.of("GMT"));
    Duration timeZoneDifferenceDuration = Duration.between(zonedDateTimeCurrent, zonedDateTimeGMT);
    
    System.out.println("TimeZoneDifference in seconds: " + timeZoneDifferenceDuration.getSeconds());
    
    Double hours = (double)timeZoneDifferenceDuration.getSeconds()/(60*60);
    System.out.println("TimeZoneDifference in hours: " + hours);//3.0 //4.5 //-5.0
    

    但亚历山大的方式似乎更优雅:

    ZoneId.systemDefault().getRules().getOffset(Instant.now());

    System.out.println("Offset: " + ZoneId.systemDefault().getRules().getOffset(Instant.now()));//+03:00
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-09
      • 2016-03-18
      • 2022-07-25
      相关资源
      最近更新 更多