0

取得した日付フォーマッタを使用して日付に解析しようとしているYYYYMMDD形式の日付文字列があります

public static DateFormat getDateFormat() {
  SimpleDateFormat result = new SimpleDateFormat("yyyyMMdd");                  
  result.setLenient(false);
  return result;
}

プログラムが次のように実行されるときのデフォルトのタイムゾーンを設定します

public static void doTheDateZoneInit() {
    TimeZone tzone = TimeZone.getTimeZone("Europe/London");
    TimeZone.setDefault(tzone);
}

印刷文字列でタイムゾーンを指定せずに日付をフォーマットして出力すると

Date myDate= getDateFormat().parse("20110331");
System.out.println("Date after it is formatted:" + myDate);

出力はBSTタイムゾーンです

Date after it is formatted:Thu Mar 31 01:00:00 BST 2011

異なる日付で同じことを何度も実行すると、異なる出力が得られます

  • 20120331 >> BST >> フォーマット後の日付:Sat Mar 31 01:00:00 BST 2012
  • 20121231 >> GMT >> フォーマット後の日付:Mon Dec 31 00:00:00 GMT 2012
  • 20130328 >> GMT >> フォーマット後の日付:Thu Mar 28 00:00:00 GMT 2013
  • 20130331 >> GMT >> フォーマット後の日付:Sun Mar 31 00:00:00 GMT 2013
  • 20140331 >> BST >> フォーマット後の日付:Mon Mar 31 01:00:00 BST 2014
  • 20130401 >> BST >> フォーマット後の日付: Mon Apr 01 01:00:00 BST 2013
  • 20130402 >> BST >> フォーマット後の日付:Tue Apr 02 01:00:00 BST 2013
  • 20130501 >> BST >> フォーマット後の日付:Wed May 01 01:00:00 BST 2013

2012 年から 2013 年にかけて、すべてが GMT で計算される範囲があるようです。なぜこれが起こっているのか分かりません。

問題は、これらの日付に終業時間を追加することです...たとえば、文字列から変換した日付を使用して次のメソッドを呼び出し、最新の日付を取得するために 23:59:59:999 を追加します指定された日付の時間。

public static Date addAlmostOneDay(Date startDate) {
    Calendar cal = new GregorianCalendar();
    cal.setTime(startDate);
    cal.add(Calendar.HOUR, 23);
    cal.add(Calendar.MINUTE, 59);
    cal.add(Calendar.SECOND, 59);
    cal.add(Calendar.MILLISECOND, 999);
    return cal.getTime();
}

しかし、23:59:59 を追加すると GMT に変換された場合... 日付を元の日付の終わりに設定するのではなく、BST と GMT の時間差を考慮に入れます

  • Sun Mar 31 00:00:00 GMT 2013 は Mon Apr 01 00:59:59 BST 2013 (翌日 + 1 時間) になります。
  • Mon Apr 01 01:00:00 BST 2013 は Mon Apr 01 23:59:59 BST 2013 になります (今日の終わりが私が望むものです)

なぜこれが起こっているように見えるのか、誰かが光を当てることができますか. YYYMMDD 形式の異なる入力で同じコードが実行されますか?

4

2 に答える 2

5

OK、私はあなたの意味を理解したと思います。デフォルトのタイムゾーンをロンドンのタイムゾーンに設定します。

夏のロンドンは英国夏時間 (BST) タイムゾーンです。冬には、GMT タイムゾーンになります。そして、このタイムゾーンの変更が行われる日は、年によって異なります。

于 2013-03-17T10:46:36.093 に答える