2021-04-18 11:35  阅读(72)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-date-time-methods.html

Java日期时区

ZoneOffset表示与UTC时区偏移的固定区域。

ZoneOffset不跟踪由夏令时导致的区域偏移的更改。

ZoneOffset类声明三个常量:

  • UTC
  • MAX
  • MIN

UTC是UTC的时区偏移常量。

MAX和MIN是最大和最小支持的区域偏移。

Z用作UtC时区的区域偏移指示符。

我们可以用小时,分钟和秒的组合创建ZoneOffset

    import java.time.ZoneOffset;
    
    public class Main {
      public static void main(String[] args) {
        ZoneOffset zoneOffset1  = ZoneOffset.ofHours(-1);
        System.out.println(zoneOffset1);
        ZoneOffset zoneOffset2  = ZoneOffset.ofHoursMinutes(6, 30);
        System.out.println(zoneOffset2);
        ZoneOffset zoneOffset3  = ZoneOffset.ofHoursMinutesSeconds(9, 30,  45); 
        System.out.println(zoneOffset3);
      }
    }
    

上面的代码生成以下结果。

202104181137_1.png

例2

以下代码显示如何从偏移创建区域偏移。

    import java.time.ZoneOffset;
    
    public class Main {
      public static void main(String[] args) {
        ZoneOffset zoneOffset1  = ZoneOffset.of("+05:00");
        ZoneOffset zoneOffset2  = ZoneOffset.of("Z"); // Same as ZoneOffset.UTC 
        System.out.println(zoneOffset1);
        System.out.println(zoneOffset2);
    
      }
    }
    

上面的代码生成以下结果。

202104181136_2.png

例3

以下代码从ZoneOffset输出常量值。

    import java.time.ZoneOffset;
    
    public class Main {
      public static void main(String[] args) {
        System.out.println("ZoneOffset.UTC: "    + ZoneOffset.UTC); 
        System.out.println("ZoneOffset.MIN: "    + ZoneOffset.MIN); 
        System.out.println("ZoneOffset.MAX: "    + ZoneOffset.MAX);
    
    
      }
    }
    

上面的代码生成以下结果。

202104181136_3.png

注意

Java Date-Time API支持以小时,分钟和秒为单位的区域偏移量。

来自ZoneOffset的compareTo()允许我们比较两个区域偏移。

+1:30的区域偏移在+1:00的区域偏移之前。

Java Date-Time API支持-18:00到+18:00之间的区域偏移。

ZoneId

ZoneId表示区域偏移及其用于更改区域偏移的规则夏令时。

ZoneOffset表示从UtC时区偏移的固定区域,而ZoneId表示可变区偏移。

这些更改是由时区规则定义的。

时区ID

每个时区都有一个ID,可以用三种格式定义:

  • 在区域偏移中,可以是“Z”,“+ hh:mm:ss”或“-hh:mm:ss”,例如“+01:00”。
  • 前缀为“UTC”,“GMT”或“UT”,后跟区域偏移量,例如“UTC + 01:00”。
  • 在区域名称中,例如,“美洲/芝加哥”。

以下代码显示如何使用of()工厂方法创建ZoneId。

    import java.time.ZoneId;
    
    public class Main {
      public static void main(String[] args) {
        ZoneId  usChicago   = ZoneId.of("America/Chicago");
        System.out.println(usChicago);
        ZoneId  fixedZoneId = ZoneId.of("+01:00");
        System.out.println(fixedZoneId);
      }
    }
    

上面的代码生成以下结果。

202104181136_4.png

例4

ZoneId中的getAvailableZoneIds()返回所有已知时区ID。

    import java.time.ZoneId;
    import java.util.Set;
    
    public class Main {
      public static void main(String[] args) {
        Set<String> zoneIds = ZoneId.getAvailableZoneIds();
        for  (String  zoneId: zoneIds) { 
          System.out.println(zoneId);
        }
      }
    }
    

上面的代码生成以下结果。

202104181136_5.png

ZoneRules

ZoneRules跟踪区域偏移如何变化。

下面的代码显示了如何使用ZoneRules以获取有关ZoneId的时间偏移和时间更改的信息。

    import java.time.LocalDateTime;
    import java.time.ZoneId;
    import java.time.ZoneOffset;
    import java.time.zone.ZoneOffsetTransition;
    import java.time.zone.ZoneRules;
    import java.util.List;
    
    public class Main {
      public static void main(String[] args) {
        LocalDateTime  now = LocalDateTime.now(); 
        ZoneId  usChicago   = ZoneId.of("America/Chicago");
        System.out.println("Zone ID:  "  + usChicago.getId());
    
        ZoneRules  rules = usChicago.getRules();
        System.out.println("isFixedOffset(): "  + rules.isFixedOffset());
        ZoneOffset offset = rules.getOffset(now); 
        System.out.println("Zone offset: "  + offset);
    
        List<ZoneOffsetTransition> transitions = rules.getTransitions(); 
        System.out.println(transitions);
    
      }
    }
    

上面的代码生成以下结果。

202104181136_6.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 日期时区
上一篇
Java 实例/持续时间
下一篇
Java 年月日