Java-TimeZone类常用方法详解

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


一、TimeZone类的定义

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

二、TimeZone类的常用方法

  1、getAvailableIDs()

  • getAvailableIDs()
  • 获取Java支持的所有时区ID
System.out.println(Arrays.toString(TimeZone.getAvailableIDs()));
  • getAvailableIDs(int rawOffset)
  • 根据 时间偏移量 来获取时区ID
System.out.println(Arrays.toString(TimeZone.getAvailableIDs(28800000)));

  2、getDefault()

  • 获取当前系统的默认时区,中国默认为东八区
// sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,
// dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
System.out.println(TimeZone.getDefault()); 

  3、setDefault(TimeZone zone)

  • 设置当前系统的默认时区
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
// sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,
// dstSavings=0,useDaylight=false,transitions=19,lastRule=null]
System.out.println(TimeZone.getDefault());

  4、getTimeZone()

  • getTimeZone(String ID)
  • 根据 时区ID 来获取其对应的时区
// sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,
// dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
System.out.println(TimeZone.getTimeZone("GMT+08:00"));
  • getTimeZone(ZoneId zoneId)
  • 根据 ZoneId 对象来获取其对应的时区
// sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,
// dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
System.out.println(TimeZone.getTimeZone(ZoneId.of("GMT+08:00")));

  5、getDisplayName()

  • 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
  • getDisplayName(boolean daylight, int style, Locale locale)
  • 获取该TimeZone对象的时区名称
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone.getDisplayName()); // 中国标准时间
System.out.println(timeZone.getDisplayName(false, TimeZone.LONG, Locale.ENGLISH)); // China Standard Time

  6、getID()

  • 获取该TimeZone对象的时区ID
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone.getID()); // Asia/Shanghai

  6、setID(String ID)

  • 设置该TimeZone对象的时区ID
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
timeZone.setID("Asia/Chongqing");
System.out.println(timeZone.getID()); // Asia/Chongqing

  7、getOffset(long date)

  • 获取该时间所在时区的时间偏移量
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone.getOffset(System.currentTimeMillis())); // 28800000

  8、getDSTSavings()

  • 在夏令时规则生效时,返回相对于标准时间提前的毫秒数,如果此时区不实施夏令时,则为 0
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
// 国内没有夏令时,故为0
System.out.println(timeZone.getDSTSavings()); // 0

  9、getRawOffset()

扫描二维码关注公众号,回复: 2853173 查看本文章
  • 获取时间原始偏移量,该值不受夏令时的影响,故称为时间原始偏移量
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone.getRawOffset()); // 28800000

  10、setRawOffset(int offsetMillis)

  • 设置时间原始偏移量
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
timeZone.setRawOffset(25200000);
System.out.println(timeZone.getRawOffset()); // 25200000

  11、toZoneId()

  • 将TimeZone对象转换为ZoneId对象
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
ZoneId zoneId = timeZone.toZoneId();
System.out.println(zoneId); // Asia/Shanghai

  12、useDaylightTime()

  • 查询此时区是否使用夏令时
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone.useDaylightTime()); // false

  13、inDaylightTime(Date date)

  • 查询给定的日期是否在此时区的夏令时中
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone.inDaylightTime(new Date())); // false

  14、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

猜你喜欢

转载自blog.csdn.net/Goodbye_Youth/article/details/81807273
今日推荐