SimpleDateFormat没有给出正确的时间?

时间:2015-03-16 15:31:45

标签: java date datetime

http://ideone.com/T5wSRV这是以下代码的链接

SimpleDateFormat dateFormatIST = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatIST.setTimeZone(TimeZone.getTimeZone("IST"));

//Time in IST
Date date=dateFormatIST.parse( dateFormatIST.format(new Date()) );
System.out.println(date);

这不能给出正确的IST时间,因为下面的代码工作正常。为什么? http://ideone.com/9KSaZx这是下面代码的链接,它提供了所需的输出。帮助我了解行为。

SimpleDateFormat dateFormatIST = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatIST.setTimeZone(TimeZone.getTimeZone("IST"));

//Local time zone   
SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");

//Time in IST
Date date=dateFormatLocal.parse( dateFormatIST.format(new Date()) );
System.out.println(date);

1 个答案:

答案 0 :(得分:3)

行为是合乎逻辑的。关键是时区的没有信息是Date对象。 Date对象包含通用时间。 当您format然后parse格式化字符串时,您仍然拥有相同的日期:

我用结果评论了代码:

    SimpleDateFormat dateFormatIST = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
    dateFormatIST.setTimeZone(TimeZone.getTimeZone("IST"));

    //Local time zone   
    SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");

    //Time in IST
    Date d = new Date();
    System.out.println(d);
    // Mon Mar 16 16:57:19 CET 2015   

=>现在在我的TZ(CET)

    System.out.println(dateFormatIST.format(d));
    // 2015-Mar-16 21:27:19   

=>现在在IST TZ

    System.out.println(dateFormatLocal.format(d));
    // 2015-Mar-16 16:57:19   

=>现在在我的TZ(CET)

    Date dateIST = dateFormatIST.parse(dateFormatIST.format(d));
    System.out.println(dateIST);
    // Mon Mar 16 16:57:19 CET 2015 

=> dateIST对象仍包含" now",格式为默认本地,即CET

    Date dateLoc = dateFormatLocal.parse(dateFormatLocal.format(d));
    System.out.println(dateLoc);
    // Mon Mar 16 16:57:19 CET 2015 

=>与上述相同

    Date dateLocIST = dateFormatLocal.parse(dateFormatIST.format(d));
    System.out.println(dateLocIST);
    // Mon Mar 16 21:27:19 CET 2015   

=> dateFormatIST.format(d)提供"2015-Mar-16 21:27:19"dateFormatLocal.parse()会将其解释为本地(CET for me)日期。结果是"Mon Mar 16 21:27:19 CET 2015"

如果您需要在不同的时区之间翻译日期,您当然需要参加Calendar课程。