Date 时区

Date没有时区的概念,它本质是一个某时区下的一个毫秒数。具体来说是某时区下的距离1970年1月1日00:00:00的毫秒数,比如说System.currentTimeMoillis(),它返回的long型就代表当前操作系统的默认时区的时间距离1970年1月1日00:00:00的毫秒数。而正因为其与时区的无关性,才使得我们的存储数据(时间)是一致的(时区一致性)。一般的我们将Date对象存储于数据库中,当我们 需要展现数据时,将Date对象格式化成想要的格式


Calendar 的计算也是基于时区的,例如:同一个date在不同时区下的小时数是不一样的。但是calendar.getTime();返回的date是没有时区的,因为它是Date类型的


这里的时间戳,指的就是Unix时间戳(Unix timestamp)。它也被称为Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。因此,严格来说,不管你处在地球上的哪个地方,任意时间点的时间戳都是相同的。这点有利于线上和客户端分布式应用统一追踪时间信息。

Unix时间戳不仅被使用在Unix系统、类Unix系统中,也在许多其他操作系统中被广泛采用。但是,这并不意味着目前的时间戳规范会一直持续使用下去。 因为到2038年1月19日时,Unix时间戳就会因为32位内存溢出(32-bit overflow)而无法继续使用。因此,在这一天之前,上千万的网络应用要么采用新的时间戳规范,要么迁移到64位系统,后者可以给时间戳争取“一点”时间。


如果对时间的要求没有那么精确(能够忍受1秒以内的误差),那么没有必要来研究这三个时间的区别,北京时间=UTC+8=GMT+8。

 

先来说下这三个时间的概念:

UT(Universal Time 世界时)是基于天体观察计算出来的时间。UT本身是一个广泛的概念,其下包括UT0,UT1,UT2等。其中UT0是完全按照天体运行计算出来的时间,UT1是在UT0的基础上做了一些调整,UT2是在UT0和UT1的基础上又进行了一些调整。由于天体运行的一些不确定性(比如地球的自转并非匀速的,而是以复杂的方式进行着加速和减速),所以UT时间并不是均匀流过的。

 

UTC(Universal Time Coordinate 协调世界时)是基于原子时钟的时间。什么是原子时钟?个人认为就是一个很小的,长度固定的,不可再分的时间段。所以UTC的时间是均匀的。为了能够尽量减小和UT时间的误差,UTC引入了闰秒(在某些年份的最后一分钟是61秒),以确保UTC是UT1之间的误差在0.9秒之内。

 

GMT(Greenwish Mean Time 格林威治平时),这是UTC的民间名称。GMT=UTC。

 

Java的Date类打算反映UTC,但是却无法做到如此准确。这取决于本地硬件设备环境。因为目前绝大部分的硬件设备都假定 1年=365(+1?) * 24 * 3600秒。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值