sql >> データベース >  >> RDS >> Oracle

Oracle Date形式をJavaに変換するには?

    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 クラスはどこで入手できますか?



    1. SQLサーバーでトランザクションをコミットしてロールバックする方法は?

    2. MySQL5.6のグローバルクエリタイムアウト

    3. コンボボックスアイテムを選択するときにPHPコードを実行する

    4. 結合されたテーブルで特定の条件を満たさないすべてのレコードを選択します