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.
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 |
|---|---|
|
|
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:
- Yilni 1900 dan keyin belgilash kerak.
- Oylari nol dan numeratsiya qilinadi.
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 |
|---|---|
|
|
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 |
|---|---|
|
|
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 |
|---|---|
|
Sananing yilini 1900 yildan hisoblaydi. |
|
Sananing oyini qaytaradi, oylari nol dan numeratsiya qilinadi |
|
Oyining kunini qaytaradi |
|
Haftaning kunini qaytaradi |
|
Soatlarni qaytaradi |
|
Daqiqalarni qaytaradi |
|
Soniyalarni qaytaradi |
Misol:
| Kod | Ekranga chiqish | Izoh |
|---|---|---|
|
|
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 |
|---|
|
| Ekranga chiqish |
|
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.
GO TO FULL VERSION