1. Date
klasse og Unix tid
Fra begyndelsen af Java har sproget haft en særlig klasse til at arbejde med tidspunkter og datoer — Date
. Med tiden dukkede flere klasser op til at arbejde med datoer, men programmører fortsætter med at bruge klassen Date
selv i dag.
Dette er fordi det er meget enkelt og praktisk. Og som programmør vil du helt sikkert støde på det i ethvert rigtigt projekt. Om du vil bruge det eller ej er dit valg, men du skal vide det. Så giv det et par minutter af din dyrebare tid.
Hvad gør Date
klassen så god? Dens enkelhed.
Klassen Date
gemmer oplysninger om dato og klokkeslæt som antallet af millisekunder, der er gået siden 1. januar 1970. Det er mange millisekunder, så typen long
bruges til at gemme dem.
Hvorfor siden 1970 specifikt? Dette er såkaldt Unix-tid : det er sådan, Unix-operativsystemet, som er bedstefar til alle moderne styresystemer, holder tiden.
Men du kan meget nemt finde ud af, hvor lang tid der er gået mellem to datoer: Træk blot den ene dato fra den anden, og du får tidsforskellen mellem datoerne til nærmeste millisekund.
Her er nogle nyttige eksempler på at arbejde med Date
klassen.
2. Henter den aktuelle dato
For at få det aktuelle klokkeslæt og dato skal du blot oprette et Date
objekt. Hvert nyt objekt gemmer tidspunktet, hvor det blev oprettet. Det ser meget simpelt ud:
Date current = new Date();
Efter at have udført denne kommando, current
vil variablen gemme en reference til det oprettede Date
objekt, som internt gemmer tidspunktet for dets oprettelse - antallet af millisekunder, der er gået siden 1. januar 1970.
Viser den aktuelle dato på skærmen
For at vise den aktuelle dato, skal du blot: a) oprette et nyt Date
objekt, b) udskrive det på skærmen ved hjælp af System.out.println()
metoden.
Eksempel:
Kode | Konsoludgang |
---|---|
|
|
Her er, hvad konsoludgangen betyder:
Tekst | Fortolkning |
---|---|
Torsdag _ | torsdag |
februar 21 | 21. februar |
14:01:34 | timer : minutter : sekunder |
EET | Tidszone: Østeuropæisk tid |
2019 | År |
3. Indstilling af en bestemt dato
Vi fandt ud af, hvordan vi får det aktuelle klokkeslæt, men hvordan opretter vi et Date
objekt, der gemmer en anden dato eller tid?
Igen, alt er enkelt her. For at indstille en bestemt dato skal du skrive kode som denne:
Date birthday = new Date(year, month, day);
Alt er enkelt og indlysende, men der er to nuancer at være opmærksom på:
- Året skal tælles fra 1900.
- Måneder er nummereret fra nul.
Dette er en anden arv fra Unix-operativsystemet: på Unix betegnede programmører året med to cifre. I stedet for 1977 skrev de blot 77. Så 77 er det rigtige år, hvis vi tæller fra 1900.
For eksempel er jeg født den 21. marts 1989. Marts er den tredje måned, så jeg skal skrive:
Kode | Konsoludgang |
---|---|
|
|
Måneder er talt fra nul, men dage er ikke Det er lidt mærkeligt, ikke?
Vi mener, at ægte programmører burde have sejret og også talt månedens dage fra nul. Åh, disse konformister 🙂
Indstilling af et bestemt tidspunkt
At indstille et bestemt tidspunkt er også ret simpelt: til dette skal du skrive en erklæring som denne:
Date birthday = new Date(year, month, day, hour, minutes, seconds);
Timer, minutter og sekunder er talt fra nul: Lad programmøren indeni dig ånde lettet op.
Eksempel:
Kode | Konsoludgang |
---|---|
|
|
Vi sætter klokken 12:15 og datoen 4. juni 2005 . Dette er lidt svært for en ikke-programmør at læse, men det fungerer som det skal.
4. Arbejde med elementer af en dato
Du kan gøre mere med et Date
objekt end blot at vise det. Det har metoder , der lader dig få individuelle elementer af den internt gemte dato:
Metode | Beskrivelse |
---|---|
|
Returnerer året for datoen i forhold til 1900. |
|
Returnerer måneden for datoen (månederne er nummereret fra nul) |
|
Returnerer dagen i måneden |
|
Returnerer ugedagen |
|
Returnerer timerne |
|
Returnerer minutterne |
|
Returnerer sekunderne |
Eksempel:
Kode | Konsoludgang | Bemærk |
---|---|---|
|
|
2005 juni dag i måneden lørdag |
Forresten giver et Date
objekt dig ikke kun mulighed for at få individuelle elementer af en dato, men også ændre dem:
Metode | Beskrivelse |
---|---|
void setYear(int year) |
Ændrer året for datoen. Året er angivet i forhold til 1900. |
void setMonth(int month) |
Ændrer måneden for datoen (månederne er nummereret fra nul) |
void setDate(int date) |
Ændrer dag i måneden |
void setHours(int hours) |
Skifter timer |
void setMinutes(int minutes) |
Ændrer minutter |
void setSeconds(int seconds) |
Skifter sekunder |
5. Millisekunder
Som vi sagde tidligere, Date
gemmer objektet antallet af millisekunder, der er forløbet siden 1. januar 1970.
Hvis vi har brug for det nummer, kan vi få det fra objektet Date
:
long time = date.getTime();
Metoden getTime()
returnerer antallet af millisekunder gemt inde i objektet Date
.
Ikke kun kan du få antallet af millisekunder, men du kan også ændre dette tal i et eksisterende objekt:
Date date = new Date();
date.setTime(1117876500000L);
Du kan i øvrigt skrive dette endnu mere kortfattet ved at overføre tiden til objektet Date
lige når det er oprettet:
Date date = new Date(1117876500000L);
6. Sammenligning af datoer
Hvis du vil sammenligne to datoer og finde ud af, hvilken der kom først, har du tre muligheder
Den første måde er simpelthen at sammenligne antallet af millisekunder, de hver især gemmer:
if (date1.getTime() < date2.getTime())
Den anden måde er at bruge before()
metoden til et Date
objekt:
if (date1.before(date2))
Det lyder sådan her: hvis date1
kommer før date2
, så...
Den tredje måde er at bruge after()
et objekts metode Date
:
if (date2.after(date1))
Det lyder sådan her: hvis date2
er efter date1
, så...
7. DateFormat
klasse
Husk, da vi viste datoen på skærmen, så vi noget som dette: Thu Feb 21 14:01:34 EET 2019
. Alt virker korrekt, men formatet er mere, hvordan en dato vil blive vist for programmører frem for normale mennesker. Vi ønsker at vise datoen mere tydeligt for brugerne. Noget som Tuesday, February 21
.
Og uden årstal. Eller med et år evt. Generelt ønsker vi at kunne vise datoen på forskellige måder.
Der er en særlig klasse til dette: SimpleDateFormat
.
Eksempel:
Kode |
---|
|
Konsoludgang |
|
Se, hvad programmet viste: Jun-04-2005
. Det var slet ikke, hvad det plejede at være.
Forskellen er, at vi ikke viste Date
selve objektet, men en speciel streng opnået ved at kalde format()
metoden på et SimpleDateFormat
objekt. Men det er ikke engang hovedpointen her.
Da SimpleDateFormat
objektet blev oprettet, sendte vi strengen ind "MMM-dd-YYYY"
som en parameter. Det er denne streng, der formidler datoformatet, som vi i sidste ende så i konsoloutputtet.
- MMM angiver at vise månedens navn, forkortet med tre bogstaver
- dd angiver at vise dagen i måneden
- YYYY angiver at vise året med fire cifre
Hvis vi vil udskrive måneden som tal, MMM
skal vi i stedet for , skrive MM
, hvilket giver mønsteret "MM-dd-YYYY"
. Skærmoutput vil være06-04-2005
Vi vil diskutere denne klasse mere detaljeret senere.
8. Date.parse
metode
Klassen Date
kan gøre noget andet interessant og nyttigt - den kan få en dato fra en streng. Eller, som programmører siger, det kan parse en streng.
Det har den specielle parse()
metode til dette. Parsing ser sådan ud:
Date date = new Date();
date.setTime( Date.parse("Jul 06 12:15:00 2019") );
Forresten kan denne kode skrives mere kompakt:
Date date = new Date("Jul 06 12:15:00 2019");
Vi vil overveje parsing af strenge mere detaljeret i andre lektioner.
GO TO FULL VERSION