2007年9月23日の日付のタイムスタンプを作成するにはどうすればよいですか?
Timestamp
によって、私はあなたが Java.sql.Timestamp
を意味すると推測します。このクラスには、long
引数を受け入れるコンストラクターがあります。 DateFormat
クラスを使用してこれを解析できます。
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = dateFormat.parse("23/09/2007");
long time = date.getTime();
new Timestamp(time);
これはどうですか?
Java.sql.Timestamp timestamp = Java.sql.Timestamp.valueOf("2007-09-23 10:10:10.0");
タイムスタンプとはどういう意味ですか? Unixエポック以降のミリ秒を意味する場合:
GregorianCalendar cal = new GregorianCalendar(2007, 9 - 1, 23);
long millis = cal.getTimeInMillis();
実際のJava.sql.Timestampオブジェクトが必要な場合:
Timestamp ts = new Timestamp(millis);
Java.sql.Timestamp.from (
LocalDate.of ( 2007 , 9 , 23 )
.asStartOfDay( ZoneId.of ( "America/Montreal" ) )
.toInstant()
)
Java 8以降に組み込まれている Java.time フレームワークを使用してコードを表示して、このページを更新しましょう。
これらの新しいクラスは、 Joda-Time に触発され、 JSR 31 によって定義され、 ThreeTen-Extra プロジェクトによって拡張されます。彼らは、Javaの初期バージョンにバンドルされている、悪名高い厄介な古い日時クラスに取って代わります。
Java.timeでは、Instant
はUTCのタイムライン上の瞬間です。 ZonedDateTime
は、タイムゾーン(ZoneId
)に調整されたインスタントです。
ここではタイムゾーンが重要です。 September 23, 2007
の日付は、タイムゾーンを適用せずにタイムライン上の瞬間に変換することはできません。新しい日は、まだ「昨日」であるモントリオールよりもパリの方が早く夜明けになると考えてください。
また、Java.sql.Timestampは日付と時刻の両方を表します。そのため、日付に合わせて時刻を挿入する必要があります。時刻として1日の最初の瞬間を望んでいると仮定します。夏時間やその他の異常のために、これは常に00:00:00.0
の時間ではないことに注意してください。
古いJava.util.Dateクラスとは異なり、Joda-Timeとは異なり、Java.time型の解像度はミリ秒ではなくナノ秒です。これは、Java.sql.Timestampの解像度と一致します。
Java.sql.Timestampには、toString
メソッドを介して文字列表現を生成するときに、JVMの現在のデフォルトのタイムゾーンをその日付時刻値に暗黙的に適用するという厄介な習慣があることに注意してください。ここに、America/Los_Angeles
タイムゾーンが適用されています。対照的に、Java.timeクラスは標準 ISO 8601 形式を使用してより健全です。
LocalDate d = LocalDate.of ( 2007 , 9 , 23 ) ;
ZoneId z = ZoneId.of ( "America/Montreal" ) ;
ZonedDateTime zdt = d.asStartOfDay( z ) ;
Instant instant = zdt.toInstant() ;
Java.sql.Timestamp ts = Java.sql.Timestamp.from ( instant ) ;
コンソールにダンプします。
System.out.println ( "d: " + d + " = zdt: " + zdt + " = instant: " + instant + " = ts: " + ts );
実行すると。
d:2007-09-23 = zdt:2007-09-23T00:00-04:00 [America/Montreal] = instant:2007-09-23T04:00:00Z = ts:2007-09-22 21:00: 00.0
ところで、JDBC 4.2以降では、Java.time型を直接使用できます。 Java.sql.Timestamp
は必要ありません。
PreparedStatement.setObject
ResultSet.getObject
Java.time フレームワークはJava 8以降に組み込まれています。これらのクラスは、厄介な古い legacyJava.util.Date
、 Calendar
、& SimpleDateFormat
などの日時クラスに取って代わります。
Joda-Time プロジェクトは、現在 メンテナンスモード であり、 Java.time クラスへの移行を推奨しています。
詳細については、 Oracle Tutorial を参照してください。また、Stack Overflowで多くの例と説明を検索してください。指定は JSR 31 です。
Java.timeオブジェクトをデータベースと直接交換できます。 JDBC 4.2 以降に準拠する JDBCドライバー を使用します。文字列もJava.sql.*
クラスも必要ありません。
Java.timeクラスはどこで入手できますか?
ThreeTen-Extra プロジェクトは、追加のクラスでJava.timeを拡張します。このプロジェクトは、Java.timeに将来追加される可能性のある証明の場です。 Interval
、 YearWeek
、 YearQuarter
、 more などの便利なクラスがあります。
API によると、年、月などを受け入れるコンストラクタは非推奨です。代わりに、longを受け入れるConstructorを使用する必要があります。 Calendar 実装を使用して、たとえば getTimeInMillis メソッドを使用して、希望する日付を構築し、時間表現にlongとしてアクセスできます。
次のこともできます。
// untested
Calendar cal = GregorianCalendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, 23);// I might have the wrong Calendar constant...
cal.set(Calendar.MONTH, 8);// -1 as month is zero-based
cal.set(Calendar.YEAR, 2009);
Timestamp tstamp = new Timestamp(cal.getTimeInMillis());