前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java时区讲解

java时区讲解

作者头像
逝兮诚
发布2019-10-30 18:43:02
2.6K0
发布2019-10-30 18:43:02
举报
文章被收录于专栏:代码人生代码人生

资源

代码地址: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中处理时区的类。

获得本地时区
代码语言:javascript
复制
Calendar cal = Calendar.getInstance();
TimeZone timeZone = cal.getTimeZone();
System.out.println(timeZone.getID());
代码语言:javascript
复制
TimeZone timeZone1 = TimeZone.getDefault();
System.out.println(timeZone1.getID());
代码语言:javascript
复制
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,毕竟新中国以北京时间为标准时间,以示对中国的尊重。毕竟中国是个大国。

设置指定时区
代码语言:javascript
复制
TimeZone timeZone = TimeZone.getTimeZone("GMT+2");
System.out.println(timeZone.getID());
代码语言:javascript
复制
TimeZone timeZone1 = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone1.getID());

打印

GMT+02:00

Asia/Shanghai

给时间设置时区
代码语言:javascript
复制
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));
代码语言:javascript
复制
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+2"));
System.out.println(simpleDateFormat.format(new Date()));
代码语言:javascript
复制
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

获得时区偏移量
代码语言:javascript
复制
Calendar cal = Calendar.getInstance();
long offset = cal.get(Calendar.ZONE_OFFSET);
System.out.println(offset/60/60/1000);
代码语言:javascript
复制
TimeZone timeZone = TimeZone.getDefault();
long offset1 = timeZone.getOffset(Calendar.ZONE_OFFSET);
System.out.println(offset1/60/60/1000);

打印

8

8

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 资源
  • 时区简介
    • 什么是时区
    • 时区分类
    • 时区的表达
      • GMT
        • UTC
        • Java中的时区处理
          • JAVA关于时间的存储
            • 时区之间的转化处理
              • Java中的时区类:TimeZone
                • 获得本地时区
                • 设置指定时区
                • 给时间设置时区
                • 获得时区偏移量
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档