@Jon Skeet,我按照你的建議在Date parsing/formatting with TimeZone and SimpleDateFormat give different results around DST switch下載了Joda-Time,並將它添加到我的Java EE/JSF項目中,試圖使用DateTime和DateTimeFormatter ,並且他們返回的結果與JDK 6相同(見下文),因爲現在在美國東部時區(美國/東部)這裏是日光節約。JDK和joda-time dateformatter:如何考慮日光節約時間
ORDER#0739旅行日期11/11/2011到2011/11/12客戶#1004
旅行日期/時間:11/11/2011 05:00 PM 報告日期/時間:11 /二千零十一分之十一下午4時45 返回日期/時間:2011年11月13日上午02點00
代碼如下:
public String getDateFromDateTime (Date date, Boolean display) throws ParseException {
/*
* SimpleDateFormat working as designed, but pf_ordersController.selected.returnDateTime displaying incorrect date/time
*
* see below from /orders/pf_View.xhtml
* pf_ordersController.selected.returnDateTime (displayed on JSF page) = 11/13/2011 02:00 AM
*
* ORDER # 0739 Trip Date 11/11/2011 to 11/12/2011 Customer # 1004
*
* Trip Date/Time: 11/11/2011 05:00 PM Report Date/Time: 11/11/2011 04:45 PM Return Date/Time: 11/13/2011 02:00 AM
*
* orders.returnDateTime (stored in database) = 11/12/2011 21:00:00 (9:00 PM)
* SimpleDateFormat converts orders.returnDateTime to 11/12/2011 (working as designed)
*
* https://stackoverflow.com/questions/2356672/date-parsing-formating-with-timezone-and-simpledateformat-problem-around-dst-swi
*
DateFormat formatter;
String myDate;
if (display)
formatter = new SimpleDateFormat("MM/dd/yyyy");
else
formatter = new SimpleDateFormat("yyyy-MM-dd");
myDate = formatter.format(date);
*
*/
DateTimeFormatter dtFormatter;
if (display)
dtFormatter = DateTimeFormat.forPattern("MM/dd/yyyy");
else
dtFormatter = DateTimeFormat.forPattern("yyyy-MM-dd");
DateTime dt = new DateTime(date);
String myDate = dt.toString(dtFormatter);
System.out.println("OrderDisplayUtil.java:getDateFromDateTime(" + date + ", " + display + "): " + "myDate = " + myDate);
return myDate;
}
請幫忙。謝謝。
結束至於廣州澳凌說,我們需要知道你是怎麼得到你的意見。我不介意它是以單元測試的形式還是簡單但完整的控制檯應用程序,但是我可以以任何方式運行:) –
@JonSkeet,感謝您的快速響應。我剛剛證實SimpleDateFormat按照設計工作,因爲問題日期/時間是傳遞給此方法的Orders.returnDateTime,getDateFromDateTime(Orders.returnDateTime,...)。 Orders.returnDateTime = 2011-11-12 21:00:00,但由於某種原因,我的JSF /控制器代碼顯示2011-11-13 02:00:00。我會繼續看這個。順便說一句,謝謝你讓我知道我該如何提問;我相信你已經可以告訴我,我是這裏的新手。 :) – Howard
有關提問的更多建議,請參閱http://tinyurl.com/so-hints。這聽起來像你有很多轉換在你的代碼中進行。將它們一個接一個地分離出來,然後正確地解決問題所在。 –