0、引言

Druid中时区的问题一直困扰着我们,所以我专门去研究了一下世界时区和Java中的时区,对使用Druid很用帮助.

1、UTC时间&GMT时间

UTC时间是时间标准时间(Universal Time Coordinated),UTC是根据原子钟来计算时间,误差非常小。

UTC也是指零时区的时间,如果要表示其他时区的时间,这里要注意没有UTC+0800或者UTC+8这样的表示方式(至少Java里面没有,一般用于口头表示),只有Asia/Shanghai这样的表示方式,详细的时区列表参考这个文档时区列表,不要问我为什么没有北京时区。。。

GMT时间是根据地球的自转和公转来计算时间,老的时间计量标准,这里我们不过多讨论

2、表达时间方式

我们一般表示时间都会带格式以方便理解,例如时间表达式是‘2018-09-12 08:00:00‘,因为我们在东八区,所以默认是:北京时间2018年9月12号8点整。但是如果是一个美国人看到这个时间,就会认为是美国东部or西部时间的2018年9月12号8点整。所以从这种表达方式很不准确,因为没有指明到底是哪个时区的时间!!!!

所以准确的表达时间必须带有时区,例如2018-09-12 08:00:00+0800,表达了Asia/Shanghai这个时区的时间2018年9月12号8点整。这里要注意+0800并不是表示加8小时的意思,只是表示这个时间‘2018-09-12 08:00:00‘是东八区Asia/Shanghai的时间,仅此而已。

3、UTC时间的时间戳

讲清楚了时间表达方式,再讲时间戳。其实时间戳是没有时区概念的,或者说时间戳只能是0时区的。时间戳是从1970-01-11 00:00:00+0000开始的(原因大家都知道),也就是在‘1970-01-11 00:00:00+0000‘这个时间点,时间戳是0。再换句话说在‘1970-01-11 08:00:00+0800‘时间戳也是0。这也是Java里时间组件的默认方式,不管用户输入的人类可识别的时间是什么格式,在内部统一存的是时间戳。

例如时间是‘2018-09-01 08:00:00+0800‘,那么使用date.getTime()获取到时间戳是1535760000000;时间是‘2018-09-01 00:00:00+0000‘,获取到时间戳也是1535760000000。

测试代码如下:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");

System.out.println(sdf.parse("2018-09-01 08:00:00+0800").getTime());

System.out.println(sdf.parse("2018-09-01 00:00:00+0000").getTime());

可以观察到这2行代码的输出都是1535760000000,这就证明了上面的观点。再啰嗦2点:

第一行代码DateFormat中Z表示时区,所以String类型格式时间带上+0800这种表达式,就能正确获取时间戳了。

SimpleDateFormat是线程不安全的,不要用

4、时区设置

为什么我们写以下代码的时候,程序能正确知道我们的时区呢?

SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println(sdf2.parse("2018-09-01 08:00:00").getTime());

因为我们在mac上设置了时区

在Java中也可以设置时区

1)启动设置

java -Duser.timezone=Asia/Shanghai -jar xxx.jar

代码中设置

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println(sdf.parse("2018-09-01 08:00:00").getTime());

单次处理生效,建议使用joda的时间包

joda-time

joda-time

2.9.9

DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").withChronology(ISOChronology.getInstance(DateTimeZone.forID("Asia/Shanghai")));

System.out.println(dateTimeFormatter.parseDateTime("2018-09-01 08:00:00").getMillis());

