Date Class

All lectures for UZ purposes
Daraja, Dars
Mavjud

1. Klass Date va Unix-vaqt

Java tili ilk paydo bo'lgandan beri unda vaqt va sana bilan ishlash uchun maxsus sinf mavjud edi — Date classi. Vaqt o'tishi bilan sana bilan ishlash uchun yana bir necha sinflar paydo bo'ldi, lekin Date sinfi hanuzgacha dasturchilar tomonidan foydalaniladi.

Sababi shundaki, u juda oddiy va qulay. Siz dasturchi sifatida har qanday haqiqiy loyihada unga duch kelasiz. Uni ishlatish yoki ishlatmaslik - bu sizning tanlovingiz, lekin uni bilishingiz kerak. Shuning uchun unga qimmatbaho vaqtingizning bir necha daqiqasini ajrating.

Date sinfi nima uchun yaxshi? Soddaligi bilan.

Date sinfi sana va vaqt haqidagi ma'lumotlarni 1970 yil 1 yanvardan o'tgan millisekundlar miqdori sifatida saqlaydi. Bu juda ko'p millisekundlar, shuning uchun ularni saqlash uchun long turi ishlatiladi.

Qiziqarli

Nima uchun aynan 1970 yil? Bu "Unix-time" deb ataladi: vaqtni saqlashning Unix operatsion tizimi usuli, u barcha zamonaviy operatsion tizimlarning bobosi hisoblanadi.

Ammo ikki sana o'rtasida qancha vaqt o'tganini bilish juda oson: shunchaki bir sanani ikkinchisidan ayirishingiz kerak va bu sana orasidagi vaqt farqi millisekundgacha aniqligini beradi.

Bu erda Date sinfi bilan ishlashning bir necha foydali misollari.


2. Joriy sanani olish

Joriy vaqt va sanani olish uchun, Date turidagi ob'ektni yaratish kifoya. Har bir yangi ob'ekt uning yaratish vaqtini (momentini) saqlaydi. Bu juda sodda ko'rinadi:

Date current = new Date();

Bu buyruq bajarilgandan so'ng current o'zgaruvchisi Date ob'ektiga ishora qiladi, uning ichida u yaratilgan vaqti — 1970 yil 1 yanvardan o'tgan millisekundlar miqdori saqlanadi.

Joriy sanani ekranga chiqarish

Joriy sanani ekranga chiqarish uchun shunchaki: a) yangi Date ob'ektini yarating, b) uni System.out.println() metodi yordamida ekranga chiqarib bering.

Misol:

Kod Ekranga chiqish
Date current = new Date();
System.out.println(current);
Thu Feb 21 14:01:34 EET 2019

Ekranga chiqish quyidagicha tafsilotlarga ega:

Matn Tafsilotlar
Thursday Payshanba
February 21 21 Fevral
14:01:34 soatlar : daqiqalar : soniyalar
EET Vaqt zonasi: East European Time (sharqiy yevropa vaqti)
2019 Yil

3. Ma'lum bir sanani sozlash

Joriy vaqtni qanday olishini tushundik, lekin qanday qilib boshqa sana yoki vaqtni saqlaydigan Date ob'ektini yaratsak bo'ladi?

Bu ham juda sodda. Muayyan kunni belgilash uchun quyidagi kodni yozishingiz kerak:

Date birthday = new Date(yil, oy, kun);

Hammasi sodda va tushunarli, lekin ikkita nozik nuqta mavjud:

  1. Yilni 1900 dan keyin belgilash kerak.
  2. Oylari nol dan numeratsiya qilinadi.
Qiziqarli

Bu ham Unix operatsion tizimining merosidir: unda dasturchilar yilni ikkita raqam bilan belgilashar edi. 1977 o'rniga shunchaki 77 yozishar edi. Shuning uchun 77 1900 yilidan hisoblash bo'yicha to'g'ri yildur.

Misol uchun, men 1989 yil 21 martda tug'ilganman. Mart - uchinchi oy, demak men yozishim kerak

Kod Ekranga chiqish
Date current = new Date(89, 2, 21);
System.out.println(current);
Tue Mar 21 00:00:00 EET 1989

Oylari nol dan numeratsiya qilinadi, kunlar esa yo'q. Biroz g'alati, ha?

Agar haqiqiy dasturchilar o'zlarini majburlab, oylarning kunlarini ham nol dan numeratsiya qilsalardi. Afsus, bu mutanosiblar 🙂

Ma'lum bir vaqtni sozlash

Ma'lum bir vaqtni belgilash ham juda sodda: buning uchun quyidagi ko'rinishdagi buyruqni yozish kerak:

Date birthday = new Date(yil, oy, kun, soat, daqiqa, soniya);

Soatlar, daqiqalar va soniyalar nol dan numeratsiya qilinadi: ichingizdagi dasturchining ko'ngli tinch bo'lishi kerak.

Misol:

Kod Ekranga chiqish
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current);
Sat Jun 04 12:15:00 EEST 2005

Biz 12:15 vaqtni va 2005 yil 4 iyun sanani belgiladik. Dastur belgisi bo'lmaganlar uchun biroz qiyinroq o'qiladi, lekin kerakli tarzda ishlaydi.


4. Sananing fragmentlari bilan ishlash

Date ob'ektini shunchaki ekranga chiqarish bilan cheklanmaymiz. Uning individual sana fragmentlarini olish imkonini beruvchi methodlari mavjud:

