1. Date
klasse 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 Date
også 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 Date
klassen så bra? Dens enkelhet.
Klassen Date
lagrer informasjon om dato og klokkeslett som antall millisekunder som har gått siden 1. januar 1970. Det er mange millisekunder, så typen long
brukes til å lagre dem.
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 Date
klassen.
2. Henter gjeldende dato
For å få gjeldende tid og dato, bare opprette et Date
objekt. Hvert nytt objekt lagrer tidspunktet da det ble opprettet. Det ser veldig enkelt ut:
Date current = new Date();
Etter å ha utført denne kommandoen, current
vil variabelen lagre en referanse til det opprettede Date
objektet, 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 Date
objekt, b) skrive det ut på skjermen ved hjelp av System.out.println()
metoden.
Eksempel:
Kode | Konsollutgang |
---|---|
|
|
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 Date
objekt 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:
- Året skal regnes fra 1900.
- Måneder er nummerert fra null.
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 |
---|---|
|
|
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 |
---|---|
|
|
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 Date
objekt enn bare å vise det. Den har metoder som lar deg få individuelle elementer av den internt lagrede datoen:
Metode | Beskrivelse |
---|---|
|
Returnerer året for datoen i forhold til 1900. |
|
Returnerer måneden for datoen (månedene er nummerert fra null) |
|
Returnerer dagen i måneden |
|
Returnerer ukedagen |
|
Returnerer timene |
|
Returnerer minuttene |
|
Returnerer sekundene |
Eksempel:
Kode | Konsollutgang | Merk |
---|---|---|
|
|
2005 juni dag i måneden lørdag |
Forresten, et Date
objekt 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, Date
lagrer 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 Date
objektet.
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 Date
rett 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 Date
objekt:
if (date1.before(date2))
Den lyder slik: hvis date1
kommer før date2
, så...
Den tredje måten er å bruke after()
metoden til et Date
objekt:
if (date2.after(date1))
Den lyder slik: hvis date2
er etter date1
, så...
7. DateFormat
klasse
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 |
---|
|
Konsollutgang |
|
Se på hva programmet viste: Jun-04-2005
. Det er slett ikke hva det pleide å være.
Forskjellen er at vi ikke viste Date
selve objektet, men en spesiell streng oppnådd ved å kalle format()
metoden på et SimpleDateFormat
objekt. Men det er ikke engang hovedpoenget her.
Når SimpleDateFormat
objektet 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, MMM
må 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.parse
metode
Klassen Date
kan 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.
GO TO FULL VERSION