一、介绍
我们知道,全世界一共是分为24个时区的,每一个时区的时间都是一样的
但是Java在定义时区的时候,不是根据 东一区、东二区、东三区...
这样去定义的,它在定义的时候格式如下:洲名 / 城市名
或者是 国家名 / 城市名
。
我们来举个例子:
Asia/Shanghai
,前面的第一个单词:Asia(亚洲)
,后面的第二个单词:Shanghai(上海)
。
Asia/Taipei
:亚洲 / 台北
Asia/Chongqing
:亚洲 / 重庆
以上三个都是我们国家的,只不过我们要注意的是:Java在定义的时候是没有北京的 Asia/Beijing
,因此我们一般使用的都是 Asia/Shanghai
。
当然,Java给其他国家也有定义时区,例如:Australia/Canberra
表示的是澳大利亚的首都堪培拉、America/New_York
表示的是美洲的纽约。

所以说在以后我们要指定时区,就直接按照这种格式来进行书写就行了。
二、常用方法
下面三个方法都是静态方法。
Java一共定义了 603个
时区,这些时区的名字是不需要你去背的,在 ZoneId
这个类中有一个方法可以获取到:getAvailableZoneIds()
,这个方法是 static
静态方法,因此我们直接用类名直接调用就行了。
方法会返回一个集合,集合中的就是所有时区的名称。
static Set<string> getAvailableZoneIds() // 获取Java中支持的所有时区名称
再往下,第二个方法,用来获取系统默认时区
static ZoneId systemDefault() // 获取当前系统默认时区
第三个,它可以用来指定一个时区
static Zoneld of(string zoneld) // 指定一个时区
1)获取所有的时区名称
static Set<string> getAvailableZoneIds() // 获取Java中支持的所有时区
这个方法返回的是一个集合,这个集合是没有索引的
Set<String> zoneIds = ZoneId.getAvailableZoneIds();
System.out.println(zoneIds);
运行程序,可以发现集合中都是时区的名称
我们可以先点一下控制台,然后 ctrl + F 搜索一下 Shanghai

除此之外,我们还可以将集合的长度打印一下,结果是 603
System.out.println(zoneIds.size()); // 603
在这么多时区中,不需要背,你只要知道我们可以通过这个方法来获取到所有的时区就行了。
以后如果想要获取的话,直接调用方法,然后打印一下就行了
2)获取当前系统默认时区
static ZoneId systemDefault() // 获取当前系统默认时区
静态方法直接只用类名调用就好了
ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId); //Asia/Shanghai
如果我们想要更改当前系统的默认时区其实也是有办法的。
在搜索栏中搜索:时间
,点击一下 日期和时间设置

在弹出来的窗口中就可以对时区进行修改了
例如我这里就修改为台北的。
回到代码中,右键Run,程序运行完毕,可以发现打印出来的时区已经是 Asia/Taipei
了

PS:测试完别忘记将系统默认时区改回来哦 ~
3)获取一个指定的时区
static Zoneld of(string zoneld) // 指定一个时区
直接使用 ZoneId
调用 of()
方法
ZoneId zoneId1 = ZoneId.of("");
如果不知道当前的时区怎么写,没关系,只需要将第一个方法返回的集合打印一下就行了,然后在控制台中随便复制粘贴一个就行了。
ZoneId zoneId1 = ZoneId.of("Asia/Pontianak");
System.out.println(zoneId1); // Asia/Pontianak
但假设你没有指定时区的话,那么代码是会报错的。
有了时区之后,我们就可以用 ZoneId
跟后面一些类结合起来,获取到某个时区真实的时间了。