回答:
Date
引数なしで新しいオブジェクトを作成するだけです。これにより、現在の日付と時刻が新しいオブジェクトに割り当てられます。
import java.util.Date;
Date d = new Date();
引数なしのコンストラクターに関するJavadocの言葉で:
Dateオブジェクトを割り当て、初期化して、割り当てられた時間を表します。最も近いミリ秒単位で測定されます。
使用java.util.Date
していないことを確認してください。java.sql.Date
後者には引数なしのコンストラクタがなく、まったく異なる会話のトピックであるセマンティクスが多少異なります。:)
JavaのDateクラスとCalendarクラスは、設計が不十分であると多くの人が考えています。Javaの組み込み日付ライブラリの代わりに一般的に使用されるライブラリであるJoda Timeをご覧ください。
DateTime.Now
Joda Timeでの同等のものは次のとおりです。
DateTime dt = new DateTime();
更新
コメントで述べたように、Joda Timeの最新バージョンにはDateTime.now()
メソッドがあります。
DateTime dt = DateTime.now();
Instant.now()
java.util.Dateクラスは、Java 8以降の新しいjava.timeパッケージ(チュートリアル)によって時代遅れになっています。古いjava.util.Date/.Calendarクラスは悪名高いほど厄介で、混乱し、欠陥があります。それらを避けてください。
ZonedDateTime
java.timeで現在の瞬間を取得します。
ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime
カプセル化:
タイムゾーンが指定されていない場合、JVMの現在のデフォルトのタイムゾーンが通知なしで割り当てられます。デフォルトに暗黙的に依存するよりも、希望する/予想されるタイムゾーンを指定する方が適切です。
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
一般に、すべてUTCタイムゾーンでバックエンドの作業(ビジネスロジック、データベース、ストレージ、データ交換)を行う習慣を身に付けた方がよいでしょう。上記のコードは、JVMの現在のデフォルトのタイムゾーンに暗黙的に依存しています。
Instant
クラスはナノ秒の分解能でUTCでタイムラインの瞬間を表しています。
Instant instant = Instant.now();
Instant
クラスはjava.timeにおける基本的なビルディング・ブロック・クラスであり、あなたのコード内で頻繁に使用することができます。
より柔軟なフォーマットが必要な場合は、に変換してくださいOffsetDateTime
。ZoneOffset
オブジェクトを指定します。UTCの場合は、UTCに便利な定数を使用します。
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
ユーザーに提示するために別のタイムゾーンに簡単に調整できます。使用する適切なタイムゾーン名を、決してなど3-4文字コードEST
やIST
。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );
ローカライズされた、その日時値の文字列表現を生成します。
String output = DateTimeFormatter
.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
.format ( nowMontreal );
Instant
または、UTCに留まるには、を使用しますInstant
。Instant
オブジェクトは常にUTCで、ナノ秒の分解能に、タイムライン上の瞬間を表しています。これにより、タイムゾーンの割り当てとともに、ゾーン化された日時の構成要素が提供されます。あなたはそれを概念的にこのように考えることができます:
Instant
からを抽出できZonedDateTime
ます。
Instant instantNow = zdt.toInstant();
インスタントから始めることができます。Instant
常にUTCのように、ここでタイムゾーンを指定する必要はありません。
Instant now = Instant.now();
Calendarオブジェクトを使用することを好みます。
Calendar now = GregorianCalendar.getInstance()
作業しやすいです。カレンダーから日付オブジェクトを取得することもできます。
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
Calendar.getInstance()
Java 8では次のとおりです。
ZonedDateTime dateTime = ZonedDateTime.now();
java.lang.System.currentTimeMillis();
エポック以降の日時を返します
Javaは、日付と時刻のユースケースを常に十分にサポートしていません。たとえば、既存のクラス(java.util.Date
およびなどSimpleDateFormatter
)はスレッドセーフではないため、同時実行の問題が発生する可能性があります。また、APIには特定の欠陥があります。たとえば、年はjava.util.Date
1900から始まり、月は1から始まり、日は0から始まります。直感的ではありません。これらの問題により、などのサードパーティの日付と時刻ライブラリが人気を博しましたJoda-Time
。新しい日時に対処するために、APIはJava SE 8用に設計されています。
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
ドキュメントに従って:
このメソッド
now()
は、システムクロックとデフォルトのタイムゾーンを使用して、現在の日時を返します。nullではありません。デフォルトのタイムゾーンのシステムクロックから現在の日時を取得します。これにより、デフォルトのタイムゾーンでシステムクロックが照会され、現在の日時が取得されます。この方法を使用すると、クロックがハードコードされているため、テストに代替クロックを使用できなくなります。