20

Dateオブジェクトを読み取り可能な文字列(たとえば、22/10/2009 21:13:14)に保存します。この文字列は、Dateオブジェクトに解析して戻すこともできます。

私は多くのことを試しましたが、解析とフォーマットにDateFormaterを使用するのが最善でしたが、欠点があります。日付をフォーマットすると、秒情報が失われます。フォーマットして秒を表示するオプションがあるかどうかを調べようとしましたが(Dateオブジェクトで許可されている解像度であるため、ミリ秒レベルの方が良いでしょう)、足りませんでした。

何か案は?

4

6 に答える 6

47

java.text.SimpleDateFormatを見てください

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss.SSS");
Date dt = new Date();
String S = sdf.format(dt); // formats to 09/23/2009 13:53:28.238
Date dt2 = sdf.parse(S); // parses back
于 2009-09-23T20:52:35.753 に答える
5

SimpleDateFormat秒、さらにはミリ秒を含む非常に単純なパターンシステムに基づいて、日付をフォーマットおよび解析できます。

于 2009-09-23T20:52:40.493 に答える
4

他の答えはすべて良いです。

ただし、このようなことを行う場合は、文字列としてコーディングしたときに適切にソートされる形式を選択してください。「yyyy / MM / ddHH:mm:ss」で問題ありません。ソフトウェアエンジニアが明白で便利な方法でソートされない日付形式を選択するとき、それはいつも私を驚かせます。

あなたは将来のある遠い時点であなたの仲間の開発者に多くの苦痛を救うでしょう-それを良いカルマと考えてください:-)

于 2011-04-18T14:39:39.077 に答える
3

ISO 8601

ISO8601形式を使用します。

  • 柔軟性があり、秒と秒の端数が含まれていますが、0の場合は省略してもかまいません。
  • これは標準であるため、ますます多くのツールがフォーマットして解析します。ストレージまたはデータ交換のシリアル化に最適です。
  • のようになりますが2009-10-22T21:13:14、かなり人間が読める形式であると言えます(ただし、T時間部分の開始を示す中央は、最初は異常に感じるかもしれません)。
  • mikeraが別の回答で要求したように、年が1000から9999までの4桁の範囲にある限り、文字列は適切にソートされます。
  • のクラスjava.time、最新のJava日付および時刻API、およびJoda Timeのクラスは、デフォルトとしてISO 8601を解析します。つまり、明示的なフォーマッターを使用せず、toStringメソッドから同じ形式を生成します。

使用のささやかなデモンストレーションjava.time

LocalDateTime dateTime = LocalDateTime.of(2009, 10, 22, 21, 13, 14);
String readableString = dateTime.toString();
System.out.println(readableString);
LocalDateTime parsedBack = LocalDateTime.parse(readableString);
System.out.println(parsedBack);

これにより、2つの同じ行が出力されます。

2009-10-22T21:13:14
2009-10-22T21:13:14

後者のSystem.out.println()呼び出しは暗黙的toString()にもう一度呼び出すので、これは驚くべきことではありません。

于 2018-01-18T17:17:03.077 に答える
2

少し話題から外れていますが、DateFormatとSimpleDateFormatはスレッドセーフではないことを常に人々に思い出させる必要があると感じています。Sunのドキュメントにはこれが明確に記載されていますが、私は人々がSimpleDateFormatを静的に貼り付けるコードを実際に見つけ続けています...

于 2009-09-24T09:19:06.680 に答える
2

それをもう少し簡単にし、他のほとんどの回答に含まれる独自のDateFormatを作成することを避けたい場合は、 java.time.Instantのデフォルト形式を利用できます。

(new Date()).toInstant.toString();
于 2018-02-09T21:36:30.980 に答える