دو روش اصلی برای نمایش زمان وجود دارد. یک روش زمان را به شکل انسانی نمایش میدهد که به آن زمان انسانی (Human Time) گفته میشود، مانند سال، ماه، روز، ساعت، دقیقه و ثانیه. روش دیگر زمان ماشینی (Machine Time) است که زمان را بهطور پیوسته از یک نقطهی شروع به نام Epoch با دقت نانوثانیه اندازهگیری میکند. پکیج Date-Time مجموعهی غنیای از کلاسها برای نمایش تاریخ و زمان ارائه میدهد. برخی کلاسهای Date-Time API برای نمایش زمان ماشینی و برخی دیگر برای نمایش زمان انسانی مناسبتر هستند.
ابتدا مشخص کنید چه جنبههایی از تاریخ و زمان نیاز دارید، سپس کلاس یا کلاسهایی را انتخاب کنید که آن نیازها را برآورده میکنند. هنگام انتخاب یک کلاس مبتنی بر Temporal، ابتدا تصمیم بگیرید زمان انسانی یا ماشینی میخواهید نمایش دهید. سپس مشخص کنید چه جنبههایی از زمان را نیاز دارید. آیا منطقهی زمانی میخواهید؟ تاریخ و زمان؟ فقط تاریخ؟ اگر تاریخ نیاز دارید، ماه و روز و سال میخواهید یا زیرمجموعهای از آنها؟
اصطلاحشناسی: کلاسهای Date-Time API که مقادیر تاریخ یا زمان را ذخیره و پردازش میکنند، مانندInstant،LocalDateTimeوZonedDateTime، در این بخش مبتنی بر Temporal (Temporal-Based) نامیده میشوند. انواع پشتیبان مانند InterfaceTemporalAdjusterیا EnumDayOfWeekشامل این تعریف نمیشوند.
بهعنوان مثال ممکن است از شیء LocalDate برای نمایش تاریخ تولد استفاده کنید، چون بیشتر افراد تولدشان را در همان روز صرفنظر از شهر محل تولد یا نقطهی دیگر جهان جشن میگیرند. اگر زمان نجومی ردیابی میکنید، ممکن است بخواهید از شیء LocalDateTime برای نمایش تاریخ و ساعت تولد استفاده کنید، یا از ZonedDateTime که منطقهی زمانی را نیز شامل میشود. اگر Time Stamp میسازید، احتمالاً میخواهید از Instant استفاده کنید که امکان مقایسهی دو نقطهی لحظهای روی خط زمانی را فراهم میکند.
جدول زیر کلاسهای مبتنی بر Temporal در پکیج java.time را خلاصه میکند که اطلاعات تاریخ و/یا زمان ذخیره میکنند یا برای اندازهگیری مقدار زمانی قابل استفاده هستند. تیک در یک ستون نشاندهندهی استفادهی کلاس از آن نوع دادهی خاص و ستون toString() Output خروجی یک نمونه چاپشده با متد toString() را نشان میدهد. ستون Where Discussed لینکی به صفحهی مرتبط در آموزش است.
| کلاس یا Enum | محتوا | خروجی toString() | کجا مورد بحث قرار گرفت |
|---|---|---|---|
Instant | ثانیه (۱) | 2013-08-20T15:16:26.355Z | کلاس Instant |
LocalDate | سال، ماه، روز | 2013-08-20 | کلاسهای Date |
LocalDateTime | سال، ماه، روز، ساعت، دقیقه، ثانیه | 2013-08-20T08:16:26.937 | کلاسهای Date و Time |
ZonedDateTime | سال، ماه، روز، ساعت، دقیقه، ثانیه، Offset منطقهای، شناسهی منطقه | 2013-08-21T00:16:26.941+09:00[Asia/Tokyo] | کلاسهای منطقهی زمانی و Offset |
LocalTime | ساعت، دقیقه، ثانیه | 08:16:26.943 | کلاسهای Date و Time |
MonthDay | ماه، روز | --08-20 | کلاسهای Date |
Year | سال | 2013 | کلاسهای Date |
YearMonth | سال، ماه | 2013-08 | کلاسهای Date |
Month | ماه | AUGUST | Enum های DayOfWeek و Month |
OffsetDateTime | سال، ماه، روز، ساعت، دقیقه، ثانیه، Offset منطقهای | 2013-08-20T08:16:26.954-07:00 | کلاسهای منطقهی زمانی و Offset |
OffsetTime | ساعت، دقیقه، ثانیه، Offset منطقهای | 08:16:26.957-07:00 | کلاسهای منطقهی زمانی و Offset |
Duration | روز (۲)، ساعت (۲)، دقیقه (۲)، ثانیه | PT20H (۲۰ ساعت) | Period و Duration |
Period | سال، ماه، روز (۳) | P10D (۱۰ روز) | Period و Duration |
یادداشتها:
(۱): ثانیهها با دقت نانوثانیه ذخیره میشوند.
(۲): این کلاس این اطلاعات را ذخیره نمیکند، اما متدهایی برای ارائهی زمان در این واحدها دارد.
(۳): وقتی یک Period به ZonedDateTime اضافه میشود، ساعت تابستانی یا سایر تفاوتهای زمان محلی رعایت میشوند.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://dev.java/learn/