بستهی java.time که در Java 8 معرفی شد، چندین کلاس برای کار با تاریخ و زمان دارد.
LocalDateکلاس java.time.LocalDate نمایندهی یک تاریخ بدون منطقهی زمانی در تقویم ISO-8601 است، مانند 2007-12-03:
LocalDate date = LocalDate.of(2007, 12, 3);
تاریخها را میتوان با تاریخهای دیگر مقایسه کرد:
LocalDate date1 = LocalDate.of(2007, 12, 3);
LocalDate date2 = LocalDate.of(2007, 12, 4);
date1.isBefore(date2);
// => true
date1.isAfter(date2);
// => false
یک نمونهی LocalDate متدهایی برای بازیابی اجزای زمان از آن دارد:
LocalDate date = LocalDate.of(2007, 12, 3);
date.getYear();
// => 2007
date.getMonthValue();
// => 12
date.getDayOfMonth();
// => 3
یک نمونهی LocalDate متدهایی برای افزودن واحدهای زمان به آن دارد.
این متدها یک نمونهی جدید LocalDate برمیگردانند و نمونهی موجود را بهروزرسانی نمیکنند، چون کلاس LocalDate تغییرناپذیر است.
LocalDate date = LocalDate.of(2007, 12, 3);
date.plusDays(3);
// => 2007-12-06
date.plusMonths(1);
// => 2008-01-03
date.plusYears(1);
// => 2008-12-03
LocalDateTimeکلاس java.time.LocalDateTime نمایندهی یک تاریخ-زمان بدون منطقهی زمانی در تقویم ISO-8601 است، مانند 2007-12-03T10:15:30:
LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
datetime.getYear();
// => 2007
datetime.getMonthValue();
// => 12
datetime.getDayOfMonth();
// => 3
datetime.getHours();
// => 10
datetime.getMinutes();
// => 15
datetime.getSeconds();
// => 30
مانند کلاس LocalDate، یک نمونهی LocalDateTime هم همان متدها را برای مقایسه با LocalDateTimeهای دیگر و افزودن واحدهای زمان به آن دارد.
همچنین میتوان یک نمونهی LocalDate را به یک LocalDateTime تبدیل کرد:
LocalDate date = LocalDate.of(2007, 12, 3);
LocalDateTime datetime = date.atTime(10, 15, 30);
datetime.toString();
// => "2007-12-03T10:15:30"
هر دو کلاس LocalDate و LocalDateTime هنگام تبدیل از و به یک String از نگارش استاندارد ISO-8601 استفاده میکنند.
LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
LocalDateTime parsed = LocalDateTime.parse("2007-12-03T10:15:30");
datetime.isEqual(parsed);
// => true
تلاش برای تجزیهی یک LocalDate یا LocalDateTime از یک String به این شکل با قالبی متفاوت امکانپذیر نیست.
در عوض، برای قالببندی تاریخها با یک قالب سفارشی، باید از java.time.format.DateTimeFormatter استفاده کنید:
DateTimeFormatter parser = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate date = LocalDate.parse("03/12/2007", formatter);
DateTimeFormatter printer = DateTimeFormatter.ofPattern("MMMM d, yyyy");
printer.format(date);
// => "December 3, 2007"
هنگام ساختن قالب سفارشی میتوان یک محیط محلی هم مشخص کرد تا قالببندی و تجزیه برای مناطق مختلف انجام شود:
DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.FRENCH).format(date);
// => décembre 3, 2007
DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.of("pt")).format(date);
// => dezembro 3, 2007