Javaでタイムスタンプを文字列形式で取得する方法"yyyy.MM.dd.HH.mm.ss"
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());
これは私が持っているものですが、Timestamp()はパラメータを必要とします...
交換する
new Timestamp();
と
new Java.util.Date()
Timestamp
にはデフォルトのコンストラクタがないか、または次のメソッドでそれを実行できるからです。
new Timestamp(System.currentTimeMillis());
Timestampの代わりにJava.util.Date
クラスを使用してください。
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
これにより、指定した形式で現在の日付がわかります。
Timestampの代わりにJava.util.Dateを使用することができます。
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
最新のJava.timeクラスのみを使用してください。 SimpleDateFormat
、Date
、Java.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ドライバがJDBC 4.2に準拠している場合は、Java.timeオブジェクトをデータベースと直接交換できます。 PreparedStatement::setObject
とResultSet::getObject
を使用してください。
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 フォーマットを使うことを検討することを勧めます。標準フォーマットはあなたのものと非常に似ています。例えば: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.timeからJava.sql.Timestamp
に戻すことができます。 Instant
からZonedDateTime
を抽出します。
Java.timeクラスとの間の変換を容易にするために、古いクラスに新しいメソッドが追加されました。
Java.sql.Timestamp ts = Java.sql.Timestamp.from( zdt.toInstant() );
Java.time フレームワークは、Java 8以降に組み込まれています。これらのクラスは、 Java.util.Date
、 Calendar
、& 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に将来追加される可能性があることを証明するものです。 Interval
、 YearWeek
、 YearQuarter
、 more など、便利なクラスがいくつかあります。
より適切な方法は、コンストラクタ内のパラメータとしてロケール領域を指定することです。以下の例では、米国のロケール地域を使用しています。日付のフォーマットはロケールに依存し、ロケールを使用してユーザーの地域の習慣や慣習に関連した情報を調整します ロケール(Java Platform SE 7)
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new Date());
あなたは以下を使うことができます
new Java.sql.Timestamp(System.currentTimeMillis()).getTime()
Result : 1539594988651
これが役立つことを願っています。私の提案であり、報酬ポイントではありません。