یکی از کلاسهای اصلی Date-Time API، کلاس Instant است که شروع یک نانوثانیه روی خط زمانی (Timeline) را نمایش میدهد. این کلاس برای تولید Time Stamp جهت نمایش زمان ماشین (Machine Time) مفید است.
Instant timestamp = Instant.now();
مقدار برگردانده توسط کلاس Instant شمارش زمان را از اولین ثانیهی ۱ ژانویه ۱۹۷۰ (1970-01-01T00:00:00Z) آغاز میکند که EPOCH نیز نامیده میشود. لحظهای که قبل از Epoch رخ دهد مقدار منفی دارد و لحظهای که بعد از Epoch رخ دهد مقدار مثبت.
ثابتهای دیگر ارائهشده توسط کلاس Instant شامل MIN (کوچکترین لحظهی ممکن — دوران بسیار گذشته) و MAX (بزرگترین لحظه — دوران بسیار آینده) است.
فراخوانی toString() روی یک Instant خروجی به شکل زیر تولید میکند:
2013-05-30T23:38:23.085Z
این قالب از استاندارد ISO-8601 برای نمایش تاریخ و زمان پیروی میکند.
کلاس Instant متدهای مختلفی برای کار با یک Instant دارد. متدهای plus() و minus() برای اضافه یا کم کردن زمان استفاده میشوند. کد زیر ۱ ساعت به زمان فعلی اضافه میکند:
Instant oneHourLater = Instant.now().plus(1, ChronoUnit.HOURS);
متدهایی برای مقایسهی لحظات وجود دارد، مانند isAfter() و isBefore(). متد until() مدت زمان بین دو شیء Instant را برمیگرداند. خط کد زیر تعداد ثانیههای سپریشده از ابتدای Epoch را گزارش میدهد:
long secondsFromEpoch = Instant.ofEpochSecond(0L).until(Instant.now(),
ChronoUnit.SECONDS);
کلاس Instant با واحدهای زمانی مبتنی بر انسان مانند سال، ماه یا روز کار نمیکند. اگر بخواهید محاسباتی با این واحدها انجام دهید، میتوانید یک Instant را با یک منطقهی زمانی به کلاس دیگری مانند LocalDateTime یا ZonedDateTime تبدیل کنید. سپس میتوانید به مقدار مورد نظر با واحد دلخواه دسترسی پیدا کنید. کد زیر یک Instant را با استفاده از متد ofInstant() و منطقهی زمانی پیشفرض به شیء LocalDateTime تبدیل کرده و سپس تاریخ و زمان را به شکل خواناتری چاپ میکند:
Instant timestamp;
LocalDateTime ldt = LocalDateTime.ofInstant(timestamp, ZoneId.systemDefault());
System.out.printf("%s %d %d at %d:%d%n", ldt.getMonth(), ldt.getDayOfMonth(),
ldt.getYear(), ldt.getHour(), ldt.getMinute());
خروجی به صورت زیر خواهد بود:
MAY 30 2021 at 18:21
هر یک از شیءهای ZonedDateTime یا OffsetDateTime قابل تبدیل به شیء Instant هستند، چون هر کدام یک لحظهی دقیق روی خط زمانی را نمایش میدهند. اما عکس آن صادق نیست. تبدیل شیء Instant به ZonedDateTime یا OffsetDateTime نیاز به ارائهی اطلاعات منطقهی زمانی یا Offset دارد.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://dev.java/learn/