HOWTO · Java

Java Date と LocalDate

このチュートリアルでは、Java での date と localdate の違いを示します。

このページの内容

このチュートリアルでは、Java での Date と LocalDate の違いを示します。

Java Date 対 LocalDate

Date クラスは Java util パッケージからのもので、LocalDate は Java の Time パッケージに追加されました。 Java では両方のクラスが日付に使用されます。 Java における Date と LocalDate の主な違いを見てみましょう。

Date LocalDate
java.util.Date は、JDK 1.0 からの Java の日付のコア API です。 java.time.LocalDate は Java の 1.8 バージョンで導入されました。
Date 形式の util パッケージも、日付とともに時刻を表示します。 LocalDate は、日付を ISO 形式 yyyy-MM-dd で表します。時間は含まれません。 主に誕生日や給料日などの日付を保存するために使用されます。
Date は、不変性とスレッド セーフを提供するために Java の 1.8 バージョンで導入されました。 LocalDate は、不変性とスレッド セーフをサポートしていません。

Java で Date と LocalDate の両方の例を試してみましょう。

Java の Date クラス

package delftstack;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;

public class Example {
  public static void main(String[] args) {
    // Create an Instant date and convert it to local date time.
    Instant Date_Instant = new Date().toInstant();
    LocalDateTime Demo_Date =
        LocalDateTime.ofInstant(Date_Instant, ZoneId.of(ZoneId.SHORT_IDS.get("PST")));
    System.out.println("The Current Date is:  " + Demo_Date);

    // Create an Instant calendar
    Instant Calendar_Instant = Calendar.getInstance().toInstant();
    System.out.println(Calendar_Instant);
    // Instance of zoneid to timezone
    ZoneId Default_TimeZone = TimeZone.getDefault().toZoneId();
    System.out.println(Default_TimeZone);

    // from specific Calendar
    ZonedDateTime Gregorian_Calendar_DateTime = new GregorianCalendar().toZonedDateTime();
    System.out.println(Gregorian_Calendar_DateTime);

    // Date API Legacy classes
    Date Date_Demo = Date.from(Instant.now());
    System.out.println(Date_Demo);

    TimeZone Time_Zone = TimeZone.getTimeZone(Default_TimeZone);
    System.out.println(Time_Zone);

    GregorianCalendar gc = GregorianCalendar.from(Gregorian_Calendar_DateTime);
    System.out.println(gc);
  }
}

上記のコードは、Java の従来の Date API を使用して、現在の日付と時刻をデフォルトおよび指定されたタイムゾーンで表示します。 出力を参照してください:

The Current Date is:  2022-09-13T00:40:09.373
2022-09-13T07:40:09.490Z
Asia/Karachi
2022-09-13T12:40:09.545+05:00[Asia/Karachi]
Tue Sep 13 12:40:09 PKT 2022
sun.util.calendar.ZoneInfo[id="Asia/Karachi",offset=18000000,dstSavings=0,useDaylight=false,transitions=12,lastRule=null]
java.util.GregorianCalendar[time=1663054809545,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Karachi",offset=18000000,dstSavings=0,useDaylight=false,transitions=12,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2022,MONTH=8,WEEK_OF_YEAR=37,WEEK_OF_MONTH=3,DAY_OF_MONTH=13,DAY_OF_YEAR=256,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=0,HOUR_OF_DAY=12,MINUTE=40,SECOND=9,MILLISECOND=545,ZONE_OFFSET=18000000,DST_OFFSET=0]

Java の LocalDate クラス

package delftstack;

import java.time.LocalDate;
import java.time.Month;
import java.time.ZoneId;

public class Example {
  public static void main(String[] args) {
    // The Current Date
    LocalDate Current_LocalDate = LocalDate.now();
    System.out.println("The Current Date is: " + Current_LocalDate);

    // The specific date Creation using LocalDate by providing input arguments
    LocalDate FirstLocalDate_2022 = LocalDate.of(2022, Month.JANUARY, 1);
    System.out.println("The Specific Date with inputs: " + FirstLocalDate_2022);

    // Trying to create a date by using Local date with invalid input
    LocalDate LocalDate_Karachi = LocalDate.now(ZoneId.of("Asia/Karachi"));
    System.out.println("The Current Date in Karachi is: " + LocalDate_Karachi);

    // Trying to Get the date from the base date (1970-10-28)
    LocalDate LocalDate_FromBase = LocalDate.ofEpochDay(300);
    System.out.println("300th day from base date: " + LocalDate_FromBase);

    LocalDate HundredDay_2022 = LocalDate.ofYearDay(2022, 100);
    System.out.println("100th day of 2022: " + HundredDay_2022);
  }
}

上記のコードは LocalDate を使用して、現在の日付、特定の日付、特定のタイムゾーンの日付、および特定の年の日付を取得します。 出力を参照してください:

The Current Date is: 2022-09-13
The Specific Date with inputs: 2022-01-01
The Current Date in Karachi is: 2022-09-13
300th day from base date: 1970-10-28
100th day of 2022: 2022-04-10

ご覧のとおり、従来の Date API は、現在または指定された時間で完全な日付を表示し、より不変性とスレッド セーフを提供するクラスのインスタンスを使用します。

一方、LocalDate は日付で時刻を表示しませんが、日付は Java の time パッケージの LocalDate クラスを使用して操作できます。