Method Tavsifi
int getYear()
Sananing yilini 1900 yildan hisoblaydi.
int getMonth()
Sananing oyini qaytaradi, oylari nol dan numeratsiya qilinadi
int getDate()
Oyining kunini qaytaradi
int getDay()
Haftaning kunini qaytaradi
int getHours()
Soatlarni qaytaradi
int getMinutes()
Daqiqalarni qaytaradi
int getSeconds()
Soniyalarni qaytaradi

Misol:

Kod Ekranga chiqish Izoh
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current.getYear());
System.out.println(current.getMonth());
System.out.println(current.getDate());
System.out.println(current.getDay());

105
5
4
6

2005 yil
iyun
oy kunlari
shanba

Aytmoqchi, Date ob'ekti sanasining alohida fragmentlarini nafaqat olish, balki o'zgartirish ham mumkin:

Method Tavsifi
void setYear(int year) Sananing yilini o'zgartiradi. Yil 1900 yildan hisoblanadi.
void setMonth(int month) Sananing oyini o'zgartiradi, oylari nol dan numeratsiya qilinadi
void setDate(int date) Oy'sining kunini o'zgartiradi
void setHours(int hours) Soatlarni o'zgartiradi
void setMinutes(int minutes) Daqiqalarni o'zgartiradi
void setSeconds(int seconds) Soniyalarni o'zgartiradi

5. Millisekundlar

Aytilganidek, Date ob'ekti ichida 1970 yil 1 yanvardan beri o'tgan millisekundlar miqdori saqlanadi.

Agar bu bizga kerak bo‘lsa, Date ob’ektidan uni olishimiz mumkin:

long time = date.getTime();

getTime() metodi Date ob'ektidagi saqlanayotgan millisekundlar miqdorini qaytaradi.

Siz nafaqat millisekundlar miqdorini olishingiz, balki mavjud ob'ektdagi o'zgarishini ham amalga oshirishingiz mumkin:

Date date = new Date();
date.setTime(1117876500000L);

Aytgancha, ushbu tuzilmani qisqartirib yozish mumkin, vaqtni Date ob'ektiga yaratish vaqtida o'tkazish orqali:

Date date = new Date(1117876500000L);

6. Sanalarni solishtirish

Agar siz ikki sanani solishtirmoqchi bo'lsangiz va qaysi biri oldinroq bo'lganligini bilmoqchi bo'lsangiz, uchta usul mavjud

Birinchi usul — ularda saqlanayotgan millisekundlar miqdorini solishtirish:

if (date1.getTime() < date2.getTime())

Ikkinchi usul — Date ob'ektidagi before() metodini ishlatish:

if (date1.before(date2))

Bu shunday o'qiladi: agar date1 date2 dan oldin bo'lsa, demak...

Uchinchi usul — Date ob'ektidagi after() metodini ishlatish:

if (date2.after(date1))

Bu shunday o'qiladi: agar date2 date1 dan keyin bo'lsa, demak...


7. DateFormat Klass

Yodingizdami, biz sanani ekranga chiqarishda Thu Feb 21 14:01:34 EET 2019 ko'rsatdik. To'g'ri ko'rinadi, lekin bu dasturchi uchun sanani ko'rsatish usuli. Foydalanuvchi uchun sanani tushunarliroq ko'rsatishni xohlardik. Masalan Seshanba, 21 Fevral.

Va yilsiz. Yoki yili bilan, agar kerak bo'lsa. Qisqasi, sanani har xil usulda ko'rsatishni xohlardik.

Buning uchun maxsus klass mavjud — SimpleDateFormat.

Misol:

Kod
Date current = new Date(105, 5, 4, 12, 15, 0);
SimpleDateFormat formatter = new SimpleDateFormat("MMM-dd-YYYY");
String message = formatter.format(current);
System.out.println(message);
Ekranga chiqish
Jun-04-2005

Ko'ryapsizmi, dastur ekranga nima chiqardi: Jun-04-2005. Oldingilaridan umuman boshqacha.

Bularning barchasi shundan iboratki, biz Date ob'ektini emas, balki SimpleDateFormat turidagi ob'ekt yordamida olingan maxsus matnni ko'rsatdik. Ammo kalit narsa bu emas.

SimpleDateFormat ob'ekti yaratilganda, biz parameter sifatida "MMM-dd-YYYY" matnini uzatamiz. Aynan ushbu matnda siz ekranda ko'rgan sananing formati shifrlangan.

  • MMM - oyning nomini uchta harf bilan chiqarish
  • dd — oy kunini chiqarish
  • YYYY — to'rt raqamli yilni chiqarish

Agar biz oyni raqamlar ko'rinishida chiqarishni xohlasak, MMM o'rniga MM yozishimiz kerak: natijada "MM-dd-YYYY" satr hosil bo'ladi. Ekranga 06-04-2005 chiqadi

Bu sinfni batafsilroq keyinroq ko'rib chiqamiz.


8. Date.parse Metodi

Date klassi yana bir qiziqarli va foydali narsa qila oladi: matnli satrdan sanani olish. Yoki dasturchilar aytganidek, satrni tahlil qilish.

Buning uchun uning parse() metodi mavjud. Matnni tahlil qilish jarayoni quyidagicha ko'rinadi:

Date date = new Date();
date.setTime( Date.parse("Jul 06 12:15:00 2019") );

Aytgancha, bu kodni ancha qisqartirilgan holda yozish mumkin:

Date date = new Date("Jul 06 12:15:00 2019");

Satrlarni tahlil qilishni boshqa darslarda batafsil ko‘rib chiqamiz.


Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION