2015-11-04 71 views
0
public static void main(String[] args) throws ParseException { 
    SimpleDateFormat dt = new SimpleDateFormat("MM dd yy"); 
    dt.setLenient(false); 
    dt.setTimeZone(TimeZone.getTimeZone("Asia/Hong_Kong")); 
    Date date = dt.parse("05 14 16"); 
    System.out.println(date); 
} 

输出:Fri May 13 21:30:00 IST 2016SimpleDateFormat的解析没有履行时区

,如果我尝试使用输出它切换到一天之前,而不是正确的日期。

这个预期或与API的问题吗?

+0

我不知道,但是你可能需要打印,以及时指定的时区。 – Teepeemm

回答

3

这是预期并没有在Java中没有错误。

Date不包含时区信息。一个java.util.Date是因为01-01-1970 00:00:00 GMT无非包装更多的毫秒数。它不记得它解析的字符串包含有关时区的信息。

当您通过(隐含的)调用它toString()显示Date,例如,你在这里做:

System.out.println(date); 

它会在你的系统,这是IST在默认的时区进行打印您的案件。

如果要在特定时区打印,请使用SimpleDateFormat对象对其进行格式化,然后在SimpleDateFormat对象上设置所需的时区。例如:

DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss Z"); 
df..setTimeZone(TimeZone.getTimeZone("Asia/Hong_Kong")); 
System.out.println(df.format(date));