1. Dateklasse og Unix-tid

Helt fra begynnelsen av Java har språket hatt en spesiell klasse for arbeid med tider og datoer — Date. Over tid dukket det opp flere klasser for arbeid med datoer, men programmerere fortsetter å bruke klassen Dateogså i dag.

Dette er fordi det er veldig enkelt og praktisk. Og som programmerer vil du definitivt møte det i ethvert ekte prosjekt. Om du vil bruke det eller ikke er ditt valg, men du må vite det. Så gi det noen minutter av din dyrebare tid.

Hva gjør Dateklassen så bra? Dens enkelhet.

Klassen Datelagrer informasjon om dato og klokkeslett som antall millisekunder som har gått siden 1. januar 1970. Det er mange millisekunder, så typen longbrukes til å lagre dem.

Interessant.

Hvorfor siden 1970 spesifikt? Dette er såkalt Unix-tid : det er hvordan Unix-operativsystemet, som er bestefaren til alle moderne operativsystemer, holder tiden.

Men du kan veldig enkelt finne ut hvor mye tid som har gått mellom to datoer: bare trekk den ene datoen fra den andre, så får du tidsforskjellen mellom datoene til nærmeste millisekund.

Her er noen nyttige eksempler på arbeid med Dateklassen.


2. Henter gjeldende dato

For å få gjeldende tid og dato, bare opprette et Dateobjekt. Hvert nytt objekt lagrer tidspunktet da det ble opprettet. Det ser veldig enkelt ut:

Date current = new Date();

Etter å ha utført denne kommandoen, currentvil variabelen lagre en referanse til det opprettede Dateobjektet, som internt vil lagre tidspunktet for dets opprettelse - antall millisekunder som har gått siden 1. januar 1970.

Viser gjeldende dato på skjermen

For å vise gjeldende dato, ganske enkelt: a) opprette et nytt Dateobjekt, b) skrive det ut på skjermen ved hjelp av System.out.println()metoden.

Eksempel:

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

Her er hva konsollutgangen betyr:

Tekst Tolkning
Torsdag _ Torsdag
februar 21 21. februar
14:01:34 timer : minutter : sekunder
EET Tidssone: Øst-europeisk tid
2019 År

3. Angi en bestemt dato

Vi fant ut hvordan vi får gjeldende klokkeslett, men hvordan lager vi et Dateobjekt som lagrer en annen dato eller klokkeslett?

Igjen, alt er enkelt her. For å angi en bestemt dato, må du skrive kode slik:

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

Alt er enkelt og åpenbart, men det er to nyanser å være klar over:

  1. Året skal regnes fra 1900.
  2. Måneder er nummerert fra null.
Interessant.

Dette er en annen arv fra Unix-operativsystemet: på Unix betegnet programmerere året med to sifre. I stedet for 1977 skrev de rett og slett 77. Så 77 er det riktige året hvis vi regner fra 1900.

For eksempel ble jeg født 21. mars 1989. Mars er den tredje måneden, så jeg må skrive:

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

Måneder er nummerert fra null, men dager er ikke Det er litt rart, ikke sant?

Vi mener ekte programmerere burde ha seiret og nummerert månedsdagene fra null også. Å, disse konformistene 🙂

Stille inn en bestemt tid

Å angi et bestemt tidspunkt er også ganske enkelt: for dette må du skrive en uttalelse som dette:

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

Timer, minutter og sekunder er nummerert fra null: la programmereren inni deg puste lettet ut.

Eksempel:

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

Vi setter klokken 12:15 og datoen 4. juni 2005 . Dette er litt vanskelig for en ikke-programmerer å lese, men det fungerer som det skal.


4. Arbeide med elementer av en dato

Du kan gjøre mer med et Dateobjekt enn bare å vise det. Den har metoder som lar deg få individuelle elementer av den internt lagrede datoen:

