サーチ…


構文

  • Date object = new Date();
  • Date object = new Date(long date);

パラメーター

パラメータ説明
パラメータなし割り当て時間(最も近いミリ秒)を使用して新しいDateオブジェクトを作成します。
長い日付 "The epoch"(1970年1月1日、00:00:00 GMT)以降のミリ秒数に設定された時間で新しいDateオブジェクトを作成します。

備考

表現

内部的には、Java Dateオブジェクトはlongとして表されます。特定の時間( エポックと呼ばれる)からのミリ秒数です。元のJava Dateクラスにはタイムゾーンなどを扱うメソッドがありましたが、これらは新しいCalendarクラスの代わりに廃止されました。

したがって、あなたのコード内でやりたいことが特定の時間を表している場合は、Dateクラスを作成して保存することができます。ただし、人間が判読できるバージョンの日付を出力する場合は、Calendarクラスを作成します時間、分、秒、曜日、時間帯などを作成するには、その書式設定を使用します。特定のミリ秒は、異なる時間帯で異なる時間として表示されます。通常は "ローカル"のタイムゾーンに表示するが、フォーマット方法では、他のいくつかのタイムゾーンで表示する必要があることを考慮する必要があります。

また、JVMで使用されるクロックの精度は通常ミリ秒ではないことに注意してください。クロックは10ミリ秒ごとに「ティック」するだけなので、タイミングをとるとそのレベルで正確に物事を測定することに頼ることはできません。

インポートステートメント

import java.util.Date;

Dateクラスは、 java.utilパッケージからインポートできます。

あぶない

Dateインスタンスは変更可能であるため、それらを使用するとスレッドセーフなコードを書くことが困難になり、誤って内部状態への書き込みアクセスを提供する可能性があります。たとえば、以下のクラスでgetDate()メソッドを使用すると、呼び出し元はトランザクションの日付を変更できます。

public final class Transaction {
  private final Date date;

  public Date getTransactionDate() {
    return date;
  }
}

解決策は、 dateフィールドのコピーを返すか、Java 8で導入されたjava.timeの新しいAPIを使用することです。

Dateクラスのほとんどのコンストラクタメソッドは廃止されており、使用すべきではありません。ほとんどの場合、日付操作にはCalendarクラスを使用することをお勧めします。

Java 8

Javaの8は、パッケージに新しい時刻と日付のAPIを紹介しjava.time含め、 LOCALDATEにLocalTimejava.timeパッケージ内のクラスは、使いやすくなったオーバーホールされたAPIを提供します。 Java 8に書き込む場合は、この新しいAPIを使用することを強くお勧めします。 日付と時刻(java.time。*)を参照してください。

Dateオブジェクトの作成

Date date = new Date();
System.out.println(date); // Thu Feb 25 05:03:59 IST 2016

このDateオブジェクトには、このオブジェクトが作成された現在の日付と時刻が含まれます。

Calendar calendar = Calendar.getInstance();
calendar.set(90, Calendar.DECEMBER, 11);
Date myBirthDate = calendar.getTime();
System.out.println(myBirthDate); // Mon Dec 31 00:00:00 IST 1990

Dateオブジェクトは、データコンストラクタの使用が廃止予定で推奨されていないため、 Calendarインスタンスを通じて作成するのが最適です。これを行うには、FactoryメソッドからCalendarクラスのインスタンスを取得する必要があります。次に、数字を使用して年、月、日を設定できます。また、カレンダークラスで提供される定数の場合は、読みやすさを向上させ、エラーを減らすことができます。

calendar.set(90, Calendar.DECEMBER, 11, 8, 32, 35);
Date myBirthDatenTime = calendar.getTime();
System.out.println(myBirthDatenTime); // Mon Dec 31 08:32:35 IST 1990

日付とともに、時間、分、秒の順に時間を渡すこともできます。

Dateオブジェクトの比較

カレンダー、日付、ローカル日付

Java SE 8

before、after、compareToおよびequalsメソッド

//Use of Calendar and Date objects    
final Date today = new Date();
final Calendar calendar = Calendar.getInstance();
calendar.set(1990, Calendar.NOVEMBER, 1, 0, 0, 0);
Date birthdate = calendar.getTime();

