码迷,mamicode.com
首页 > 编程语言 > 详细

Java SimpleDateFormat时间解析时区问题

时间:2018-05-31 12:23:56      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:两台   mat   set   同步   java   imp   .com   事件   ntp   

spark JOB在hive入库的时候发生了很诡异的现象,根据report_time时间转换为小时分区的时候,时间对不上,而且只是部分时间对不上,相差12个小时。

技术分享图片

由于其他集群未出现此问题,想通过代码发现是否逻辑存在问题。看了代码之后发现逻辑也十分简单:

技术分享图片

 

获取了report_time之后直接通过一个时间转换函数,获取了时间。继续查看事件转化函数:

技术分享图片

这里用到了java 中SimpleDateFormat 对给定的时间进行了转换,这种转换java中比较常见,应该也是没问题的。

怀疑跟集群的时间配置有关,查看集群的两台机器的时间配置:

主机节点时间配置:(NTP时间同步未打开)

技术分享图片

另一个节点的时间配置信息就很不一致了,发现配置的是纽约时区:

技术分享图片

 

怀疑是正常的代码,在不正常的时间配置中执行出现了问题,写了一个测试代码:

技术分享图片

时区正常的机器上运行,结果正常:

技术分享图片

另一时区设置不正常的节点运行,问题重现了:

技术分享图片

到此,应该是确定了SimpleDateFormat跟系统时区有关了。

查询了相关资料,可以通过对SimpleDateFormat对象调用setTimeZone(TimeZone.getTimeZone("CST")方法指定时区,解决相关问题。但是更重要的是保证集群节点时间的一致性。

Java SimpleDateFormat时间解析时区问题

标签:两台   mat   set   同步   java   imp   .com   事件   ntp   

原文地址:https://www.cnblogs.com/lihao7/p/9115936.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!