なぜ午後12:20が翌日0:20に解析されるのですか?

飯能フィエッツ:

java.text.SimpleDateFormatXMLドキュメント内の日付/時刻値の文字列表現を解析するために使用しています。時間の値が12である時刻が12時間未来にシフトするすべての時刻が表示されます。つまり、正午の20分は、翌日の真夜中の20分を意味するように解析されます。

解析時にエラーが発生することを確認するユニットテストを作成しました(getTime()Linuxシェルコマンドでの戻り値を確認しましたdate)。今私は疑問に思っています:

  • parse()メソッドにバグはありますか?
  • 入力文字列に何か問題がありますか?
  • 入力に間違ったフォーマット文字列を使用していますか?

入力データは、YahooのYWeatherサービスから取得されます。テストとその出力は次のとおりです。

public class YWeatherReaderTest
{
    public static final String[] rgDateSamples = {
        "Thu, 08 Apr 2010 12:20 PM CEST",
        "Thu, 08 Apr 2010 12:20 AM CEST"
    };

    public void dateParsing() throws ParseException
    {
        DateFormat formatter = new SimpleDateFormat("EEE, dd MMM yyyy K:m a z",
                                                    Locale.US);
        for (String dtsSrc : YWeatherReaderTest.rgDateSamples) {
            Date dt = formatter.parse(dtsSrc);
            String dtsDst = formatter.format(dt);
            System.out.println(dtsSrc);
            System.out.println(dtsDst);
            System.out.println();
        }
    }
}
2010年4月8日木曜日12:20 PM CEST 
2010年4月9日金曜日0:20 AM CEST 

2010年4月8日木曜日12:20 AM CEST 
2010年4月8日木曜日0:20 PM CEST

00:20はPMではないため、2番目の反復の2番目の出力行は少し奇妙です。Dateただし、オブジェクトのミリ秒の値は、正午から20分の(間違った)時間に対応します。

ボビンス:

K指定子は、0から始まる時間数を使用するように文書化されSimpleDateFormatています。12のような範囲外の値を解析するように要求するとどうなるかわかりません...入力したように動作00:20 PMし、さらに12を追加しているようです。時間。

最初の1時間に12を使用する場合は、h代わりに指定子を試してください

壊れた12時間時計システムの恐怖はなぜ死なないのですか?

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SetSystemTime()が午後に異なる動作をするのはなぜですか?

分類Dev

Date.getMinutes()が午後4時に2を返すのはなぜですか?

分類Dev

値0が解析されないのに、他の数値が解析されるのはなぜですか?

分類Dev

`std :: reference_wrapper`がc ++ 17で非推奨になり、c ++ 20で削除されるのはなぜですか?

分類Dev

sqliteで今日の午後12時から翌日の午前5時までの売上を選択する方法

分類Dev

%20がURLアドレスlocalhostに添付されているのはなぜですか

分類Dev

Python、file(1)-テキストとバイナリファイルの判別に数値[7,8,9,10,12,13,27]とrange(0x20、0x100)が使用されるのはなぜですか

分類Dev

PHP。月の日付オブジェクトの差分が12か月後に0にリセットされるのはなぜですか?

分類Dev

終了後にpingが出力されるのはなぜですか?

分類Dev

スケーリングされたGLES20RecordingCanvasと単純なCanvasに描画されたパスの品質が異なるのはなぜですか?

分類Dev

Win32 API syscallで使用されるバッファが[1 << 20] <type>配列にキャストされるのはなぜですか?

分類Dev

byteArrayの長さが20ではなく22になるのはなぜですか?

分類Dev

解析中にxml宣言が削除されるのはなぜですか?

分類Dev

C ++ 20でstd :: ssize()が導入されたのはなぜですか?

分類Dev

ソフトウェアの更新後にFedora20が再起動を要求するのはなぜですか?

分類Dev

USB が 20Gbps ではなく 5Gbps または 10Gbps のみで最も一般的に実装されるのはなぜですか?

分類Dev

std :: rel_ops :: operatorsがC ++ 20で廃止されるのはなぜですか?

