如果在开发中我们有这样的需求:我们的系统需要获取美国现在的时间,或者其他地区的时间给用户观看,或者进行一些处理,那应该怎么办呢?
美国时间和我们系统当前的时间肯定是不一样的,遇到这样的需求,我们就要用到ZoneId来解决了。
ZoneId它代表的是时区,我们先来了解一下常识:
时区
- 由于世界各个国家与地区的经度不同,各地区的时间也有所不同,因此会划分为不同的时区。
世界标准时间(UTC)
中国标准时间:世界标准时间(UTC) + 8小时
ZoneId
什么是时区Id呢?
为了方便记忆,通常我们会用一个时区里的标志性城市来代表这个时区;格式一般是:
- 洲名/城市名
- 国家名/城市名
在Java中,它是支持亚洲/上海,亚洲/重庆这样的时区信息的,例如:
- Asia/Shanghai
- Asia/Chongqing
- America/New_York
常见方法
用法示例
运行结果:
ZoneDateTime
- 带时区的时间
常见方法
用法示例
运行结果:
其余操作都是与LocalDateTime等类是一样的。
Instant
Instant是代替传统的Date日期类的,Instant 时间线上的某个时刻/时间戳
通过获取Instant的对象可以拿到此刻的时间,该时间由两部分组成:从1970-01-01 00:00:00开始走到此刻的总秒数 + 不够1秒的纳秒数
Tip:
- 1秒 = 1000毫秒
- 1毫秒 = 1000微秒
- 1微秒 = 1000纳秒
- 1秒 = 1000 000 000纳秒
常见方法
用法示例
运行结果:
Instant的作用:做代码的性能分析,或者记录用户的操作时间点
- 传统的Date类,只能精确到毫秒,并且是可变对象;
- 新增的Instant类,可以精确到纳秒,并且是不可变对象,推荐用Instant代替Date
END