@Jon Skeet、Date parsing/formatting with TimeZone and SimpleDateFormat give different results around DST switchでお勧めするようにJoda-Timeをダウンロードし、それをJava EE/JSFプロジェクトに追加し、DateTimeとDateTimeFormatterを使用しようとしました。現在はESTタイムゾーン(米国/東部)の夏時間節約になっているので、JDK 6(下を参照)と同じ結果を返しています。JDKとjoda-time dateformatter:昼間の節約時間を考慮する方法
ORDER#0739トリップ日2011年11月11日 2011年11月12日に顧客番号1004
トリップ日付/時刻:2011年11月11日午前5時PM レポート日付/時刻:11/2011分の11 4:45 PM 戻り日付/時刻:次のように2011年11月13日2時00分AM
コードは次のとおりです。
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を参照してください。あなたのコードで*たくさんのコンバージョンが発生しているようです。それらを一つずつ分離し、問題がどこにあるかを正確に調べる*。 –