Metode Beskrivelse
int getYear()
Returnerer året for datoen i forhold til 1900.
int getMonth()
Returnerer måneden for datoen (månedene er nummerert fra null)
int getDate()
Returnerer dagen i måneden
int getDay()
Returnerer ukedagen
int getHours()
Returnerer timene
int getMinutes()
Returnerer minuttene
int getSeconds()
Returnerer sekundene

Eksempel:

Kode Konsollutgang Merk
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
juni
dag i måneden
lørdag

Forresten, et Dateobjekt lar deg ikke bare få individuelle elementer av en dato, men også endre dem:

Metode Beskrivelse
void setYear(int year) Endrer året for datoen. Året er angitt i forhold til 1900.
void setMonth(int month) Endrer måneden for datoen (månedene er nummerert fra null)
void setDate(int date) Endrer dag i måneden
void setHours(int hours) Endrer timer
void setMinutes(int minutes) Endrer minutter
void setSeconds(int seconds) Endrer sekunder

5. Millisekunder

Som vi sa tidligere, Datelagrer objektet antall millisekunder som har gått siden 1. januar 1970.

Hvis vi trenger det nummeret, kan vi få det fra objektet Date:

long time = date.getTime();

Metoden getTime()returnerer antall millisekunder som er lagret inne i Dateobjektet.

Ikke bare kan du få antall millisekunder, men du kan også endre det tallet i et eksisterende objekt:

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

Du kan forresten skrive dette enda mer konsist ved å overføre tiden til objektet Daterett når det er opprettet:

Date date = new Date(1117876500000L);

6. Sammenligning av datoer

Hvis du vil sammenligne to datoer og finne ut hvilken som kom først, har du tre alternativer

Den første måten er å ganske enkelt sammenligne antall millisekunder de hver lagrer:

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

Den andre måten er å bruke before()metoden til et Dateobjekt:

if (date1.before(date2))

Den lyder slik: hvis date1kommer før date2, så...

Den tredje måten er å bruke after()metoden til et Dateobjekt:

if (date2.after(date1))

Den lyder slik: hvis date2er etter date1, så...


7. DateFormatklasse

Husk at når vi viste datoen på skjermen, så vi noe slikt: Thu Feb 21 14:01:34 EET 2019. Alt virker riktig, men formatet er mer hvordan en dato vil bli vist for programmerere enn for vanlige mennesker. Vi ønsker å vise datoen tydeligere for brukerne. Noe sånt som Tuesday, February 21.

Og uten årstall. Eller med et år om nødvendig. Generelt ønsker vi å kunne vise datoen på forskjellige måter.

Det er en spesiell klasse for dette: SimpleDateFormat.

Eksempel:

Kode
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);
Konsollutgang
Jun-04-2005

Se på hva programmet viste: Jun-04-2005. Det er slett ikke hva det pleide å være.

Forskjellen er at vi ikke viste Dateselve objektet, men en spesiell streng oppnådd ved å kalle format()metoden på et SimpleDateFormatobjekt. Men det er ikke engang hovedpoenget her.

Når SimpleDateFormatobjektet ble opprettet, sendte vi inn strengen "MMM-dd-YYYY"som en parameter. Det er denne strengen som formidler datoformatet som vi til slutt så i konsollutgangen.

  • MMM indikerer for å vise månedens navn, forkortet med tre bokstaver
  • dd indikerer for å vise dagen i måneden
  • ÅÅÅÅ indikerer å vise året med fire sifre

Hvis vi vil skrive ut måneden som tall, MMMmå vi i stedet for , skrive MM, som gir mønsteret "MM-dd-YYYY". Skjermutgangen vil være06-04-2005

Vi vil diskutere denne klassen mer detaljert senere.


8. Date.parsemetode

Klassen Datekan gjøre noe annet interessant og nyttig - den kan få en dato fra en streng. Eller, som programmerere sier, den kan analysere en streng.

Den har den spesielle parse()metoden for dette. Parsing ser slik ut:

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

Forresten, denne koden kan skrives mer kompakt:

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

Vi vil vurdere parsing av strenger mer detaljert i andre leksjoner.