.NET では、ローカルのタイム ゾーンでローカルのDateTime.Now日付と時刻を提供します。
などを Java で使用するnew Date()と、タイムゾーンを意識しない値が得られます。タイム ゾーンを考慮するにCalendarは、適切なタイム ゾーンを持つ を作成するか、使用する適切な文字列を作成する必要があります。SimpleDateFormat再度、フォーマットする前に適切なタイム ゾーンに設定します。例えば:
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd", Locale.US);
format.setTimeZone(...); // Whichever time zone you want
String text = format.format(new Date()); // "now"
また、Joda Timeは、ビルトインCalendarおよびDateクラスよりもはるかに優れた日付/時刻の Java API であることに注意してください。
最後に、.NET の 2 番目のサンプル コードにはバグがあります。DateTime.Now 一度だけ評価する必要があります。理想的には、フォーマット文字列を渡すだけですDateTime.Now.ToString("yyyy/MM/dd")。ただし、各ビットを個別に文字列に変換したい場合でも、値を一度ローカル変数にフェッチしてから再利用します。それ以外の場合、そのコードを真夜中頃に実行すると、日付が変更される可能性があります。たとえば、 2013 年の開始直前に実行すると、「2012/12/1」または「2012/1」の文字列になる可能性があります。 /1" どちらも正しくありません。