final Calendar calendar2 = Calendar.getInstance();
calendar2.set(1990, Calendar.NOVEMBER, 1, 0, 0, 0);
Date samebirthdate = calendar2.getTime();

//Before example
System.out.printf("Is %1$tF before %2$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.before(birthdate)));
System.out.printf("Is %1$tF before %1$tF? %3$b%n", today, today, Boolean.valueOf(today.before(today)));
System.out.printf("Is %2$tF before %1$tF? %3$b%n", today, birthdate, Boolean.valueOf(birthdate.before(today)));

//After example
System.out.printf("Is %1$tF after %2$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.after(birthdate)));
System.out.printf("Is %1$tF after %1$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.after(today)));
System.out.printf("Is %2$tF after %1$tF? %3$b%n", today, birthdate, Boolean.valueOf(birthdate.after(today)));

//Compare example
System.out.printf("Compare %1$tF to %2$tF: %3$d%n", today, birthdate, Integer.valueOf(today.compareTo(birthdate)));
System.out.printf("Compare %1$tF to %1$tF: %3$d%n", today, birthdate, Integer.valueOf(today.compareTo(today)));
System.out.printf("Compare %2$tF to %1$tF: %3$d%n", today, birthdate, Integer.valueOf(birthdate.compareTo(today)));

//Equal example
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.equals(birthdate)));
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", birthdate, samebirthdate,
            Boolean.valueOf(birthdate.equals(samebirthdate)));
System.out.printf(
            "Because birthdate.getTime() -> %1$d is different from samebirthdate.getTime() -> %2$d, there are millisecondes!%n",
            Long.valueOf(birthdate.getTime()), Long.valueOf(samebirthdate.getTime()));

//Clear ms from calendars
calendar.clear(Calendar.MILLISECOND);
calendar2.clear(Calendar.MILLISECOND);
birthdate = calendar.getTime();
samebirthdate = calendar2.getTime();

System.out.printf("Is %1$tF equal to %2$tF after clearing ms? %3$b%n", birthdate, samebirthdate,
            Boolean.valueOf(birthdate.equals(samebirthdate)));
Java SE 8

isBefore、isAfter、compareToおよびequalsメソッド

//Use of LocalDate
final LocalDate now = LocalDate.now();
final LocalDate birthdate2 = LocalDate.of(2012, 6, 30);
final LocalDate birthdate3 = LocalDate.of(2012, 6, 30);

//Hours, minutes, second and nanoOfsecond can also be configured with an other class LocalDateTime
//LocalDateTime.of(year, month, dayOfMonth, hour, minute, second, nanoOfSecond);

