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转换成需要的时区的时间。
java中的时区转换的更多相关文章
- java中汉字自动转换成拼音
java中汉字自动转换成拼音 1.需要下载jar包 pinyin4j.2.5.0.jar ,加入到WEB-INF下的lib里边,右键add to bulid path. 2.[代码]PinYinUti ...
- java中调用kettle转换文件
java中调用kettle转换文件 通过命令行也能够调用,然后java中调用命令行代码也能够.这样没有和java代码逻辑无缝集成.本文说明kettle5.1中假设通过其它API和java代码无缝集成: ...
- Java中Date时区的转换
1.Date中保存的是什么? 在java中,只要我们执行 Date date = new Date(); 就可以得到当前时间.如: Date date = new Date(); System.ou ...
- 填坑:Java 中的日期转换
我们之前讨论过时间,在Java 中有一些方法会出现横线?比如Date 过期方法. 参考文章:知识点:java一些方法会有横线?以Date 过期方法为例 Java中的日期和时间处理方法 Date类(官方 ...
- Java中数据类型默认转换和强制类型转换
默认转换: a:由低到高一次为:(byte short char )---int ---long ---float --- double b:注意:byte short char ...
- JAVA中时间格式转换
1.将任意日期格式的字符串转换为指定格式的字符串 //默认格式 String s1 = "20190110133236"; //给定格式 String s2 = "201 ...
- java中字符串编码转换
Java 正确的做字符串编码转换 字符串的内部表示? 字符串在java中统一用unicode表示( 即utf-16 LE) , 对于 String s = "你好哦!"; 如果源码 ...
- Python3中datetime时区转换介绍与踩坑
最近的项目需要根据用户所属时区制定一些特定策略,学习.应用了若干python3的时区转换相关知识,这里整理一部分记录下来. 下面涉及的几个概念及知识点: GMT时间:Greenwich Mean Ti ...
- java中数据类型的转换
数据类型的转换,分为自动转换和强制转换. 自动转换是程序执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换 强制转换必须在代码中声明,转换顺序不受限制 自动数据类 ...
随机推荐
- thymeleaf 将后端绑定数据直接传递js变量
根据自我需求,thymeleaf可以直接将后端数据传递给js中进行使用,例如: 1.后端接口数据: @Controllerpublic class TestController { @RequestM ...
- Creating a Store Locator with PHP, MySQL & Google Maps(保存地图坐标 经纬度方法 google mysql)
Google Geo APIs Team August 2009 This tutorial is intended for developers who are familiar with PHP/ ...
- python 写入txt的新方法
最新发现有新方法可以对txt等进行操作,比较有意思,之前没见过,故记录下 传统方法 with open(ur'D:\Desktop\a123.txt', 'a') as f: #以写的方式打开 f.w ...
- spring-boot-devtools 热部署
一.简单介绍 spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是修改代码后自动启动springboot服务,速度比手动停止后再启动要快,节省出来的并不是手工操作 ...
- MongoDB 学习笔记之 replica set搭建
Replica set搭建: 修改mongodb.conf文件,指明replSet 登入客户端,指定副本集成员,进行初始化, 如果priority需要调整,使用reconfig()方法.Seconda ...
- 阿里云DLA工具 查询tablestore数据
OTS和DLA元信息映射逻辑 字段的映射关系 OTS DLA INTEGER(8bytes) bigint(8bytes) STRING varchar BINARY varbinary DOUBLE ...
- raspbian修改swap分区为硬盘上的分区
一直以为raspbian的swap分区和平常装系统时候的swap分区是一样的,最近用u盘插在树莓派上运行后发现这个交换分区和我想象中不一样. 百度后发现它是一个文件挂上去的.直接搞把! pi@rasp ...
- 网络游戏开发-客户端1(开始Hello world)
打开Egret Launcher ,新建一个EUI项目,起名为 EQiPai 这里需要勾选的是socket网络库,game游戏库.如果要面向海外用户的话,建议勾上Facebook的小游戏sdk. 然后 ...
- markdown公式转为知乎格式
在知乎中写技术类文章,经常会用到markdown知乎文章可以导入markdown格式,但是不支持Latex公式.知乎大神提供了替代方案: https://zhuanlan.zhihu.com/ ...
- 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(1)
.NET Core 3.0已经发布了,除了一大堆令人激动的功能以外,也增加了对WPF的正式支持, 那么WPF在.NET Core 3.0下的开发体验如何呢? 本文利用了Stylet框架开发.NET C ...