Class -- 06 -- TimeZone类常用方法详解析

这次主要整理下 Java 中 TimeZone 类的常用方法


一、TimeZone 类的定义

  • TimeZone 类位于 java.util 包中,是一个抽象类,主要包含了对于时区的各种操作,可以进行计算时间偏移量或夏令时等操作

二、TimeZone 类常用方法

  • getAvailableIDs()

    • 获取Java支持的所有时区 ID

      System.out.println(Arrays.toString(TimeZone.getAvailableIDs()));
      
      // Asia/Shanghai, Asia/Chongqing, Asia/Hong_Kong, Asia/Macao, ...
      
  • getAvailableIDs(int rawOffset)

    • 根据 时间偏移量 来获取时区 ID

      // 东八区时间,与标准时间相差8小时
      System.out.println(Arrays.toString(TimeZone.getAvailableIDs(8*60*60*1000)));
      
      // [Asia/Brunei, Asia/Choibalsan, Asia/Chongqing, Asia/Chungking, Asia/Harbin,
      // Asia/Hong_Kong, Asia/Irkutsk, Asia/Kuala_Lumpur, Asia/Kuching, Asia/Macao, 
      // Asia/Macau, Asia/Makassar, Asia/Manila, Asia/Shanghai, Asia/Singapore, 
      // Asia/Taipei, Asia/Ujung_Pandang, Asia/Ulaanbaatar, Asia/Ulan_Bator, 
      // Australia/Perth, Australia/West, CTT, Etc/GMT-8, Hongkong, PRC, Singapore]
      

  • getDefault()

    • 获取当前系统的默认时区,中国默认为东八区

      System.out.println(TimeZone.getDefault()); 
      
      // sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,
      // dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
      

  • setDefault(TimeZone zone)

    • 设置当前系统的默认时区

      TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
      System.out.println(TimeZone.getDefault());
      
      // sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,
      // dstSavings=0,useDaylight=false,transitions=19,lastRule=null]
      

  • getTimeZone(String ID)

    • 根据时区 ID 来获取其对应的时区

      System.out.println(TimeZone.getTimeZone("GMT+08:00"));
      
      // sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,
      // dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
      
  • getTimeZone(ZoneId zoneId)

    • 根据 ZoneId 对象来获取其对应的时区

      System.out.println(TimeZone.getTimeZone(ZoneId.of("GMT+08:00")));
      
      // sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,
      // dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
      

  • getDisplayName()

    • 获取该 TimeZone 对象的时区名称

      TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
      System.out.println(timeZone.getDisplayName()); // 中国标准时间
      
  • getDisplayName(Locale locale)

    • 获取该 TimeZone 对象的时区名称,并根据 Locale 对象进行国际化

      TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
      System.out.println(timeZone.getDisplayName()); // 中国标准时间
      System.out.println(timeZone.getDisplayName(Locale.ENGLISH)); // China Standard Time
      
  • getDisplayName(boolean daylight, int style)

    • 获取该 TimeZone 对象的时区名称

    • daylight

      • true:指定夏令时名称

      • false:指定标准时间名称

    • style

      • TimeZone.LONG:显示全称

      • TimeZone.SHORT:显示简称

      TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
      System.out.println(timeZone.getDisplayName()); // 中国标准时间
      System.out.println(timeZone.getDisplayName(false, TimeZone.LONG)); // 中国标准时间
      System.out.println(timeZone.getDisplayName(false, TimeZone.SHORT)); // CST (China Standard Time)
      
  • getDisplayName(boolean daylight, int style, Locale locale)

    • 获取该 TimeZone 对象的时区名称,并根据 Locale 对象进行国际化

    • daylight

      • true:指定夏令时名称

      • false:指定标准时间名称

    • style

      • TimeZone.LONG:显示全称

      • TimeZone.SHORT:显示简称

      TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
      System.out.println(timeZone.getDisplayName()); // 中国标准时间
      System.out.println(timeZone.getDisplayName(false, TimeZone.LONG, Locale.ENGLISH)); // China Standard Time
      

  • getID()

    • 获取该 TimeZone 对象的时区 ID

      TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
      System.out.println(timeZone.getID()); // Asia/Shanghai
      

  • setID(String ID)

    • 设置该 TimeZone 对象的时区 ID

      TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
      timeZone.setID("Asia/Chongqing");
      System.out.println(timeZone.getID()); // Asia/Chongqing
      

  • getOffset(long date)

    • 获取该时间所在时区的时间偏移量

      TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
      System.out.println(timeZone.getOffset(System.currentTimeMillis())); // 28800000
      

  • getDSTSavings()

    • 在夏令时规则生效时,返回相对于标准时间提前的毫秒数

    • 如果此时区不实施夏令时,则为 0

      TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
      // 中国没有夏令时,故为0
      System.out.println(timeZone.getDSTSavings()); // 0
      

  • getRawOffset()

    • 获取时间原始偏移量,该值不受夏令时的影响,故称为时间原始偏移量

      TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
      System.out.println(timeZone.getRawOffset()); // 28800000
      

  • setRawOffset(int offsetMillis)

    • 设置时间原始偏移量

      TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
      timeZone.setRawOffset(25200000);
      System.out.println(timeZone.getRawOffset()); // 25200000
      

  • toZoneId()

    • 将 TimeZone 对象转换为 ZoneId 对象

      TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
      ZoneId zoneId = timeZone.toZoneId();
      System.out.println(zoneId); // Asia/Shanghai
      

  • useDaylightTime()

    • 查询此时区是否使用夏令时

      TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
      System.out.println(timeZone.useDaylightTime()); // false
      

  • inDaylightTime(Date date)

    • 查询给定的日期是否在此时区的夏令时中

      TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
      System.out.println(timeZone.inDaylightTime(new Date())); // false
      

  • hasSameRules(TimeZone other)

    • 如果两时区仅时区 ID 不同,但具有相同的规则和时间偏移量,则返回 true

    • 如果另一个时区为空,则返回 false

      TimeZone timeZone1 = TimeZone.getTimeZone("Asia/Shanghai");
      TimeZone timeZone2 = TimeZone.getTimeZone("Asia/Chongqing");
      System.out.println(timeZone1.hasSameRules(timeZone2)); // true
      

你可能感兴趣的:(class,Java常用类方法详解)