【Java】ZoneId 时区

一、介绍

我们知道,全世界一共是分为24个时区的,每一个时区的时间都是一样的

但是Java在定义时区的时候,不是根据 东一区、东二区、东三区... 这样去定义的,它在定义的时候格式如下:洲名 / 城市名 或者是 国家名 / 城市名

我们来举个例子:

Asia/Shanghai,前面的第一个单词:Asia(亚洲),后面的第二个单词:Shanghai(上海)

Asia/Taipei:亚洲 / 台北

Asia/Chongqing:亚洲 / 重庆

以上三个都是我们国家的,只不过我们要注意的是:Java在定义的时候是没有北京Asia/Beijing,因此我们一般使用的都是 Asia/Shanghai

当然,Java给其他国家也有定义时区,例如:Australia/Canberra 表示的是澳大利亚的首都堪培拉、America/New_York 表示的是美洲的纽约。

image-20240424125502823

所以说在以后我们要指定时区,就直接按照这种格式来进行书写就行了。


二、常用方法

下面三个方法都是静态方法。

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);

运行程序,可以发现集合中都是时区的名称

image-20240424131551870

我们可以先点一下控制台,然后 ctrl + F 搜索一下 Shanghai

image-20240424131742870

除此之外,我们还可以将集合的长度打印一下,结果是 603

System.out.println(zoneIds.size()); // 603

在这么多时区中,不需要背,你只要知道我们可以通过这个方法来获取到所有的时区就行了。

以后如果想要获取的话,直接调用方法,然后打印一下就行了


2)获取当前系统默认时区

static ZoneId systemDefault()	// 获取当前系统默认时区

静态方法直接只用类名调用就好了

ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId); //Asia/Shanghai

如果我们想要更改当前系统的默认时区其实也是有办法的。

在搜索栏中搜索:时间,点击一下 日期和时间设置

image-20240424132239365

在弹出来的窗口中就可以对时区进行修改了

image-20240424132456916

例如我这里就修改为台北的。

image-20240424132516282

回到代码中,右键Run,程序运行完毕,可以发现打印出来的时区已经是 Asia/Taipei

image-20240424132601938

PS:测试完别忘记将系统默认时区改回来哦 ~


3)获取一个指定的时区

static Zoneld of(string zoneld)  // 指定一个时区

直接使用 ZoneId 调用 of() 方法

ZoneId zoneId1 = ZoneId.of("");

如果不知道当前的时区怎么写,没关系,只需要将第一个方法返回的集合打印一下就行了,然后在控制台中随便复制粘贴一个就行了。

image-20240424131551870

ZoneId zoneId1 = ZoneId.of("Asia/Pontianak");
System.out.println(zoneId1); // Asia/Pontianak

但假设你没有指定时区的话,那么代码是会报错的。

image-20240424133659861

有了时区之后,我们就可以用 ZoneId 跟后面一些类结合起来,获取到某个时区真实的时间了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值