需要注意的new Date 时区问题

本文详细解析了Java中Date对象的内部存储原理,即它保存的是自1970年1月1日0点以来的毫秒数。探讨了不同地区的时区差异对日期时间显示的影响,以及如何通过手动设置时区来统一日期时间的输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)、Date中保存的是什么

Date对象里存的只是一个long型的变量,其值为自1970年1月1日0点至Date对象所记录时刻经过的毫秒数。调用Date对象getTime()方法就可以返回这个毫秒数。

(2)、时区

全球分为24个时区,相邻时区时间相差1个小时。比如北京处于东八时区,东京处于东九时区,北京时间比东京时间晚1个小时。

(3)、不同与相同

不同的时区,执行下面的语句 Date date = new Date();  new出的date对象里存的毫秒数是相同的

确切的说,Date对象里存的是自格林威治时间( GMT)1970年1月1日0点至Date对象所表示时刻所经过的毫秒数。所以,如果某一时刻遍布于世界各地的程序员同时执行new Date语句,这些Date对象所存的毫秒数是完全一样的。也就是说,Date里存放的毫秒数是与时区无关的。

执行打印时 System.out.println(date); 时区不同会打印出不同的时间,北京的程序员将会打印出2017年8月24日11:17:10,而东京的程序员会打印出2017年8月24日12:17:10

这是因为Sysytem.out.println函数在打印时间时,会取操作系统当前所设置的时区,然后根据这个时区将同毫秒数解释成该时区的时间。 当然我们也可以手动设置时区,以将同一个Date对象按不同的时区输出。 

 详细的可以参考下这篇博客:https://blog.youkuaiyun.com/halfclear/article/details/77573956

感谢!

转载于:https://my.oschina.net/zjllovecode/blog/2878000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值