私のWindows(8)ワークステーションとAIXの両方でこのコードをテストしました。
_ public static void main(String[] args) {
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").format(new Date()));
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").format(new Date()));
}
_
結果としてこれに似たものを得ました:
_2013-10-07 12:53:26.000905
2013-10-07 12:53:26.000906
_
誰かがマイクロ秒ではない場合、最後の数字は何ですか?
注:私はDB2データベースと対話します。DB2データベースでは、時系列の列を使用して、秒の後に6桁のTIMESTAMPとして時系列データ、つまりマイクロ秒(IMO)が格納されます。ただし、これらの「タイムスタンプ」はすべて、次のクエリを要求することで作成されます。
_SELECT current timestamp as currenttimestamp FROM Table ( values (1)) temp
_
上記の結果が与えられた場合、データベースから_current timestamp
_を選択する代わりに、コードでnew Date()
を使用することはできなかったのでしょうか。
ありがとう。
PS:検索しましたが、関連する(回答済みの)質問が見つかりませんでした: Javaのマイクロ秒単位の現在時刻 または 時間、分、秒、ミリ秒、マイクロ秒の時刻を取得
Letter Date or Time Component Presentation Examples
S Millisecond Number 978
つまり、ミリ秒、つまり1/1000秒です。あなたは6桁でフォーマットするだけなので、3つの余分な先行ゼロを追加します...
次の方法で確認できます。
Date d =new Date();
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").format(d));
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS").format(d));
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(d));
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSS").format(d));
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSS").format(d));
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").format(d));
出力:
2013-10-07 12:13:27.132
2013-10-07 12:13:27.132
2013-10-07 12:13:27.132
2013-10-07 12:13:27.0132
2013-10-07 12:13:27.00132
2013-10-07 12:13:27.000132
( イデオンフィドル )
Instant.now()
.toString()
2018-02-02T00:28:02.487114Z
Instant.parse(
"2018-02-02T00:28:02.487114Z"
)
Ppeterkaによる 受け入れられた回答 は正しいです。フォーマットパターンを悪用すると、データが誤って表示されますが、内部値は常にミリ秒に制限されます。
使用している面倒なSimpleDateFormat
およびDate
クラスはレガシーであり、Java.timeクラスに取って代わりました。Java.timeクラスは ナノ秒 解像度を処理し、従来のクラスの ミリ秒 制限よりもはるかに細かい。
Java.util.Date
と同等のものはJava.time.Instant
です。古いクラスに追加された新しいメソッドを使用して、それらの間で変換することもできます。
Instant instant = myJavaUtilDate.toInstant() ;
Instant
クラスは、 [〜#〜] utc [〜#〜] の解像度で ナノ秒 (最大9桁のタイムライン上の瞬間を表します小数の)。
UTCで現在の瞬間をキャプチャします。 Java 8は現在の瞬間をミリ秒単位でキャプチャしますが、Java 9の新しいClock
実装は瞬間をより細かく、通常はマイクロ秒単位でキャプチャしますが、コンピューターのハードウェアクロックとOSおよびJVMの実装。
Instant instant = Instant.now() ;
標準ISO 8601形式の文字列を生成します。
String output = instant.toString() ;
2018-02-02T00:28:02.487114Z
他の形式の文字列を生成するには、すでに何度も説明されているDateTimeFormatter
のStack Overflowを検索します。
UTC以外のタイムゾーンに調整するには、ZonedDateTime
を使用します。
ZonedDateTime zdt = instant.atZone( ZoneId.of( "Pacific/Auckland" ) ) ;
Java.time フレームワークはJava 8以降に組み込まれています。これらのクラスは、厄介な古い legacyJava.util.Date
、 Calendar
、& SimpleDateFormat
。
Joda-Time プロジェクトは、現在 メンテナンスモード であるため、 Java.time クラスへの移行を推奨しています。
詳細については、 Oracle Tutorial を参照してください。多くの例と説明については、Stack Overflowを検索してください。仕様は JSR 310 です。
Java.timeクラスはどこで入手できますか?
ThreeTen-Extra プロジェクトは、Java.timeを追加のクラスで拡張します。このプロジェクトは、Java.timeに将来追加される可能性のある証明の場です。 Interval
、 YearWeek
、 YearQuarter
、および more 。
さらに別のトリックを使用して、6桁の精度(マイクロ秒)で日付をフォーマットしました。
System.out.println(
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.").format(microseconds/1000)
+String.format("%06d", microseconds%1000000));
この手法は、ナノ秒以上までさらに拡張できます。
テキスト表現で秒の小数部を取得する場合は、Java.sql.Timestamp.toStringを使用します。 DBからのタイムスタンプとJava Dateとの違いは、DBの精度がナノ秒であるのに対し、Java日付の精度はミリ秒です。