TimeZoneでの簡単な日付書式の問題

こんにちは私はsimpleedateformat + timezoneの問題を抱えています。私のコードは25/11/2011として出力を期待していますが、24/11/2011に戻ることになります。現在のタイムゾーンは太平洋で、これをテストしています(2011年11月25日)。 助けてください。

こんにちは、私は現在の日付と比較している私はそれを印刷していないと私は出力を期待していた完全なプログラムを見つける偽としてしかし、その真に行く。

これは、サーバーが太平洋に位置し、ユーザーがロンドンから来ている生産においても起こっている典型的なシナリオです。この問題の解決方法を教えてください。

String  vacationStartDate = "25/11/2011";
SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy");
//America/Los_Angeles
TimeZone tz = TimeZone.getTimeZone("Europe/London");
dateFormatter.setLenient(false);
dateFormatter.setTimeZone(tz);      
Date start = dateFormatter.parse(vacationStartDate);                    
Date todayBeginning = new Date();

if ( start.before(todayBeginning)){
    System.out.println("True ");    
} else {
    System.out.println("False ");
}
0

3 答え

これは、あなたがロンドンのタイムゾーンで日付を解析しているが、それをあなたのタイムゾーンで印刷しているからです。だからロンドンの25/11/2011 00:00:00は24/11/2011 16:00:00かあなたのタイムゾーンの何でもです。

1
追加された

日付(日/月/年)は、瞬間とは基本的に異なる概念です(「25/11/2011で休暇を開始する」とは、「25/11/2011 at 00:00:00」を意味しません) 、私たちはその日を全体の実体と呼んでいます)。標準のJava API(他の多くの人がそうであるように)がこの概念を混乱させているという不名誉なことです。あなたの問題(Matthew Farwellの答えで説明されています)は、この混乱の原因となる多くの不合理な問題の1つです。純粋な日付計算。

Joda時間の使用を検討してください。特定のクラス( Localdate )を入力します。

0
追加された
私の正確な要件は、例えば、私はPSTの時間帯に私のマシンを設定し、私は自分のマシンに設定されているローカルタイムゾーンを考慮せずにISTまたはESTで正確な日付を識別したいです。ここで起こっているのは、そこからPST時間を取ってISTまたはESTを計算することです。これは私の問題で、プロジェクトではjodaを使用できません。
追加された 著者 saravanan shanmugavel,

あなたのコードはあなたのタイムゾーンの現在の日付を返しますので、出力は正しいです。 TimeZone.getTimeZone( "Europe/London"); は、解析中の日付のタイムゾーンであるため、現在のタイムゾーンが太平洋はロンドンの日付より前になります。

0
追加された
デフォルトロケールを変更することができます
追加された 著者 Wojtek Owczarczyk,
それは私のローカルで設定されている別のタイムゾーンを持っている場合でも、異なるタイムゾーンで日付を取得することは可能ですか?
追加された 著者 saravanan shanmugavel,