java 获取系统时间 8小时 jre_Java获取时间与系统时间相差8小时终极解决方案
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 获取系统时间 8小时 jre_Java获取时间与系统时间相差8小时终极解决方案相关推荐
- java joda 获取utc时间_Java获取时间与系统时间相差8小时终极解决方案
0.引言 Druid中时区的问题一直困扰着我们,所以我专门去研究了一下世界时区和Java中的时区,对使用Druid很用帮助. 1.UTC时间&GMT时间 UTC时间是时间标准时间(Univer ...
- java 8小时_Java获取时间与系统时间相差8小时终极解决方案
0.引言 Druid中时区的问题一直困扰着我们,所以我专门去研究了一下世界时区和Java中的时区,对使用Druid很用帮助. 1.UTC时间&GMT时间 UTC时间是时间标准时间(Univer ...
- java 半小时_java获取当前时间加半小时之后的时间
java获取当前时间加半小时之后的时间: 1.获取当前时间,获取到的时间类型是long类型的,单位是毫秒 long currentTime = System.currentTimeMillis() ; ...
- java获取时间相差8小时的问题及解决方式
三种时间差错问题: java下使用new date()获取的时间会和真实的本地时间相差8小时. 本地获取的时间没有错,存入数据库的时候时间相差8小时. 数据库时间没有错,获取到了后端,之后返回给前端相 ...
- java 当前时间戳_通过各种方法 获取当前系统时间、时间戳
php中,如何通过各种方法 获取当前系统时间.时间戳,并备注各种格式的含义,可灵活变通. 1.获取当前时间方法date() 很简单,这就是获取时间的方法,格式为:date($format, $time ...
- java怎么将时间格式化输出_Java获取时间日期并格式化输出
Java获取当前系统时间.自定义时间和日期格式化输出部分应用总结 1.java获取当前时间,并格式化输出,如2018-12-01 11:20:11 // 获取当前时间,并格式化输出,如2018-12- ...
- java获取mysql时间格式化_Java与mysql的时间格式化问题,获取时间的上下午
Java与mysql的时间格式化问题,获取时间的上下午java 在项目中常常会遇到对时间进行格式化的问题,一次在对应用中发现,使用Java的SimpleDateFormat格式化时间,获取到的是上午, ...
- oracle中怎么获取系统时间,Oracle中如何获取系统当前时间
Oracle中如何获取系统当前时间 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; ORACLE里获取一个时间的年.季.月.周.日 ...
- 解决.net6 Docker容器 DateTime.Now 获取时间相差8小时问题
2022.09.30 补充说明 在容器构建阶段指定时区是更靠谱且更有效的处理方式,如果方便删除原有容器重新构建新的容器,在构建命令中写入以下配置语句: -e TZ=Asia/Shanghai 若不方便 ...
最新文章
- 双绞线是计算机网络的一种通信线路吗,计算机网络环境的信道传输技术分析
- aka名字_她叫李清照,没有AKA,这是她的专访//关于“天赋”二字,她说……
- 在内存只有 24KB 的电脑上写操作系统,是怎样的体验?
- k2677场效应管参数引脚_场效应管参数大全2.doc
- python_day21面向对象的进阶(反射,内置方法,)
- java基础提升篇:深入浅出Java多线程
- mysql操作语句now_【MySQL数据库开发之二】MySQL 基础语句的书写与操作!
- 无招胜有招之Java进阶JVM(六)JVM 参数及调优
- 发那科攻丝回退参数_乐享:发那科MF选配功能诊断小结
- SendMessage
- Android 8.0 学习(3)---Android Treble
- 对开源库 limdu 命令注入漏洞 (CVE-2020-4066) 的简要分析
- 数论-某寒假训练赛 Round1 (Feb, 2018)
- Mysql之查询基础select
- 图像直方图均衡 matlab,图像直方图均衡化
- uiuc大学计算机排名2019,2019年QS世界大学排名伊利诺伊大学香槟分校排名第71
- PTA 7-114 用if-else语句编程百分制成绩转换为五分制成绩
- 步骤分解:教你五步实现css转盘抽奖小游戏
- 游戏贴图打包工具——TexturePacker详解
- 如何通过OPENROWSET函数向SQL Server导入带工作组(mdw)保护的Access数据库数据(转)...
热门文章
- 【渝粤教育】电大中专测量学 (5)作业 题库
- bloomfilter的java实现,BloomFilter(布隆过滤器)原理及实战详解
- 计算机模拟技术在教学上的应用,计算机模拟技术在水利工程学科试验教学中的应用...
- 解神者php奥义高阶,《解神者》角色月曦九攻略技能解析和兽主推荐
- QPSK信号调制之ASCII码
- 建立时间、保持时间与亚稳态
- matlab评估边缘检测性能,【模糊推理】模糊逻辑图像边缘检测,原理+matlab代码~...
- 系统间账号认证系统同步方案
- 20190608笔试题のCSS-属性继承
- 如何为你的博客园添加到百度统计