java时区讲解

来源:互联网 发布:禅道 linux 一键安装 编辑:程序博客网 时间:2024/06/08 18:51

资源

代码地址:https://code.csdn.net/luo4105/javautilclass/tree/master下的TimeZoneTest.java文件。

时区简介

什么是时区

时区是人为划定的,以本初子午线中心(英国格林尼治天文台),将地球划为24个时区。时区向东加一区,时间调快一小时,时区向西加一区,时间调慢一小时。如北京为东八区,日本为东九区,北京时间比日本晚一小时。

时区分类

时区有0时区、东1-12区,西1-12区共24区,(这明明是25个区,莫非当年划分时区的英国人数学太差算错了?)。当然不是,实际上,东12区和西12区划为一个区,称东西12区,东12区占其中一半,西12区占其中一半,从东12区进入西12区,时间调慢1天。

时区的表达

GMT

GMT是即格林尼治平太阳时间,实际就是零时区的时间。用”GMT+偏移量”来表示时区。如“GMT+1”代表东一区,时间就是零时区时间加1小时;”GMT-1”就是西1区,时间就是零时区时间减1小时;我国位于东八区,就是”GMT+8”。

UTC

UTC是标准时间,也就是零时区的时间。

Java中的时区处理

JAVA关于时间的存储

Java存的是从1997/1/1 00:00:00到现在时间的毫秒数,按的是标准时间存储。如setDate(0)就是1997/1/1 00:00:00。但是获取时会加上时间的偏移量,我们是东八区,所以setDate(0)的显示是1997/1/1 08:00:00。

时区之间的转化处理

由于java中存的是标准时区的时间,只是获取时转成本地时区,所以我们只要对时间设置时区,就能获得对应时区的时间。

Java中的时区类:TimeZone

TimeZone是Java中处理时区的类。

获得本地时区

Calendar cal = Calendar.getInstance();TimeZone timeZone = cal.getTimeZone();System.out.println(timeZone.getID());
TimeZone timeZone1 = TimeZone.getDefault();System.out.println(timeZone1.getID());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");TimeZone timeZone2 = simpleDateFormat.getTimeZone();System.out.println(timeZone2.getID());

打印

Asia/Shanghai

Asia/Shanghai

Asia/Shanghai

注意java和php时区中没有asia/beijing,只有asia/shanghai和asia/chongqing,这是民国时期划分的时区。曾经有程序员向sun提出这个问题,但sun不予采纳,认为不是bug。对此我认为应该添加asia/beijing,毕竟新中国以北京时间为标准时间,以示对中国的尊重。毕竟中国是个大国。

设置指定时区

TimeZone timeZone = TimeZone.getTimeZone("GMT+2");System.out.println(timeZone.getID());
TimeZone timeZone1 = TimeZone.getTimeZone("Asia/Shanghai");System.out.println(timeZone1.getID());

打印

GMT+02:00

Asia/Shanghai

给时间设置时区

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"));cal.setTime(new Date());System.out.println((cal.get(Calendar.MONTH) + 1) + "-" + cal.get(Calendar.DATE) + " " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE));
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+2"));System.out.println(simpleDateFormat.format(new Date()));
System.out.println(DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("GMT+2")))

打印

8-29 5:36

2017-08-29 05:36:35

2017-08-29 05:36:35

 

获得时区偏移量

Calendar cal = Calendar.getInstance();long offset = cal.get(Calendar.ZONE_OFFSET);System.out.println(offset/60/60/1000);
TimeZone timeZone = TimeZone.getDefault();long offset1 = timeZone.getOffset(Calendar.ZONE_OFFSET);System.out.println(offset1/60/60/1000);

打印

8

8

原创粉丝点击