java.time
最新のアプローチでは、Javaの最も古いバージョンにバンドルされていた厄介なレガシー日時クラスに取って代わったjava.timeクラスを使用します。
java.sql.Timestamp
クラスは、これらのレガシークラスの1つです。不要になりました。代わりに、Instant
JDBC 4.2以降を使用して、データベースでやその他のjava.timeクラスを直接使用してください。
このInstant
クラスは、ナノ秒の分解能(小数点以下9桁まで)でUTCのタイムライン上の瞬間を表します。
Instant instant = myResultSet.getObject( … , Instant.class ) ;
既存のTimestamp
と相互運用する必要がある場合は、古いクラスに追加された新しい変換メソッドを介して、すぐにjava.timeに変換します。
Instant instant = myTimestamp.toInstant() ;
別のタイムゾーンに調整するには、タイムゾーンをZoneId
オブジェクトとして指定します。指定適切なタイムゾーン名をの形式でcontinent/region
、のようなAmerica/Montreal
、Africa/Casablanca
またはPacific/Auckland
。決してなど3-4 letter擬似ゾーンを使用しないEST
か、IST
そのままではない真の時間帯ではなく、標準化、さらには一意ではありません(!)。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
に適用してオブジェクトInstant
を作成しZonedDateTime
ます。
ZonedDateTime zdt = instant.atZone( z ) ;
ユーザーに表示する文字列を生成するには、スタックオーバーフローを検索しDateTimeFormatter
て、多くのディスカッションと例を見つけます。
あなたの質問は、ユーザーのデータ入力から日時オブジェクトまで、他の方向に行くことです。一般的に、データ入力を日付と時刻の2つの部分に分割するのが最善です。
LocalDate ld = LocalDate.parse( dateInput , DateTimeFormatter.ofPattern( "M/d/uuuu" , Locale.US ) ) ;
LocalTime lt = LocalTime.parse( timeInput , DateTimeFormatter.ofPattern( "H:m a" , Locale.US ) ) ;
あなたの質問は明確ではありません。ユーザーが入力した日付と時刻をUTCであると解釈しますか?または別のタイムゾーンで?
UTCを意味する場合は、UTC OffsetDateTime
の定数を使用して、オフセット付きのを作成しますZoneOffset.UTC
。
OffsetDateTime odt = OffsetDateTime.of( ld , lt , ZoneOffset.UTC ) ;
別のタイムゾーンを指定する場合は、タイムゾーンオブジェクトであると組み合わせますZoneId
。しかし、どのタイムゾーンですか?デフォルトのタイムゾーンを検出する場合があります。または、重要な場合は、ユーザーの意図を確認する必要があります。
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
定義により常にUTCであるより単純なオブジェクトを取得するには、を抽出しInstant
ます。
Instant instant = odt.toInstant() ;
…または…
Instant instant = zdt.toInstant() ;
データベースに送信します。
myPreparedStatement.setObject( … , instant ) ;
java.timeについて
java.timeのフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスをjava.util.Date
、Calendar
、& SimpleDateFormat
。
ジョダタイムプロジェクトは、今でメンテナンスモードへの移行をアドバイスjava.timeのクラス。
詳細については、Oracleチュートリアルを参照してください。スタックオーバーフローで多くの例と説明を検索してください。仕様はJSR 310です。
java.timeクラスはどこで入手できますか?
ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性があることを証明する場です。あなたはここにいくつかの有用なクラスのような見つけることがInterval
、YearWeek
、YearQuarter
、および多くを。