1. Dateoras ng klase at Unix

Sa simula pa lamang ng Java, ang wika ay may espesyal na klase para sa pagtatrabaho sa mga oras at petsa — Date. Sa paglipas ng panahon, lumitaw ang ilang higit pang mga klase para sa pagtatrabaho sa mga petsa, ngunit patuloy na ginagamit ng mga programmer ang Dateklase hanggang ngayon.

Ito ay dahil ito ay napaka-simple at maginhawa. At bilang isang programmer, tiyak na makakaharap mo ito sa anumang totoong proyekto. Kung gagamitin mo ito o hindi ay iyong pinili, ngunit dapat mong malaman ito. Kaya bigyan ito ng ilang minuto ng iyong mahalagang oras.

Ano ang nakakapagpaganda ng Dateklase? Ang pagiging simple nito.

Ang Dateklase ay nag-iimbak ng impormasyon ng petsa at oras bilang ang bilang ng mga millisecond na lumipas mula noong Enero 1, 1970. Iyon ay maraming millisecond, kaya ang longuri ay ginagamit upang iimbak ang mga ito.

Interesting.

Bakit mula noong 1970 partikular? Ito ang tinatawag na Unix time : ito ay kung paano ang Unix operating system, na siyang lolo ng lahat ng modernong operating system, ay nagpapanatili ng oras.

Ngunit napakadali mong malalaman kung gaano katagal ang lumipas sa pagitan ng dalawang petsa: ibawas lang ang isang petsa mula sa isa, at makukuha mo ang pagkakaiba ng oras sa pagitan ng mga petsa sa pinakamalapit na millisecond.

Narito ang ilang kapaki-pakinabang na halimbawa ng pakikipagtulungan sa Dateklase.


2. Pagkuha ng kasalukuyang petsa

Upang makuha ang kasalukuyang oras at petsa, lumikha lamang ng isang Datebagay. Ang bawat bagong bagay ay nag-iimbak ng oras kung kailan ito nilikha. Mukhang napakasimple:

Date current = new Date();

Pagkatapos isagawa ang utos na ito, currentmag-iimbak ang variable ng reference sa nilikhang Datebagay, na panloob na mag-iimbak ng oras ng paglikha nito — ang bilang ng mga millisecond na lumipas mula noong Enero 1, 1970.

Ipinapakita ang kasalukuyang petsa sa screen

Upang ipakita ang kasalukuyang petsa, simpleng: a) lumikha ng bagong Datebagay, b) i-print ito sa screen gamit ang System.out.println()pamamaraan.

Halimbawa:

Code Output ng console
Date current = new Date();
System.out.println(current);
Thu Feb 21 14:01:34 EET 2019

Narito ang ibig sabihin ng output ng console:

Text Interpretasyon
Huwebes rsday Huwebes
Pebrero 21 Pebrero 21
14:01:34 oras : minuto : segundo
EET Time zone: East European Time
2019 taon

3. Pagtatakda ng isang tiyak na petsa

Naisip namin kung paano makuha ang kasalukuyang oras, ngunit paano kami gagawa ng isang Datebagay na nag-iimbak ng ibang petsa o oras?

Muli, ang lahat ay simple dito. Upang magtakda ng isang tiyak na petsa, kailangan mong magsulat ng code na tulad nito:

Date birthday = new Date(year, month, day);

Ang lahat ay simple at halata, ngunit mayroong dalawang mga nuances na dapat malaman:

  1. Ang taon ay dapat bilangin mula 1900.
  2. Ang mga buwan ay binibilang mula sa zero.
Interesting.

Ito ay isa pang legacy ng Unix operating system: sa Unix, ang mga programmer ay tinukoy ang taon gamit ang dalawang digit. Sa halip na 1977, 77 lang ang isinulat nila. Kaya 77 ang tamang taon kung bibilangin natin mula 1900.

Halimbawa, ipinanganak ako noong Marso 21, 1989. Ang Marso ay ang ikatlong buwan, kaya kailangan kong isulat:

Code Output ng console
Date current = new Date(89, 2, 21);
System.out.println(current);
Tue Mar 21 00:00:00 EET 1989

Ang mga buwan ay binibilang mula sa zero, ngunit ang mga araw ay hindi. Medyo kakaiba iyon, tama ba?

Sa tingin namin, ang mga totoong programmer ay dapat na nanaig at binibilang din ang mga araw ng buwan mula sa zero. Oh, itong mga conformist 🙂

Pagtatakda ng isang tiyak na oras

Ang pagtatakda ng isang tiyak na oras ay medyo simple din: para dito, kailangan mong magsulat ng isang pahayag tulad nito:

Date birthday = new Date(year, month, day, hour, minutes, seconds);

Ang mga oras, minuto at segundo ay binibilang mula sa zero: hayaan ang programmer sa loob mo na makahinga ng maluwag.

Halimbawa:

Code Output ng console
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current);
Sat Jun 04 12:15:00 EEST 2005

Itinakda namin ang oras na 12:15 at ang petsa ng Hunyo 4, 2005 . Ito ay medyo mahirap para sa isang hindi programmer na basahin, ngunit ito ay gumagana ayon sa nararapat.


4. Paggawa gamit ang mga elemento ng isang petsa

Mas marami kang magagawa sa isang Datebagay kaysa ipakita lang ito. Mayroon itong mga pamamaraan na nagbibigay-daan sa iyong makakuha ng mga indibidwal na elemento ng internally stored na petsa:

