为了账号安全,请及时绑定邮箱和手机立即绑定

为什么main方法和自定义方法的代码一模一样,但是输出结果不同呢

为什么main方法和自定义方法的代码一模一样,但是输出结果不同呢

扬帆大鱼 2019-04-26 11:19:48
package com.sunsheen.dataimport;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.TimeZone;public class Demo {private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");private static TimeZone zone = TimeZone.getTimeZone("Asia/Beijing");public static void test() {     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");     Date date = null;     try {         date = sdf.parse(utcToTimeZoneDate("2014-07-31 01:00:00"));     } catch (ParseException e1) {         // TODO Auto-generated catch block         e1.printStackTrace();     }     System.out.println(date             + "------------------------------------------------"); } public static String utcToTimeZoneDate(String date) {     Date timeStart;     String beijing = null;     try {         timeStart = format.parse(date);         format.setTimeZone(zone);         beijing = format.format(timeStart);     } catch (ParseException e) {         // TODO Auto-generated catch block         e.printStackTrace();     }     return beijing; } public static void main(String[] args) throws ParseException {     test();     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");     Date date = null;     try {         date = sdf.parse(utcToTimeZoneDate("2014-07-31 01:00:00"));     } catch (ParseException e1) {         // TODO Auto-generated catch block         e1.printStackTrace();     }     System.out.println(date             + "***********************************************"); }}
查看完整描述

4 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

这是一个常识,即SimpleDateFormat 并不是线程安全的,尽管其看起来很像是线程安全的。 有人讨论过设计的“坏味道”,提到过SimpleDateFormat的设计。实际上时区是作为对象的属性共享的,导致其线程不安全的问题,可以参考其Javadoc的说明。


查看完整回答
反对 回复 2019-05-06
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

把第31行的代码
format.setTimeZone(zone);

提到30行就一样了,时区放到上面。

这个跟静态其实关系不大,而是你在格式化之前要把SimpleDateFormat 的时区设定好。而不是格式化之后在设定时区


查看完整回答
反对 回复 2019-05-06
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

应该是时区影响的,具体原因也不是特别清楚,正在查询资料,看是否能找到答案


查看完整回答
反对 回复 2019-05-06
?
慕仙森

TA贡献1827条经验 获得超8个赞

我已经知道是何原因了,我SimpleDateFormat 是静态的,然后第一次调用的时候把时区设置成北京后,后面的就全是北京时区了。在utcToTimeZoneDate 返回前把时区设置成默认的就没问题了

查看完整回答
反对 回复 2019-05-06
  • 4 回答
  • 0 关注
  • 456 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号