分類Dev

C ++ 20までmemory_order_releaseがサポートされるのはなぜですか?

分類Dev

NCalcで、「if(12> 8)」がfalseに解決されるのはなぜですか?

分類Dev

このマクロが10ではなく20に置き換えられるのはなぜですか?

分類Dev

午後12時/正午より前かどうかを確認するときにMoment.jsisBefore()が機能しない

分類Dev

こんにちは私はこのような時間が必要です@ "2014年1月12日午後11時45分"

分類Dev

C ++ 20でvolatileが非推奨になるのはなぜですか?

分類Dev

C ++ 20でvolatileが非推奨になるのはなぜですか?

分類Dev

次のコードの出力がx = 0 x = 20であるのはなぜですか?

分類Dev

SSDが定期的に20〜30秒間ハングするのはなぜですか?

分類Dev

.split()の後に空の&strが表示されるのはなぜですか?

分類Dev

bash- \ x0d \ x20が行を消去するのはなぜですか

分類Dev

bash- \ x0d \ x20が行を消去するのはなぜですか

Related 関連記事

  1. 1

    SetSystemTime()が午後に異なる動作をするのはなぜですか?

  2. 2

    Date.getMinutes()が午後4時に2を返すのはなぜですか?

  3. 3

    値0が解析されないのに、他の数値が解析されるのはなぜですか?

  4. 4

    `std :: reference_wrapper`がc ++ 17で非推奨になり、c ++ 20で削除されるのはなぜですか?

  5. 5

    sqliteで今日の午後12時から翌日の午前5時までの売上を選択する方法

  6. 6

    %20がURLアドレスlocalhostに添付されているのはなぜですか

  7. 7

    Python、file(1)-テキストとバイナリファイルの判別に数値[7,8,9,10,12,13,27]とrange(0x20、0x100)が使用されるのはなぜですか

  8. 8

    PHP。月の日付オブジェクトの差分が12か月後に0にリセットされるのはなぜですか?

  9. 9

    終了後にpingが出力されるのはなぜですか?

  10. 10

    スケーリングされたGLES20RecordingCanvasと単純なCanvasに描画されたパスの品質が異なるのはなぜですか?

  11. 11

    Win32 API syscallで使用されるバッファが[1 << 20] <type>配列にキャストされるのはなぜですか?

  12. 12

    byteArrayの長さが20ではなく22になるのはなぜですか?

  13. 13

    解析中にxml宣言が削除されるのはなぜですか?

  14. 14

    C ++ 20でstd :: ssize()が導入されたのはなぜですか?

  15. 15

    ソフトウェアの更新後にFedora20が再起動を要求するのはなぜですか?

  16. 16

    USB が 20Gbps ではなく 5Gbps または 10Gbps のみで最も一般的に実装されるのはなぜですか?

  17. 17

    std :: rel_ops :: operatorsがC ++ 20で廃止されるのはなぜですか?

  18. 18

    C ++ 20までmemory_order_releaseがサポートされるのはなぜですか?

  19. 19

    NCalcで、「if(12> 8)」がfalseに解決されるのはなぜですか?

  20. 20

    このマクロが10ではなく20に置き換えられるのはなぜですか?

  21. 21

    午後12時/正午より前かどうかを確認するときにMoment.jsisBefore()が機能しない

  22. 22

    こんにちは私はこのような時間が必要です@ "2014年1月12日午後11時45分"

  23. 23

    C ++ 20でvolatileが非推奨になるのはなぜですか?

  24. 24

    C ++ 20でvolatileが非推奨になるのはなぜですか?

  25. 25

    次のコードの出力がx = 0 x = 20であるのはなぜですか?

  26. 26

    SSDが定期的に20〜30秒間ハングするのはなぜですか?

  27. 27

    .split()の後に空の&strが表示されるのはなぜですか?

  28. 28

    bash- \ x0d \ x20が行を消去するのはなぜですか

  29. 29

    bash- \ x0d \ x20が行を消去するのはなぜですか

ホットタグ

アーカイブ