Pamamaraan Paglalarawan
int getYear()
Ibinabalik ang taon ng petsa na may kaugnayan sa 1900.
int getMonth()
Ibinabalik ang buwan ng petsa (ang mga buwan ay binibilang mula sa zero)
int getDate()
Ibinabalik ang araw ng buwan
int getDay()
Ibinabalik ang araw ng linggo
int getHours()
Ibinabalik ang mga oras
int getMinutes()
Ibinabalik ang mga minuto
int getSeconds()
Ibinabalik ang mga segundo

Halimbawa:

Code Output ng console Tandaan
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
Hunyo
araw ng buwan
Sabado

Sa pamamagitan ng paraan, ang isang Datebagay ay hindi lamang nagbibigay-daan sa iyo na makakuha ng mga indibidwal na elemento ng isang petsa, ngunit baguhin din ang mga ito:

Pamamaraan Paglalarawan
void setYear(int year) Binabago ang taon ng petsa. Ang taon ay ipinahiwatig na may kaugnayan sa 1900.
void setMonth(int month) Binabago ang buwan ng petsa (ang mga buwan ay binibilang mula sa zero)
void setDate(int date) Binabago ang araw ng buwan
void setHours(int hours) Nagbabago ng oras
void setMinutes(int minutes) Nagbabago ng minuto
void setSeconds(int seconds) Nagbabago ng mga segundo

5. Milliseconds

Gaya ng sinabi namin dati, Dateiniimbak ng object ang bilang ng mga millisecond na lumipas mula noong Enero 1, 1970.

Kung kailangan natin ang numerong iyon, makukuha natin ito mula sa Datebagay:

long time = date.getTime();

Ibinabalik ng getTime()pamamaraan ang bilang ng mga millisecond na nakaimbak sa loob ng Datebagay.

Hindi mo lang makukuha ang bilang ng mga millisecond, ngunit maaari mo ring baguhin ang numerong iyon sa isang umiiral nang object:

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

Sa pamamagitan ng paraan, maaari mong isulat ito nang mas maigsi sa pamamagitan ng pagpasa ng oras sa Datebagay kapag ito ay nilikha:

Date date = new Date(1117876500000L);

6. Paghahambing ng mga petsa

Kung gusto mong paghambingin ang dalawang petsa at alamin kung alin ang nauna, mayroon kang tatlong pagpipilian

Ang unang paraan ay ihambing lamang ang bilang ng mga millisecond na iniimbak nila sa bawat isa:

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

Ang pangalawang paraan ay ang paggamit ng before()paraan ng isang Datebagay:

if (date1.before(date2))

Ganito ang mababasa: kung date1nauna date2, kung gayon...

Ang ikatlong paraan ay ang paggamit ng after()paraan ng isang Datebagay:

if (date2.after(date1))

Ganito ang mababasa: kung date2pagkatapos ng date1, kung gayon...


7. DateFormatklase

Tandaan, noong ipinakita namin ang petsa sa screen, may nakita kaming ganito: Thu Feb 21 14:01:34 EET 2019. Mukhang tama ang lahat, ngunit ang format ay mas kung paano ipapakita ang isang petsa para sa mga programmer kaysa sa mga normal na tao. Gusto naming ipakita ang petsa nang mas malinaw para sa mga user. Parang Tuesday, February 21.

At walang taon. O may isang taon, kung kinakailangan. Sa pangkalahatan, gusto naming maipakita ang petsa sa iba't ibang paraan.

May espesyal na klase para dito: SimpleDateFormat.

Halimbawa:

Code
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);
Output ng console
Jun-04-2005

Tingnan kung ano ang ipinakita ng programa: Jun-04-2005. Hindi na ganoon ang dati.

Ang pagkakaiba ay hindi namin ipinakita ang Datemismong bagay, ngunit isang espesyal na string na nakuha sa pamamagitan ng pagtawag sa format()pamamaraan sa isang SimpleDateFormatbagay. Ngunit hindi iyon ang pangunahing punto dito.

SimpleDateFormatKapag nilikha ang bagay, ipinasa namin ang string "MMM-dd-YYYY"bilang isang parameter. Ang string na ito ang naghahatid ng format ng petsa na sa huli ay nakita namin sa output ng console.

  • Isinasaad ng MMM na ipakita ang pangalan ng buwan, pinaikli gamit ang tatlong titik
  • dd ay nagpapahiwatig upang ipakita ang araw ng buwan
  • Isinasaad ng YYYY na ipakita ang taon gamit ang apat na digit

Kung gusto nating i-output ang buwan bilang mga numero, sa halip na MMM, kailangan nating isulat ang MM, na magbubunga ng pattern "MM-dd-YYYY". Ang output ng screen ay magiging06-04-2005

Tatalakayin natin ang klase na ito nang mas detalyado mamaya.


8. Date.parseparaan

Ang Dateklase ay maaaring gumawa ng ibang bagay na kawili-wili at kapaki-pakinabang - maaari itong makakuha ng isang petsa mula sa isang string. O, gaya ng sinasabi ng mga programmer, maaari itong mag-parse ng isang string.

Mayroon itong espesyal na parse()pamamaraan para dito. Ganito ang hitsura ng pag-parse:

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

Sa pamamagitan ng paraan, ang code na ito ay maaaring maisulat nang mas compact:

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

Isasaalang-alang namin ang pag-parse ng mga string nang mas detalyado sa iba pang mga aralin.