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. 『计算机组成原理』 计算机系统概述(考研、面试必备)

    本文目录 一、考研大纲 1. 计算机发展的历程 2.计算机的层次结构 计算机系统的基本组成 计算机硬件的基本组 […]...

  2. 同步、异步、阻塞、非阻塞的理解

    同步:就是按顺序一件一件的去做事情,前面的事情没完成之前,后面的事情必须等着,浪费了时间和生命,但也必须等着。 […]...

  3. 入职工资银行流水单怎么打?开银行流水最简单的四种方法

            很多人在入职的时候会发现新公司会要求自己提供有关的工资银行流水证明,很多人不知道工资银行流水单 […]...

  4. shell编程基础进阶

        为什么学习shell编程 shell脚本语言是实现linux/unix 系统管理机自动化运维所必备的重 […]...

  5. 春眠不觉晓,排序算法知多少?(图解十大排序算法)

    作者: C you again,从事软件开发 努力在IT搬砖路上的技术小白公众号: 【C you again】 […]...

  6. 深入浅出的webpack构建工具—DllPlugin DllReferencePlugin提高构建速度(七)

    深入浅出的webpack构建工具—DllPlugin DllReferencePlugin提高构建 […]...

  7. Shell变量

    Sehll 变量 定义shell变量 定义变量时,变量名不加美元符号 your_name=”AAA […]...

  8. ASP.NET MVC应用程序实现下载功能

    上次Insus.NET有在MVC应用程序实现了上传文件的功能《MVC应用程序显示上传的图片》 http://w […]...

展开目录

目录导航