web-dev-qa-db-ja.com

現在のタイムスタンプをJavaで文字列形式で取得する方法"yyyy.MM.dd.HH.mm.ss"

Javaでタイムスタンプを文字列形式で取得する方法"yyyy.MM.dd.HH.mm.ss"

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());

これは私が持っているものですが、Timestamp()はパラメータを必要とします...

143
user3388884

交換する

new Timestamp();

new Java.util.Date()

Timestamp にはデフォルトのコンストラクタがないか、または次のメソッドでそれを実行できるからです。

new Timestamp(System.currentTimeMillis());
172
Jigar Joshi

Timestampの代わりにJava.util.Dateクラスを使用してください。

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());

これにより、指定した形式で現在の日付がわかります。

132
dimoniy

Timestampの代わりにJava.util.Dateを使用することができます。

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
29
Kakarot

tl; dr

最新のJava.timeクラスのみを使用してください。 SimpleDateFormatDateJava.sql.Timestampなどのひどいレガシークラスを使用しないでください。

ZonedDateTime                    // Represent a moment as perceived in the wall-clock time used by the people of a particular region ( a time zone).
.now(                            // Capture the current moment.
    ZoneId.of( "Africa/Tunis" )  // Specify the time zone using proper Continent/Region name. Never use 3-4 character pseudo-zones such as PDT, EST, IST. 
)                                // Returns a `ZonedDateTime` object. 
.format(                         // Generate a `String` object containing text representing the value of our date-time object. 
    DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" )
)                                // Returns a `String`. 

Java.time&JDBC 4.2

現代のアプローチは上で見たようにJava.timeクラスを使います。

JDBCドライバがJDBC 4.2に準拠している場合は、Java.timeオブジェクトをデータベースと直接交換できます。 PreparedStatement::setObjectResultSet::getObjectを使用してください。

JDBC 4.2より前のドライバにのみJava.sqlを使用してください。

JDBCドライバがJava.time型のサポートに関してJDBC 4.2にまだ準拠していない場合は、Java.sqlクラスの使用にフォールバックする必要があります。

データを保存する.

OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;  // Capture the current moment in UTC.
myPreparedStatement.setObject( … , odt ) ;

データを取得しています。

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;

Java.sql.Timestamp などのJava.sql型は、データベースの内外への転送にのみ使用してください。 Java 8以降では直ちにJava.time型に変換してください。

Java.time.Instant

Java.sql.Timestampは、UTCのタイムライン上の瞬間であるJava.time.Instantにマッピングされます。

Java.sql.Timestamp ts = myResultSet.getTimestamp( … );
Instant instant = ts.toInstant(); 

タイムゾーン

ZonedDateTime を取得するには、希望の/予想されるタイムゾーンを適用します。

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

書式付き文字列

文字列を生成するには DateTimeFormatter を使用してください。パターンコードは Java.text.SimpleDateFormat のパターンコードと似ていますが、正確ではありません。ドキュメントを注意深く読んでください。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" );
String output = zdt.format( formatter );

この特定のフォーマットは、 offset-from-UTC またはタイムゾーンの表示がないため、その正確な意味については曖昧です。

ISO 8601

もしあなたがこの件に関して何か言いたいことがあれば、私はあなた自身のものを転がすのではなく標準の ISO 8601 フォーマットを使うことを検討することを勧めます。標準フォーマットはあなたのものと非常に似ています。例えば:
2016-02-20T03:26:32+05:30

Java.timeクラスはデフォルトでこれらの標準フォーマットを使用するので、パターンを指定する必要はありません。 ZonedDateTimeクラスはタイムゾーンの名前を追加することによって標準フォーマットを拡張します(賢明な改善)。

String output = zdt.toString(); // Example: 2007-12-03T10:15:30+01:00[Europe/Paris]

Java.sqlに変換する

Java.timeからJava.sql.Timestampに戻すことができます。 InstantからZonedDateTimeを抽出します。

Java.timeクラスとの間の変換を容易にするために、古いクラスに新しいメソッドが追加されました。

Java.sql.Timestamp ts = Java.sql.Timestamp.from( zdt.toInstant() );

Java.timeについて

Java.time フレームワークは、Java 8以降に組み込まれています。これらのクラスは、 Java.util.DateCalendar 、& SimpleDateFormat などの厄介な古い legacy 日時クラスに代わるものです。

Joda-Time プロジェクトは、現在 maintenanceモード になっており、 Java.time クラスへの移行を推奨しています。

詳細については、 Oracleチュートリアル を参照してください。そして多くの例と説明についてはStack Overflowを検索してください。仕様は JSR 310 です。

データベースと直接Java.timeオブジェクトを交換できます。 JDBC 4.2 以降に準拠した JDBCドライバ を使用してください。文字列もJava.sql.*クラスも必要ありません。

Java.timeクラスはどこで入手できますか?

ThreeTen-Extra プロジェクトはJava.timeを追加のクラスで拡張します。このプロジェクトは、Java.timeに将来追加される可能性があることを証明するものです。 IntervalYearWeekYearQuartermore など、便利なクラスがいくつかあります。

22
Basil Bourque

より適切な方法は、コンストラクタ内のパラメータとしてロケール領域を指定することです。以下の例では、米国のロケール地域を使用しています。日付のフォーマットはロケールに依存し、ロケールを使用してユーザーの地域の習慣や慣習に関連した情報を調整します ロケール(Java Platform SE 7)

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new Date());
6
user3144836

あなたは以下を使うことができます

new Java.sql.Timestamp(System.currentTimeMillis()).getTime()

Result : 1539594988651

これが役立つことを願っています。私の提案であり、報酬ポイントではありません。

4
Phoenix