tl; dr
ジョダタイムプロジェクトは現在に取って代わられ、メンテナンスモード、であるjava.timeのクラス。
UTCで現在の瞬間をキャプチャします。
Instant.now()
その瞬間をデータベースに保存するには:
myPreparedStatement.setObject( … , Instant.now() ) // Writes an `Instant` to database.
その瞬間をdatbaseから取得するには:
myResultSet.getObject( … , Instant.class ) // Instantiates a `Instant`
壁時計の時刻を特定のタイムゾーンの時刻に合わせる。
instant.atZone( z ) // Instantiates a `ZonedDateTime`
LocalDateTime
間違ったクラスです
他の答えは正しいですLocalDateTime
が、それはあなたの目的にとって間違ったクラスであることを指摘することができません。
java.timeとJoda -Timeの両方で、LocalDateTime
意図的にタイムゾーンやオフセットからのオフセットの概念が欠けています。そのため、それは瞬間を表すものではなく、タイムライン上のポイントではありません。A LocalDateTime
は、約26〜27時間の範囲の潜在的な瞬間についての大まかな考えを表します。
LocalDateTime
ゾーン/オフセットが不明な場合(良好な状況ではない)、またはゾーンオフセットが不確定な場合は、forを使用します。たとえば、「クリスマスは2018年12月25日の最初の瞬間に始まります」はとして表されますLocalDateTime
。
a ZonedDateTime
を使用して、特定のタイムゾーンの瞬間を表します。たとえば、Pacific/Auckland
またはなどの特定のゾーンで始まるクリスマスAmerica/Montreal
は、ZonedDateTime
オブジェクトで表されます。
常にUTCでしばらくの間、を使用しますInstant
。
Instant instant = Instant.now() ; // Capture the current moment in UTC.
タイムゾーンを適用します。同じ瞬間、タイムライン上の同じポイントですが、異なる実時間で表示されています。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = instant.atZone( z ) ; // Same moment, different wall-clock time.
したがって、LocalDateとLocalDateTimeの間で変換できる場合、
いいえ、間違った戦略です。日付のみの値があり、日時の値が必要な場合は、時刻を指定する必要があります。その時間帯は、特定のゾーンのその日に有効でない場合があります。その場合、ZonedDateTime
クラスは必要に応じて時間帯を自動的に調整します。
LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 ) ;
LocalTime lt = LocalTime.of( 14 , 0 ) ; // 14:00 = 2 PM.
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
時刻として一日の最初の瞬間が必要な場合は、java.timeにその瞬間を決定させます。日が00:00:00に始まると想定しないでください。夏時間(DST)などの異常は、その日が01:00:00などの別の時間に始まることを意味します。
ZonedDateTime zdt = ld.atStartOfDay( z ) ;
java.sql.Timestamp
間違ったクラスです
java.sql.Timestamp
今では完全に取って代わらレガシー、ある厄介な古い日付時刻クラスの一部であるjava.timeのクラス。そのクラスは、ナノ秒の分解能でUTCの瞬間を表すために使用されました。その目的は現在で提供されています。java.time.Instant
getObject
/を含むJDBC 4.2setObject
以下のようJDBC 4.2以降では、あなたのJDBCドライバを直接呼び出すことにより、データベースとjava.time・オブジェクトを交換することができます:
例えば:
myPreparedStatement.setObject( … , instant ) ;
…と…
Instant instant = myResultSet.getObject( … , Instant.class ) ;
レガシー⬌モダンを変換
java.timeにまだ更新されていない古いコードとインターフェースする必要がある場合は、古いクラスに追加された新しいメソッドを使用して、前後に変換します。
Instant instant = myJavaSqlTimestamp.toInstant() ; // Going from legacy class to modern class.
…そして…
java.sql.Timestamp myJavaSqlTimestamp = java.sql.Timestamp.from( instant ) ; // Going from modern class to legacy class.
java.timeについて
java.timeのフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスをjava.util.Date
、Calendar
、& SimpleDateFormat
。
ジョダタイムプロジェクトは、今でメンテナンスモードへの移行をアドバイスjava.timeのクラス。
詳細については、Oracleチュートリアルを参照してください。スタックオーバーフローで多くの例と説明を検索してください。仕様はJSR 310です。
java.timeオブジェクトをデータベースと直接交換することができます。JDBC 4.2以降に準拠したJDBCドライバーを使用します。文字列もクラスも必要ありません。java.sql.*
java.timeクラスはどこで入手できますか?
ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性があることを証明する場です。あなたはここにいくつかの有用なクラスのような見つけることがInterval
、YearWeek
、YearQuarter
、および多くを。
java.sql.Timestamp
クラスはレガシーになり、java.timeクラス、特にに取って代わられましたInstant
。