2013-10-30 141 views
0

我有一個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

我失去了什麼這裏?

+1

爲什麼javascript標籤? – MarsOne

+1

它給你的電腦留下時間。我想我不明白這個問題。你期望的結果是什麼? – luanjot

+1

我很確定它是那裏的DD,請參閱[SimpleDateFormat](http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)。它應該是'dd'。 –

回答

1

你應該使用格式

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")); 
2

首先,DD代表每年,您應該使用dd代替。

此外,如果您要以特定格式打印日期,則需要使用兩個SimpleDateFormat s。

SimpleDateFormat.parse返回一個Date對象表示您在給定格式中指定的日期。

Date對象本身被保存爲常規Date,沒有附加格式

如果要以特定格式打印,則需要使用另一個SimpleDateFormat並調用format方法。

+0

簡單明瞭。 – Dhinakar

1

有兩件事情。

sdfDate的一個對象,它表示特定時刻(從另一個時刻開始經過的毫秒,稱爲「時元」)。沒有這個對象已知的格式。以及如何輸出對象僅通過其類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 
1

什麼是回答沒有得到這裏更多的問題的人:

2013-10-25 17:35:14 EDT != Sat Jan 26 03:05:14 IST 2013 

我認爲這是因爲'EDT'是時區,因此,當美國東部時間17:35是英國3:05時,忽略夏令時調整。