java joda 获取utc时间_Java获取时间与系统时间相差8小时终极解决方案相关推荐

  1. java 8小时_Java获取时间与系统时间相差8小时终极解决方案

    0.引言 Druid中时区的问题一直困扰着我们,所以我专门去研究了一下世界时区和Java中的时区,对使用Druid很用帮助. 1.UTC时间&GMT时间 UTC时间是时间标准时间(Univer ...

  2. java 获取系统时间 8小时 jre_Java获取时间与系统时间相差8小时终极解决方案

    0.引言 Druid中时区的问题一直困扰着我们,所以我专门去研究了一下世界时区和Java中的时区,对使用Druid很用帮助. 1.UTC时间&GMT时间 UTC时间是时间标准时间(Univer ...

  3. 电脑走时比北京时间快之如何设置系统时间

    问题描述: 设置公司设备电脑工控机的时间与北京时间一样,过了一段时间后就比北京时间快了,一个钟头左右,快了15分钟左右 脑子开始高速运转其起来: 于是乎就开始怀疑问题的原因所在,CMOS的时间有问题? ...

  4. linux ntp时间立即同步命令_Linux系统时间同步方法小结

    在Windwos中,系统时间的设置很简单,界面操作,通俗易懂,而且设置后,重启,关机都没关系.系统时间会自动保存在BIOS时钟里面,启动计算机的时候,系统会自动在BIOS里面取硬件时间,以保证时间的不 ...

  5. java 当前utc时间_Java获取UTC时间的方法详解

    本文实例讲述了java获取utc时间的方法.分享给大家供大家参考,具体如下: 取得本地时间: java.util.calendar cal = java.util.calendar.getinstan ...

  6. 如何使用Java中的UTC或GMT获取当前日期和时间?

    当我创建一个新的Date对象时,它被初始化为当前时间,但是在本地时区. 如何获取格林尼治标准时间的当前日期和时间? #1楼 您可以直接使用 SimpleDateFormat dateFormatGmt ...

  7. java 一周前日期_java获取当前时间前一周、前一月、前一年的时间

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar c = Calend ...

  8. java 1个月前_java获取一个月前的时间

    java获取一个月前的时间 方法一: SimpleDateFormat formatter = new SimpleDateFormat( "yyyyMMdd" ); Date c ...

  9. java从数据库中获取当前时间_JAVA获取当前系统时间(包含时分秒)插入数据库...

    网上找到好多方法,但是貌似都是不准确,当我看到这个我内牛满面 Timestamp d= new Timestamp(System.currentTimeMillis()); //获取系统时间直接转换成 ...

最新文章

  1. 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题
  2. 估计点云中的曲面法线
  3. TCP/IP协议概述
  4. 梦工厂实验室 取石子之fans 博弈
  5. leetcode算法题--第一个只出现一次的字符
  6. c++经典书籍--深度探索C++对象模型
  7. AndroidApplication Fundamentals(Android应用基础)
  8. leetcode 106. 从中序与后序遍历序列构造二叉树 c语言递归解法
  9. 数据湖架构,为什么需要“湖加速”?
  10. u3d:动态的用代码调节材质球的属性
  11. python人脸照片分类_Python OpenCV 人脸识别(一)
  12. CCF 201412-1 门禁系统
  13. css单位介绍em ex ch rem vw vh vm cm mm in pt pc px
  14. 乐佰小迪智能机器人怎么使用_425台云洲智能水面救生机器人在山东寿光投入使用...
  15. android.os.networkonmainthredexception,android.os.NetworkOnMainThreadException 解决办法:
  16. [主席树]HDOJ4417 Super Mario
  17. java 斑马 打印 图片_Zebra打印机不会打印ZPL格式
  18. 计算机数字音频工作站 pdf,分享一款开源和免费的数字音频工作站
  19. 用html制作四行四列的表格,HTML表格元素
  20. 【华人学者风采】聂建云 蒙特利尔大学

热门文章

  1. Github连接不上怎么办?
  2. 仿淘宝、京东多重商品属性组合Sku标签
  3. android studio连接雷电模拟器
  4. 你的死工资,正在拖垮你一辈子需要花多少钱
  5. iphone好的网站总结
  6. 创建多媒体APP 之 音频播放:管理音频焦点
  7. 什么东西可以帮助睡眠,对睡眠好的东西分享
  8. git 同时连接云效平台和github
  9. 基于消息系统架构设计
  10. 利用python爬取贝壳网租房信息