web-dev-qa-db-ja.com

JavaでC#のDateTime.Nowに相当する?

Javaで現在の日付を取得する方法

C#ではDateTime.Nowです。

340
mrblah

引数なしで新しいDateオブジェクトを作成するだけです。これは現在の日付と時刻を新しいオブジェクトに割り当てます。

import Java.util.Date;

Date d = new Date();

Javadoc for 引数のないコンストラクタ の言葉では、

Dateオブジェクトを割り当て、 割り当てられた時刻を表すように初期化します 最も近いミリ秒単位で測定します。

Java.util.DateではなくJava.sql.Dateを使用していることを確認してください - 後者はゼロ引数のコンストラクタを持っておらず、まったく異なる会話のトピックである、やや異なる意味を持ちます。 :)

411
delfuego

Javaの Date および Calendar クラスは、設計が不十分であると多くの人に考えられています。 Joda Time を見てください。これは、Javaの組み込み日付ライブラリーの代わりに一般的に使用されているライブラリーです。

Joda TimeのDateTime.Nowと同等のものは次のとおりです。

DateTime dt = new DateTime();

更新

コメントで述べたように、最新バージョンのJoda TimeはDateTime.now()メソッドを持っています。

DateTime dt = DateTime.now();
58
cdmckay

tl; dr

Instant.now()

Java.time

Java 8以降では、Java.util.Dateクラスは新しい Java.timeパッケージチュートリアル )によって時代遅れになりました。古いJava.util.Date/.Calendarクラスは、よく知られているように面倒で混乱しやすく、欠陥があります。避けてください。

ZonedDateTime

現在の瞬間をJava.timeで入手してください。

ZonedDateTime now = ZonedDateTime.now();

ZonedDateTime は次のものをカプセル化します。

  • 日付。
  • 1秒の何分の1から ナノ秒 までの時間の時刻。
  • タイムゾーン.

タイムゾーンが指定されていない場合は、JVMの現在のデフォルトのタイムゾーンが自動的に割り当てられます。暗黙のうちにデフォルトに頼るよりも、あなたの希望する/予想されるタイムゾーンを指定する方が良いでしょう。

ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );

UTC

一般的には、バックエンドの作業(ビジネスロジック、データベース、ストレージ、データ交換)をすべて UTC タイムゾーンで行う習慣を身に付けるのがよいでしょう。上記のコードは、JVMの現在のデフォルトタイムゾーンに暗黙的に依存しています。

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

Instant instant = Instant.now();

InstantクラスはJava.timeの基本的な構成要素クラスであり、コードの中で頻繁に使用されることがあります。

より柔軟な書式設定が必要な場合は、 OffsetDateTime に変換してください。 ZoneOffset オブジェクトを指定してください。 UTCの場合は便利な UTCの定数 を使います。

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );

タイムゾーン

ユーザーに提示するために別のタイムゾーンに簡単に調整できます。 適切なタイムゾーン名 never ESTISTなどの3〜4文字のコードを使用してください。

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );

ローカライズされた、その日時値のString表現を生成します。

String output = DateTimeFormatter
    .ofLocalizedDate( FormatStyle.FULL )
    .withLocale( Locale.CANADA_FRENCH )
    .format ( nowMontreal );

Instant

または、UTCを維持するには、 Instant を使用します。 Instantオブジェクトは、常にUTC単位で、ナノ秒の分解能までのタイムライン上の瞬間を表します。これにより、タイムゾーンの割り当てとともに、ゾーン化された日時の構成要素が提供されます。あなたはそれを概念的にこのように考えることができます:

ZonedDateTime = Instant + ZoneId

InstantからZonedDateTimeを抽出できます。

Instant instantNow = zdt.toInstant();

あなたはインスタントから始めることができます。 Instantは常にUTCであるため、ここでタイムゾーンを指定する必要はありません。

Instant now = Instant.now();
33
Basil Bourque

私はCalendarオブジェクトを使うのが好きです。

Calendar now = GregorianCalendar.getInstance()

私は一緒に仕事をする方がずっと簡単だと思います。カレンダーからDateオブジェクトを取得することもできます。

http://Java.Sun.com/javase/6/docs/api/Java/util/GregorianCalendar.html

16
ralph

Java 8では、

ZonedDateTime dateTime = ZonedDateTime.now();
14
import Java.util.Date;   
Date now = new Date();

Date オブジェクトは変更可能で、洗練されたことをしたい場合は jodatime を使用してください。

12
Chandra Patni

Java.lang.System.currentTimeMillis();は、エポック以降の日時を返します

10
user243773
import org.joda.time.DateTime;

DateTime now = DateTime.now();
6
gordy

新しいDateオブジェクトを作成すると、デフォルトで現在の時刻に設定されます。

import Java.util.Date;
Date now = new Date();
5
parkerfath

Javaは、日付と時刻の使用例に対するサポートが常に不十分です。たとえば、既存のクラス(Java.util.DateSimpleDateFormatterなど)はスレッドセーフではないため、同時実行性の問題が発生する可能性があります。また、APIには特定の欠陥があります。たとえば、Java.util.Dateの年は1900年から始まり、月は1から始まり、日は0から始まります。直感的にはわかりません。これらの問題により、Joda-Timeなどのサードパーティの日付と時刻のライブラリが人気になりました。新しい日時に対応するために、APIはJava SE 8用に設計されています。

LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);

doc :に従って

メソッドnow()は、システムクロックとデフォルトのタイムゾーンを使用して現在の日時を返します。null ではありません。デフォルトのタイムゾーンのシステムクロックから現在の日時を取得します。これはデフォルトのタイムゾーンのシステムクロックを問い合わせて現在の日時を取得します。クロックはハードコードされているため、この方法を使用するとテストに代替クロックを使用することができなくなります。

3
i_am_zero