java中的时区转换

chengxuxiaoyuan 2019-11-05 原文

java中的时区转换

java中的时区转换

一、时区的说明

地球表面按经线从东到西,被划成一个个区域,规定相邻区域的时间相差1小时。在同一区域内的东端和西端的人看到太阳升起的时间最多相差不过1小时。当人们跨过一个区域,就将自己的时钟校正1小时(向西减1小时,向东加1小时),跨过几个区域就加或减几小时 ,所以同一时刻在不同时区表示的时间是不一样的。

二、时间的表示

我们平时表示时间时通常是以一个格式化的字符串来表示一个时间,例如“2019-11-5 20:05”这个字符串表示的是2019年11月5日20点05分。但这里有一个隐含的前提,时区是自己当前所在的时区,即东八区的人看到这个时间认为是东八区的20:05,而东九区的人会认为是东九区的20:05,实际上这两个时间相差了一个小时。所以要正确的表示一个特定时刻,还要再加上时区信息,例如“2019-11-5 20:05 +8:00”这个字符串不管哪个时区的人看到都知道表示的是东八区的时间。

三、时间戳

时间戳表示的是一个时间间隔,从0时区来看,表示从”1970-1-1 00:00 +0:00″到现在(2019-11-5 12:05 +0:00)时刻的时间间隔,而从东八区来看表示从”1970-1-1 08:00 +8:00″到现在(2019-11-5 20:05 +8:00)的时间间隔。

间隔=现在-起点,因为现在和起点都相差了8小时,所以时间间隔是一样的,同样的道理,在任意时区中现在这一个时刻的时间戳都是一样的。

四、Date类和时间戳

java的Date类中实际保存的是某一个时刻的时间戳,所以同一时刻在任意时区获取到的Date对象都是一样的。当使用SimpleDateFormat格式化日期时,默认的会以当前的系统时区来格式化日期,所以同一时刻不同时区的人格式化日期得到的结果才会有时差。

所以以下代码,在东八区和东九区得到的输出相差了一个小时,但它们的Date对象实际上表示了同一个时刻

public class TestDate {

    public static void main(String[] args) {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date=new Date(1572960924868L);//以时间戳来给定一个特定时刻
        System.out.println(sdf.format(date));
    }
}

五、java中的时区转换

SimpleDateFormat的对象可以设置时区,这样同一个Date对象就可以通过SimpleDateFormat来进行时区转换

    @Test
    public void test2(){
        Date date=new Date(1572960924868L);
        SimpleDateFormat sdf8=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf8.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));//设置时区为东八区
        System.out.println("东八区的时间:"+sdf8.format(date));//输出格式化日期

        SimpleDateFormat sdf9=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf9.setTimeZone(TimeZone.getTimeZone("GMT+9:00"));//设置时区为东八区
        System.out.println("东九区的时间:"+sdf9.format(date));//输出格式化日期
    }

输出的结果如下图

同一个时刻1572960924868,先转为Date对象,再通过SimpleDateFormat对时区进行转换,并格式化成时间字符串输出。

所以在实际的应用中,遇到需要存储时间的问题时,可以在数据库中存储时间对应的时间戳,这样在数据库存储时就不会有时区的问题,而在应用中需要用到时间时,就把这个时间戳转为Date,再通过SimpleDateFormat转换成需要的时区的时间。

发表于
2019-11-05 22:38 程序晓猿 阅读() 评论() 编辑 收藏

 

版权声明:本文为chengxuxiaoyuan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/chengxuxiaoyuan/p/11802241.html

java中的时区转换的更多相关文章

随机推荐

  1. 好用的sitemap生成器—GY SiteMap – 莫洋洋

    好用的sitemap生成器—GY SiteMap GY SiteMap不仅是网站地图生成器还是网站优化检测器, […]...

  2. Markdown 语法手册 – 完整版(下)

    6. 引用 语法说明: 引用需要在被引用的文本前加上>符号。 代码: > 这是一个有两段文字的引用 […]...

  3. 博客园自定义js,每6个div外包div……

    因为之前的博客倒闭了,然后搬到博客园来…… 但是博客园的默认主题实在不符合我的性格…… 然后我开始了面目全非的 […]...

  4. windows10用WMware安装Linux虚拟机详细步骤 – 小甲鱼丶龟龟

    windows10用WMware安装Linux虚拟机详细步骤 windows10用WMware安装Linux虚 […]...

  5. Flask 系列之构建 Swagger UI 风格的 WebAPI

    说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码 […]...

  6. IP通信基础 3.18

    互联网中的IP地址: ⒈路由器的每一个接口都是一个网段。 ⒉路由器总是具有两个或两个以上的IP地址。   私网 […]...

  7. 调用微信接口扫描二维码

    界面文件 1 <view> 2 <view bindtap="click">点我扫一扫 […]...

  8. spring容器和springmvc容器,以及web容器的关系

      说到spring和springmvc,其实有很多人分不清他们有什么区别,认为它俩是一样的,如果你问他项目里 […]...

展开目录

目录导航