2016-04-06 17 views
0

コード持つ:SimpleDateFormatバグや誤解パターンと寛大な?

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM d HH:mm yyyy"); 

で期待通りにこれは動作します:

simpleDateFormat.parse("Mar 27 02:02 2016"); 
simpleDateFormat.parse("Mar 27 03:02 2016"); 

しかしsimpleDateFormat.setLenient(false);

はパース( "3月27日午前2時02分2016")が失敗になりますが。 これは私を完全に混乱させる - 私が見ることができる、SDF形式のパターンは正しいですか?それでは、寛大なものが設定されているかどうかは関係ありません。また、私は同じフォーマットで他の多くのランダム(千)のデータストリングを試しました。それは失敗したのは "Mar 27 02:02 2016"のdatestringだけです - 。ここで何が起こっているのですか? ロケールは重要ですが、タイムゾーンが "Europe/Stockholm"(作成されたカレンダーのuseDaylightがtrue)の場合、sv_SEです。

+1

をうまく働いたが、あなたは(夏時間別称)2016年3月27日(日曜日)に開始夏時間を持っていたロケールでいますか? – rgettman

+0

ああ、実際、私は - なぜそれが失敗するのでしょうか? – Beamie

+1

私は米国にいるとき、夏時間が有効になると、1:59:59から3:00:00に直接行きます。 2時は決して存在しなかった。 SimpleDateFormatの簡略化は、4月31日のようなものを5月1日と4月の32日に5月2日に回すことを意味します。 – rgettman

答えて

0

私は以下のように試験して、それが私のために

Locale locale = new Locale("sv", "SE"); 
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM d HH:mm yyyy", locale); 
simpleDateFormat.setLenient(false); 
Date pDate = simpleDateFormat.parse("Mar 27 02:02 2016"); 
//simpleDateFormat.parse("Mar 27 03:02 2016"); 
System.out.println(pDate); 
+0

申し訳ありませんが、私は質問の重要な情報を忘れてしまい、今すぐ更新しました。 – Beamie

+0

それを試してみると、それもあなたのために再現可能でなければなりません。 – Beamie

+0

はい、サマータイムによるタイムゾーンの設定後に再現できます。寛容をtrueに設定すると、チェックがエスケープされます。 –

関連する問題