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);
答案 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
课程。