//isBefore example
System.out.printf("Is %1$tF before %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isBefore(birthdate2)));
System.out.printf("Is %1$tF before %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isBefore(now)));
System.out.printf("Is %2$tF before %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(birthdate2.isBefore(now)));

//isAfter example
System.out.printf("Is %1$tF after %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isAfter(birthdate2)));
System.out.printf("Is %1$tF after %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isAfter(now)));
System.out.printf("Is %2$tF after %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(birthdate2.isAfter(now)));

//compareTo example
System.out.printf("Compare %1$tF to %2$tF %3$d%n", now, birthdate2, Integer.valueOf(now.compareTo(birthdate2)));
System.out.printf("Compare %1$tF to %1$tF %3$d%n", now, birthdate2, Integer.valueOf(now.compareTo(now)));
System.out.printf("Compare %2$tF to %1$tF %3$d%n", now, birthdate2, Integer.valueOf(birthdate2.compareTo(now)));

//equals example
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.equals(birthdate2)));
System.out.printf("Is %1$tF to %2$tF? %3$b%n", birthdate2, birthdate3, Boolean.valueOf(birthdate2.equals(birthdate3)));

//isEqual example
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isEqual(birthdate2)));
System.out.printf("Is %1$tF to %2$tF? %3$b%n", birthdate2, birthdate3, Boolean.valueOf(birthdate2.isEqual(birthdate3)));

Java 8より前の日付比較

Javaの8の前に、日付を使用して比較することができjava.util.Calendarのjava.util.Dateクラスを。日付クラスは日付を比較する4つのメソッドを提供します:

afterbeforecompareToおよびequalsメソッドは、各日付のgetTime()メソッドによって返された値を比較します。

compareToメソッドは正の整数を返します。

  • 0より大きい値:DateがDate引数の後にある場合
  • 0より大きい値:DateがDate引数の前にある場合
  • 値が0の場合:DateがDate引数と等しい場合

equals例に示すように、明示的に与えられていない場合の値は、ミリ秒のように、同じ値で初期化されていないため、結果は驚くべきであることができます。

Java 8以降

Java 8では、Dateを操作する新しいObjectはjava.time.LocalDateで利用できます。 LocalDate実装ChronoLocalDate 、年表、またはカレンダーシステムは、プラグイン可能である日付の抽象表現。

日付精度の精度を得るためには、Object java.time.LocalDateTimeを使用する必要があります。 LocalDateLocalDateTimeは同じメソッド名を比較に使用します。

LocalDateを使用して日付を比較することは、 LocalDateを使用するLocalDateとは異なりChronoLocalDateなぜなら、年表やカレンダーシステムは最初のものを考慮に入れていないからです。

ほとんどのアプリケーションでLocalDateを使用する必要があるため、 ChronoLocalDateは例には含まれていません。 ここでさらに読む。

ほとんどのアプリケーションでは、この[ChronoLocalDate]インターフェイスではなく、メソッドシグネチャ、フィールドおよび変数をLocalDateとして宣言する必要があります。

LocalDateは、日付を比較する5つのメソッドがあります。

LocalDateパラメータの場合、 isAfterisBeforeisEqualequals 、およびcompareToは、このメソッドを使用します。

int compareTo0(LocalDate otherDate) {
    int cmp = (year - otherDate.year);
    if (cmp == 0) {
        cmp = (month - otherDate.month);
        if (cmp == 0) {
            cmp = (day - otherDate.day);
        }
    }
    return cmp;
}

isEqual直接compareTo0を呼び出すのに対し、パラメータ参照が日付に最初に等しい場合equalsメソッドのチェックにequals

ChronoLocalDate他のクラスのインスタンスのChronoLocalDate 、日付はEpoch Dayを使用して比較されます。エポック日数は、0日が1970-01-01(ISO)の単純な増分カウントです。

日付を特定の文字列形式に変換する

SimpleDateFormatクラスのformat()は、指定されたパターン文字列を使用して、 Dateオブジェクトを特定のフォーマットのStringオブジェクトに変換するのに役立ちます

Date today = new Date();
    
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yy"); //pattern is specified here
System.out.println(dateFormat.format(today)); //25-Feb-16 

applyPattern()を使用すると、パターンを再度適用できます。

dateFormat.applyPattern("dd-MM-yyyy");
System.out.println(dateFormat.format(today)); //25-02-2016

dateFormat.applyPattern("dd-MM-yyyy HH:mm:ss E");
System.out.println(dateFormat.format(today)); //25-02-2016 06:14:33 Thu

注:ここで、 mm (小文字のm)は分を表し、 MM (大文字のM)は月を表します。小文字の "y"( y )は年を表し、大文字の "Y"( Y )は "今年の週"を表します。

文字列を日付に変換する

SimpleDateFormatクラスのparse()は、 StringパターンをDateオブジェクトに変換するのに役立ちます。

DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.US);
String dateStr = "02/25/2016"; // input String
Date date = dateFormat.parse(dateStr);
System.out.println(date.getYear()); // 116

テキスト形式には4つの異なるスタイルがあり、 SHORTMEDIUM (これがデフォルト)、 LONGFULL (すべてロケールに依存します)。ロケールが指定されていない場合、システムのデフォルトロケールが使用されます。

スタイル Locale.US Locale.France
ショート 6/30/09 30/06/09
2009年6月30日 2009年6月30日
長いです 2009年6月30日 2009年6月30日
FULL 2009年6月30日火曜日 mardi 2009年6月30日

基本的な日付出力

文字列yyyy/MM/dd hh:mm.ssの形式で次のコードを使用すると、次の出力が表示されます。

2016/04/19 11:45.36

// define the format to use
String formatString = "yyyy/MM/dd hh:mm.ss";

// get a current date object
Date date = Calendar.getInstance().getTime();

// create the formatter
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formatString);

