美文网首页JDK学习笔记
被(把) JAVA 时区 安排的明明白白

被(把) JAVA 时区 安排的明明白白

作者: 吉不赛 | 来源:发表于2018-06-28 14:36 被阅读26次

        JAVA 8 中重新安排了对时间的处理,但是项目中还是有很多地方用到老的API,今天用了项目中一个工具类,结果又被时区坑了一把。主要原因还是对API不熟悉导致的,现在将问题记录如下。

        问题是这样的, 我要把一个String 转成Date类型,这个时候就要用到SimpleDateFormat 这个类了,为了项目的可维护性,我找了之前工具类里定义的一个SimpleDateFormat类,而且还是ThreadLocal,感觉很科学。但是当我查看Parse出来的Date的值时,却发现时间被加了8小时。嗯.....,又是时区问题。昨天刚花时间研究了一番JAVA 8时间API的我感觉又被安排了。

        百思不得其解,我就搜索了一把SimpleDateFormat 和 时区, 在一个网页我看到了这样一段代码

SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd");

f1.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));    

        WTF! (阿弥陀佛)SimpleDateFormat还能设置时区!后来想想其实这是很正常的,因为Date本来是一个带有时区的时间,那么从String变成Date的过程肯定有一个指定时区的过程,如果不指定,肯定有一个默认值。

        那么这样一来的话,肯定有一个地方设置了SimpleDateFormat的时区,由于它又是ThreadLocal,所以会影响到所有地方。我到那个工具类里搜索了一把,果然在一个不起眼的地方设置了0时区(错误的编程示范)。

        到这里虽然知道这个时间为什么被改掉了,但是还是有奇怪的地方。SimpleDateFormat转出来的时间虽然变成了0时区,但是为啥输出的时间就会加8小时呢。这是因为Date的toString方法会默认将时间转成当前时区(有副作用的方法)。

        还是应该用JAVA 8 的时间啊!有时区没时区明明白白。

相关文章

  • 被(把) JAVA 时区 安排的明明白白

    JAVA 8 中重新安排了对时间的处理,但是项目中还是有很多地方用到老的API,今天用了项目中一个工具类,结果又被...

  • 疫情背后的礼物

    这次疫情, 把买菜做饭给我安排得明明白白的, 把唱歌跳舞给我安排得明明白白的, 把电影新闻给我安排得明明白白的, ...

  • 我的时间 被手机安排得 明明白白

  • 被安排的明明白白

  • 被安排的明明白白

    春节期间,总是免不了要走亲戚。平时不太联系的亲朋好友现在都要一一走访,一个悲伤的事实是:因为人情,我们被安排的明明...

  • 时区

    Java java程序会取系统默认时区作为Date运算的时区。如果不想跟着系统时区走,可以 前端传过来的字符串如果...

  • 把文章里的每一个字都安排得明明白白的

    把文章里的每一个字都安排得明明白白的 有人说,治理国家,最高境界,就是把国民安排得明明白白的,以使老有所养,幼有所...

  • 冰可乐

    工资还没发下来,已经被安排得明明白白。十分的伤心。。。一直到明年年底的工资都被安排得明明白白,无比的伤心。。。 成...

  • 把钱安排的明明白白

    Part.1 没有一个十全十美的资产配置方案可适用于所有人。 所以理财师在给客户制定理财规划之前,必须收集客户信息...

  • jar包启动时,为jvm设置时区

    把项目布到环境上,jvm时区不正确,导致日志和项目的时间都不是我们自己的默认时区 java -jar -Duser...

网友评论

    本文标题:被(把) JAVA 时区 安排的明明白白

    本文链接:https://www.haomeiwen.com/subject/utlgyftx.html