我有一個SimpleDateFormat的解析器,以這種方式解析:時區轉換與SimpleDateFormat的Java中
sdf = new java.text.SimpleDateFormat("yyyy-MM-DD HH:mm:ss z").parse("2013-10-25 17:35:14 EDT");
log.debug(sdf);
這給我週六1月26日3時05分14秒北京時間2013
我失去了什麼這裏?
我有一個SimpleDateFormat的解析器,以這種方式解析:時區轉換與SimpleDateFormat的Java中
sdf = new java.text.SimpleDateFormat("yyyy-MM-DD HH:mm:ss z").parse("2013-10-25 17:35:14 EDT");
log.debug(sdf);
這給我週六1月26日3時05分14秒北京時間2013
我失去了什麼這裏?
你應該使用格式
SimpleDateFormat sdf1 = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:SS z");
String sdf = sdf1.format(sdf1.parse("2013-10-25 17:35:14 EDT"));
首先,DD代表每年,您應該使用dd代替。
此外,如果您要以特定格式打印日期,則需要使用兩個SimpleDateFormat
s。
SimpleDateFormat.parse
返回一個Date
對象表示您在給定格式中指定的日期。
Date
對象本身被保存爲常規Date
,沒有附加格式。
如果要以特定格式打印,則需要使用另一個SimpleDateFormat
並調用format
方法。
簡單明瞭。 – Dhinakar
有兩件事情。
sdf
是Date
的一個對象,它表示特定時刻(從另一個時刻開始經過的毫秒,稱爲「時元」)。沒有這個對象已知的格式。以及如何輸出對象僅通過其類toString
方法,打印日期這種格式處理:
dow mon dd hh:mm:ss zzz yyyy
這正是你在你的輸出中看到。請注意,在這種情況下打印運行程序的機器的時區。如果您希望以您選擇的格式打印此對象,則應使用DateFormat
。要獲得特定時區的輸出,您必須將其明確告訴DateFormat
對象(請參見下文)。
另一件事是你應該使用dd
而不是DD
在模式中。 D
是一年中的日期,而d
是一個月中的一天,我相信這是你想要的。現在牢記這兩個點,這是解決你的問題之一:
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("EDT")); // Time Zone for output
Date d = sdf.parse("2013-10-25 17:35:14 EDT");
System.out.println(sdf.format(d)); // You need format method
,輸出:
2013-10-25 17:35:14 EDT
什麼是回答沒有得到這裏更多的問題的人:
2013-10-25 17:35:14 EDT != Sat Jan 26 03:05:14 IST 2013
我認爲這是因爲'EDT'是時區,因此,當美國東部時間17:35是英國3:05時,忽略夏令時調整。
爲什麼javascript標籤? – MarsOne
它給你的電腦留下時間。我想我不明白這個問題。你期望的結果是什麼? – luanjot
我很確定它是那裏的DD,請參閱[SimpleDateFormat](http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)。它應該是'dd'。 –