0

SimpleDateFormatを使用してDateをString型DateからDate型Dateに変換していますが、取得する日付が変更されています。変更の理由を教えてもらえますか。また、Stringから正しいDate型の日付を取得するために何を使用すればよいですか。私がここに着くにつれて1つを変更しました。

    Date d = null;
    String startTime="2012-03-17 16:00:00 PM";
    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
    try {
          d=  sdf.parse(startTime);
         } catch (ParseException e) {}

System.out.println("DD="+d) //printing Sun Mar 18 04:00:00 IST 2012 ? why this 
   //Date enterd was 17 Mar 2012
4

4 に答える 4

2

24時間制とAM/PMマーカーを組み合わせるとあいまいになります。あなたの場合、「HH」(大文字のH)を使用して0〜23の範囲の時間フィールドを解析し、AM / PMサフィックスを無視するか、適切なAM / PMサフィックスが付いた12時間制を使用する必要があります(この場合は「04」 :00:00 PM ")。

于 2013-01-21T17:06:10.897 に答える
1

16:00:00 PMは有効な時間ではなく、SimpleDateFormat翌日の午前4時に変換されます。

于 2013-01-21T17:05:13.663 に答える
1

hh12時間形式のフォーマット文字列で使用しています。AM / PM指定子(a)もあることを考えると、それは理にかなっています...しかし、16の値には意味がありません。

「午後16時」が翌日の午前4時に翻訳されているのではないかと思うので、問題があります。(奇妙なことに、を使用してもこのエラーは発生setLenient(false) しません。)

の形式を使用"yyyy-MM-dd HH:mm:ss"して、最後に「PM」がないことを確認するか既存の形式を使用して適切な値(16ではなく04)を指定します。

さらに、私は提案します:

  • 通常、 Joda Timeを使用することは、Javaでの日付/時刻の作業に適しています。
  • このように飲み込まないでくださいParseException。空のキャッチブロックは本当に悪い考えです。
  • 常にデフォルトのタイムゾーンを使用して呼び出すDate.toString()と、出力形式を変更できません。Date迅速な診断には問題ない場合もありますが、実際にはタイムゾーン情報がないのに、実際にはタイムゾーン情報があるという誤解を招く印象を与える可能性があります。
于 2013-01-21T17:07:30.607 に答える