您当前所在的位置: www.kashbet.net > 洗衣 > 正文

Java中若何显示分歧时区的时间(道理详解)

发布时间:2019-05-05 浏览次数:

  当我们利用System.out.println来输出一个时间的时候,他会挪用Date类的toString方式,而该方读取操做系统的默认时区来进行时间的转换。

  世界各个国度位于地球分歧上,因而分歧国度,出格是工具跨度大的国度日出、日落时间必定有所误差。这些误差就是所谓的时差。

  时间戳(timestamp),一个能暗示一份数据正在某个特按时间之前曾经存正在的、 完整的、 可验证的数据,凡是是一个字符序列,独一地标识某一刻的时间。

  无论我们利用的是哪种操做系统的电脑,都是能够查看时间的,而一般环境下,我们拿到的电脑城市展现中国时间,那是由于操做系统中曾经设置了一个默认时区。

  当 Timestamp 为 0,就暗示时间(GMT)1970年1月1日0时0分0秒。中国利用时间,处于东 8 区,响应就是早上 8 点。因而正在中国这边,时间犯错了,就经常会显示成 1970年1月1日 08:00。

  时区是地球上的区域利用统一个时间定义。以前,人们通过察看太阳的(时角)决按时间,这就使得分歧经度的处所的时间有所分歧(处所时)。1863年,初次利用时区的概念。时区通过设立一个区域的尺度时间部门地处理了这个问题。

  而Java中的Date类中是不包含时区消息的,正在利用System.out.println打印Date的时候,回挪用Date.toString方式,该方获取系统的默认时区来转换时间。

  时间还能够用CST暗示,即China Standard Time,别名中国尺度时间,是中国的尺度时间。当格林威治时间为凌晨0:00时,中国尺度时间正好为上午8:00。

  有了时间戳,无论我们深处哪个时区,从格林威治时间1970年01月01日00时00分00秒到现正在这一时辰的总秒数该当是一样的。所以说,时间戳是一份可以或许暗示一份数据正在一个特按时间点曾经存正在的完整的可验证的数据。

  GMT,是Greenwich Mean Time的缩写,合格林尼治(格林威治)日常平凡,是指位于英国伦敦郊区的皇家格林尼治天文台本地的平太阳时,由于本初子午线被定义为通过那里的经线。

  为了照应到各地域的利用便利,又使其他处所的人容易将当地的时间换算到此外处所时间上去。相关国际会议决定将地球概况按经线从东到西,划成一个个区域,而且相邻区域的时间相差1小时。正在统一区域内的东端和西端的人看到太阳升起的时间最多相差不外1小时。当人们跨过一个区域,就将本人的时钟校正1小时(向西减1小时,向东加1小时),跨过几个区域就加或减几小时。如许利用起来就很便利。

  前面还提到。中国位于东八区,一般是用GMT+8来暗示东八区这个时区。那么,看起来GMT就是这个所谓的尺度时间。GMT是个什么工具呢?为什么要正在他的根本上+8来暗示东八区呢?

  当有些计较机存储或者传输时间戳犯错时,这个时间戳就会取默认值。而正在计较机中,默认值凡是是 0。

  可是,通过阅读Calendar的源码,我们能够发觉,getInstance方式虽然有一个参数能够传入时区,可是并没有将默认时区设置成传入的时区。

  其实谜底前面也曾经说过了,我们通过查看Date.toString的源码,发觉正在输出的过程中该方式只会去获取系统的默认时区,只要点窜了默认时区才会显示该时区的时间。

  前面提到了,时区通过设立一个区域的尺度时间部门地处理了分歧处所看到的太阳纷歧样而无义时间的问题。那么这个尺度时间是什么呢?

  所以,我们就能够认为java.util.Java其实暗示的就是从格林威治1970年1月1日零点到现正在这一时辰的总秒数。

  从Date的源码中也能够看到,Date中是不包含时区相关的消息的,由于时间戳和时区没相关系。

  格林威治子午线日起头,格林尼治天文台担任每隔一小时向全世界发放调时消息。国际天文合会于1928年决定,将由格林威治平半夜起算的平太阳时做为世界时,也就是凡是所说的格林威治时间

  次要代码如上。也就是说若是我们想要通过System.out.println输出一个Date类的时候,输出美国时间的话,就需要想法子把deultTimeZone改为America/Los_Angeles,这个方式就是:

  还有一种体例,就是通过SimpleDateFormat来处置,这种体例我们正在为什么阿里巴巴把SimpleDateFormat定义为static类型的中也引见过。这里就不再展开了。

  不晓得大师有没有留意到一个比力特殊的时间,1970-01-01,相信每一个开辟者对这个时间都并不目生。一般若是软件系统中呈现这个时间的时候,代表着呈现了收集毛病、线上bug等。

  而正在Calendar.getInstance.getTime后获得的时间只是一个时间戳,此中未保留任何和时区相关的消息,所以,正在输出时,仍是显示的是当前系统默认时区的时间。

  所谓东八区,一般暗示成GMT+8,这里的GMT指的是格林威治时间。计较机中经常利用时间戳来暗示时间,时间戳指的就是当前时间举例格林威治的1970-01-01 00:00:00的总秒数。

  现今全球共分为24个时区。因为适用上常常1个国度,或1个省份同时跨着2个或更多时区,为了照应到行政上的便利,常将1个国度或1个省份划正在一路。所以时区并不严酷按南北曲线来划分,而是按天然前提来划分。例如,中国幅员宽广,差不多跨5个时区,但为了利用便利简单,现实上正在只用东八时区的尺度时立即间为准。

  相关链接: