猿问

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

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
            + "***********************************************");
}

}


扬帆大鱼
浏览 457回答 4
4回答

互换的青春

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

陪伴而非守候

把第31行的代码format.setTimeZone(zone);提到30行就一样了,时区放到上面。这个跟静态其实关系不大,而是你在格式化之前要把SimpleDateFormat 的时区设定好。而不是格式化之后在设定时区

哆啦的时光机

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

慕仙森

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

相关分类

Java
我要回答