web-dev-qa-db-ja.com

javaの日時データ型

Javaで現在の日付と時刻を保持するためにどのデータ型を使用できますか?。Java Bean。

それは...ですか Java.util.Date

14
akshay

Java.util.Dateは、特定のタイムゾーンまたはカレンダーシステムへの参照なしで、時間のインスタントを表します。ただし、日付と時刻の両方を保持します。これは基本的に、Unixエポック以降のミリ秒単位の数値です。

代わりに、does両方のことを知っているJava.util.Calendarを使用できます。

個人的には強く使用することをお勧めします Joda Time これはmuchより豊富な日付/時刻APIです。 「ちょうど日付」、「ちょうど現地時間」、「現地の日付/時刻」、「インスタント」、「タイムゾーン付きの日付/時刻」などのタイプで、データをより明確に表現できます。ほとんどのタイプまた、不変です。これは、コードの明確さという点でhugeの利点です。

24
Jon Skeet
import Java.util.Date;
import Java.text.DateFormat;
import Java.text.SimpleDateFormat;

private String getDateTime() {
    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Date date = new Date();
    return dateFormat.format(date);
}
10
Rupok

Java.time

Java 8以降に組み込まれたJava.timeフレームワークは、最も古いバージョンのJavaとJoda-Timeライブラリにバンドルされた古い日時クラスの両方に取って代わります。 。Java.timeクラスはJava 6&7およびAndroidにバックポートされています。

Instantクラスは、ナノ秒の分解能でUTCのタイムライン上の瞬間を表します。

Instant instant = Instant.now();

UTCからのオフセット(時間数と可能な分と秒)を適用して、OffsetDateTimeを取得します。

ZoneOffset offset = ZoneOffset.of( "-04:00" );
OffsetDateTime odt = OffsetDateTime.ofInstant( instant , offset );

さらに良いのは、夏時間(DST)などの異常を処理するための一連のルールに加えてオフセットであるフルタイムゾーンを適用することです。

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

データベース

JDBCドライバがJava.timeクラスと直接連携するように更新されることを願っています。それまでは、Java.sqlクラスを使用して、データベースとの間で日時値を移動する必要があります。ただし、Java.sqlクラスの使用はデータベース転送の雑用に限定してください。これらをビジネスロジックに使用しないでください。古い日時クラスの一部として、それらは不十分に設計され、混乱を招き、面倒です。

古いクラスに追加された新しいメソッドを使用して、Java.timeとの間で変換を行います。探す to…およびvalueOfメソッド。

使用 Java.sql.Timestamp日時値のクラス。

Java.sql.Timestamp ts = Java.sql.Timestamp.valueOf( instant );

そして他の方向へ…

Instant instant = ts.toInstant();

日時データの場合、実質的に常にTIMESTAMP WITH TIME ZONEデータベースのテーブル列を設計するときは、WITHOUTではなくデータ型。

4
Basil Bourque

Joda-timeの推奨を+1します。単純なHello Worldの例以外のことを行う予定がある場合は、これを読むことをお勧めします。

夏時間とタイムゾーンのベストプラクティス

3
nogridbag

RDBMSまたはJDBCドライバーに依存します。

ほとんどの場合、 Java.sql.Timestamp を使用できます。ほとんどの場合、準備されたステートメントとともに:

pstmt.setTimestamp( index, new Timestamp( yourJavaUtilDateInstance.getTime() );
1
OscarRyz

私はこのインポートを使用しました:

import Java.util.Date;

そして、次のように変数を宣言しました:

Date studentEnrollementDate;
1
dmiadan

Java 8なので、 Java.time 標準ライブラリを使用する方法です。 Joda time Webページから:

Java SE 8以降、ユーザーはJava.time(JSR-310)-このプロジェクトを置き換えるJDKのコア部分に移行するように求められます。


質問に戻ります。 Java 8、使用したいと思います LocalDateTime 。日付と時刻が含まれていますが、タイムゾーンまたはUNIXエポックなどの参照ポイントを認識しません。

0
Tarrasch

カレンダーを使用できます。

     Calendar rightNow = Calendar.getInstance();

カレンダー

Date、Calendar、および関連するDate4jの代替Javaクラス

0