前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >如何获取zoneId

如何获取zoneId

原创
作者头像
张紫娃
修改2024-12-27 12:47:44
修改2024-12-27 12:47:44
61300
代码可运行
举报
运行总次数:0
代码可运行

如何获取zoneId

获取系统默认时区

代码语言:java
复制
// JDK 1.8之前做法
TimeZone.getDefault().getID()             // "Asia/Shanghai"
TimeZone.getTimeZone("GMT+08:00").getID() // "GMT+08:00"
TimeZone.getTimeZone("GMT-05:00").getID() // "GMT-05:00"
Arrays.stream(TimeZone.getAvailableIDs()).forEach(System.out::println); // 查询所有可用的zoneId

// JDK 1.8之后做法
ZoneId.systemDefault().getId()        // "Asia/Shanghai"
ZonedDateTime.now().getZone().getId() // "Asia/Shanghai"
ZoneId.getAvailableZoneIds().forEach(System.out::println);  // 查询所有可用的zoneId

of 直接构造

代码语言:java
复制
ZoneId.of("Asia/Shanghai").getId());	//	Asia/Shanghai
ZoneId.of("+09:00").getId());	        //	+09:00
ZoneId.of("+8").getId());	            //	+08:00
ZoneId.of("+0").getId());	            //	Z
ZoneId.of("Z").getId());	            //	Z
ZoneId.of("UTC").getId());	            //	UTC

from

代码语言:javascript
代码运行次数:0
复制
ZoneId.from(ZonedDateTime.now()).getId()  // "Asia/Shanghai"
ZoneId.from(ZoneOffset.of("+8")).getId()  // "+08:00"
//ZoneId.from(LocalDateTime.now()));//报错:java.time.DateTimeException: Unable to obtain ZoneId from TemporalAccessor:
//ZoneId.from(LocalDate.now()));    //报错:java.time.DateTimeException: Unable to obtain ZoneId from TemporalAccessor:

ofOffset(不推荐)

代码语言:java
复制
// 根据偏移量得到的ZoneId内部并无现成时区规则可用,因此对于有夏令营的国家转换可能出问题,一般不建议这么去做
ZoneId.ofOffset("UTC", ZoneOffset.of("+8")).getId()   // "UTC+08:00"
ZoneId.ofOffset("UTC", ZoneOffset.of("Z")).getId()    // "UTC"

如何设置默认时区?

API方式

代码语言:java
复制
TimeZone.getDefault()); // sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null]

TimeZone timeZone = TimeZone.getTimeZone("GMT+8"); // sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
TimeZone.setDefault(timeZone); // sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]

JVM参数方式

代码语言:java
复制
-Duser.timezone=GMT+8

运维设置方式

将操作系统主机时区设置为北京时区,这是推荐方式,可以完全对开发者无感,也方便了运维统一管理。

参考:全网最全!彻底弄透Java处理GMT/UTC日期时间

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何获取zoneId
    • 获取系统默认时区
    • of 直接构造
    • from
    • ofOffset(不推荐)
  • 如何设置默认时区?
    • API方式
    • JVM参数方式
    • 运维设置方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档