tl;dr
いいえ。
- Oracle などのデータベースは、プレーン テキストとしてではなく、独自の内部定義バイナリ値で日時の値を格納します。
- Oracle
DATE
type は日付だけでなく時刻も保持します。
DATE
=日付 + 時刻
DATE
Oracle データベースの type の名前が間違っています。複数の日付 (年、月、日) を保持します。
この型は、整数秒に解決される時刻を持つ日付を表します。このタイプには、タイム ゾーンまたは UTC からのオフセットのコンテキストがありません。したがって、このタイプを使用して、タイムライン上の特定の時点を表すことはできません。 (ある瞬間を追跡するには、Oracle 型 TIMESTAMP WITH TIME ZONE
を使用します .)
この Oracle の命名は SQL 標準とは異なることに注意してください。標準では、DATE
type は日付のみの値で、時刻もタイムゾーンもオフセットもありません。
java.time.LocalDateTime
したがって、この型は LocalDateTime
Javaで。
検索。
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
プレ>ストレージ。
myPreparedStatement.setObject( … , ldt ) ;
プレ>テキスト
上記のコードでは、ダム文字列ではなくスマート オブジェクトを使用していることに注意してください。
LocalDateTime
などの日時オブジェクトString
ではありません テキストを保持しません。それらは、独自の方法で内部的にその値を表します。文字列を日時オブジェクトとして解析し、日時オブジェクトにテキストを生成するように要求できます。しかし、テキストと日時オブジェクトは別個のものです。java.time クラスは標準の ISO 8601 を使用します 文字列を解析/生成する際のフォーマット。
String output = ldt.toString() ;
プレ>解析中。
他の形式でテキストを生成できます。
DateTimeFormatter.ofPattern
を呼び出して、独自のカスタム フォーマットを指定できます。 .通常は、DateTimeFormatter.ofLocalized…
を呼び出して自動的にフォーマットすることをお勧めします。 メソッド。これは、Stack Overflow ですでに何度も取り上げられています。詳しくは検索してください。
LocalDateTime ldt = LocalDateTime.parse( "2020-01-23T01:23:45.123456789" ) ;
プレ>java.time について
java.time フレームワークは Java 8 以降に組み込まれています。これらのクラスは、厄介な古い レガシー に取って代わります
java.util.Date
,Calendar
, &SimpleDateFormat
.詳細については、Oracle チュートリアルを参照してください。 .また、Stack Overflow で多くの例と説明を検索してください。仕様は JSR 310 です .
Joda-Time プロジェクト、メンテナンス モード になりました 、 java.time クラス。
java.time を交換できます オブジェクトをデータベースに直接送信します。 JDBC ドライバー を使用する JDBC 4.2 に準拠 またはそれ以降。文字列も
java.sql.*
も必要ありません クラス。 Hibernate 5 &JPA 2.2 サポート java.time .java.time クラスはどこで入手できますか?
- Java SE 8
、Java SE 9
、Java SE 10
、Java SE 11
、およびそれ以降 - 実装がバンドルされた標準 Java API の一部。
- Java 9 にはいくつかのマイナーな機能と修正が追加されています。
- Java SE 6
および Java SE 7
- ほとんどの java.time 機能は ThreeTen-Backport で Java 6 &7 にバックポートされています。 .
- Android
- Android の新しいバージョンでは、java.time の実装がバンドルされています。 クラス。
- 以前の Android (<26) の場合、ThreeTenABP プロジェクトは ThreeTen-Backport を適応させます (上記の通り)。 ThreeTenABP の使用方法を参照してください。 .