// format the date
String formattedDate = simpleDateFormat.format(date);

// print it
System.out.println(formattedDate);


// single-line version of all above code
System.out.println(new SimpleDateFormat("yyyy/MM/dd hh:mm.ss").format(Calendar.getInstance().getTime()));

日付の書式付き文字列表現をDateオブジェクトに変換する

このメソッドを使用すると、日付の書式設定された文字列表現をDateオブジェクトに変換できます。

    /**
     * Parses the date using the given format.
     *
     * @param formattedDate the formatted date string
     * @param dateFormat the date format which was used to create the string.
     * @return the date
     */
    public static Date parseDate(String formattedDate, String dateFormat) {
        Date date = null;
        SimpleDateFormat objDf = new SimpleDateFormat(dateFormat);
        try {
          date = objDf.parse(formattedDate);
        } catch (ParseException e) {
          // Do what ever needs to be done with exception.
        }
        return date;
    }

特定の日付の作成

JavaのDateクラスにはいくつかのコンストラクタがありますが、ほとんどのものは廃止予定です。 Dateインスタンスを直接作成するための唯一の受け入れ可能な方法は、空のコンストラクタを使用するか、long(標準ベース時間からミリ秒数)を渡すことです。現在の日付を探している場合や、別のDateインスタンスを既に持っている場合を除き、どちらも便利です。

新しい日付を作成するには、Calendarインスタンスが必要です。そこから、Calendarインスタンスを必要な日付に設定できます。

Calendar c = Calendar.getInstance();

現在の時刻に設定された新しいCalendarインスタンスを返します。カレンダーには、日付と時刻を変更する方法や、完全に設定する方法があります。この場合は、特定の日付に設定します。

c.set(1974, 6, 2, 8, 0, 0);
Date d = c.getTime();

getTimeメソッドは、必要なDateインスタンスを返します。カレンダーセットメソッドは1つ以上のフィールドのみを設定し、それらはすべて設定しないことに注意してください。つまり、年を設定すると、他のフィールドは変更されません。

落とし穴

多くの場合、このコードスニペットは目的を果たしますが、日付/時刻の2つの重要な部分は定義されていないことに注意してください。

  • (1974, 6, 2, 8, 0, 0) 1974,6,2,8,0,0 (1974, 6, 2, 8, 0, 0)パラメータは、デフォルトのタイムゾーン内で解釈され、別の場所で定義され、
  • ミリ秒はゼロに設定されず、カレンダーインスタンスの作成時にシステムクロックから入力されます。

Java 8のLocalDateオブジェクトとLocalDateTimeオブジェクト

Dateオブジェクト特定の曜日と時刻の両方を表すため、DateオブジェクトとLocalDateオブジェクト 正確には変換できません 。LocalDateオブジェクトには時間またはタイムゾーン情報が含まれていません。ただし、時間情報ではなく実際の日付情報のみを気にする場合は、2つの間で変換すると便利です。

LocalDateを作成します。

// Create a default date
LocalDate lDate = LocalDate.now();

// Creates a date from values
lDate = LocalDate.of(2017, 12, 15);
    
// create a date from string
lDate = LocalDate.parse("2017-12-15");

// creates a date from zone
LocalDate.now(ZoneId.systemDefault());

LocalDateTimeを作成します。

// Create a default date time
LocalDateTime lDateTime = LocalDateTime.now();

// Creates a date time from values
lDateTime = LocalDateTime.of(2017, 12, 15, 11, 30);

// create a date time from string
lDateTime = LocalDateTime.parse("2017-12-05T11:30:30");

// create a date time from zone 
LocalDateTime.now(ZoneId.systemDefault());

LocalDate to Dateおよびその逆

Date date = Date.from(Instant.now());
ZoneId defaultZoneId = ZoneId.systemDefault();

// Date to LocalDate
LocalDate localDate = date.toInstant().atZone(defaultZoneId).toLocalDate();

// LocalDate to Date
Date.from(localDate.atStartOfDay(defaultZoneId).toInstant());

LocalDateTimeをDateに、またはその逆にします。

Date date = Date.from(Instant.now());
ZoneId defaultZoneId = ZoneId.systemDefault();

// Date to LocalDateTime
LocalDateTime localDateTime =  date.toInstant().atZone(defaultZoneId).toLocalDateTime();

// LocalDateTime to Date
Date out = Date.from(localDateTime.atZone(defaultZoneId).toInstant());

タイムゾーンとjava.util.Date

java.util.Dateオブジェクトにタイムゾーンの概念がありません

  • 日付のタイムゾーンを設定する方法はありません
  • Dateオブジェクトのタイムゾーンを変更する方法はありません
  • new Date()デフォルトコンストラクタで作成されたDateオブジェクトは、システムのデフォルトタイムゾーンの現在の時刻で初期化されます

ただし、 java.text.SimpleDateFormatを使用すると、Dateオブジェクトで記述された特定の時刻で表される日付を別のタイムゾーンに表示することができます。

Date date = new Date();
//print default time zone
System.out.println(TimeZone.getDefault().getDisplayName());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //note: time zone not in format!
//print date in the original time zone
System.out.println(sdf.format(date));
//current time in London
sdf.setTimeZone(TimeZone.getTimeZone("Europe/London"));
System.out.println(sdf.format(date));

出力:

Central European Time
2016-07-21 22:50:56
2016-07-21 21:50:56

java.util.Dateをjava.sql.Dateに変換する

通常、 java.util.Dateからjava.sql.Dateへの変換は、Dateオブジェクトをデータベースに書き込む必要がある場合に必要です。

java.sql.Dateはミリ秒単位のラッパーで、 JDBCによってSQL DATE型を識別するために使用されJDBC

次の例では、 java.util.Date()コンストラクタを使用して、Dateオブジェクトを作成し、それを初期化して最も近いミリ秒までの時間を表します。この日付は、 java.sql.Dateオブジェクトを返すconvert(java.util.Date utilDate)メソッドで使用されます。

public class UtilToSqlConversion {
    
    public static void main(String args[])
    {
        java.util.Date utilDate = new java.util.Date();
        System.out.println("java.util.Date is : " + utilDate);
        java.sql.Date sqlDate = convert(utilDate);
        System.out.println("java.sql.Date is : " + sqlDate);
        DateFormat df = new SimpleDateFormat("dd/MM/YYYY - hh:mm:ss");
        System.out.println("dateFormated date is : " + df.format(utilDate));
    }

    private static java.sql.Date convert(java.util.Date uDate) {
        java.sql.Date sDate = new java.sql.Date(uDate.getTime());
        return sDate;
    }

}

出力

java.util.Date is : Fri Jul 22 14:40:35 IST 2016
java.sql.Date is : 2016-07-22
dateFormated date is : 22/07/2016 - 02:40:35

java.util.Dateは日付と時刻の両方の情報がありjava.sql.Dateが、 java.sql.Dateは日付情報しかありません

現地時間

Dateの時間部分だけを使用するには、LocalTimeを使用します。いくつかの方法でLocalTimeオブジェクトをインスタンス化できます

  1. LocalTime time = LocalTime.now();
  2. time = LocalTime.MIDNIGHT;
  3. time = LocalTime.NOON;
  4. time = LocalTime.of(12, 12, 45);

LocalTimeはtoStringメソッドが組み込まれているので、フォーマットを非常にうまく表示できます。

System.out.println(time); 

LocalTimeオブジェクトから時間、分、秒、およびナノ秒を取得、加算、減算することもできます。

time.plusMinutes(1);
time.getMinutes();
time.minusMinutes(1);

次のコードを使用してDateオブジェクトに変換できます。

LocalTime lTime = LocalTime.now();
Instant instant = lTime.atDate(LocalDate.of(A_YEAR, A_MONTH, A_DAY)).
        atZone(ZoneId.systemDefault()).toInstant();
Date time = Date.from(instant);

このクラスはアラームクラスをシミュレートするためのタイマークラス内で非常にうまく動作します。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow