1. Date
klasse en Unix-tijd
Vanaf het allereerste begin van Java heeft de taal een speciale klasse gehad voor het werken met tijden en datums - Date
. Date
In de loop van de tijd verschenen er nog meer klassen voor het werken met datums, maar programmeurs blijven de klas zelfs vandaag nog gebruiken .
Dit komt omdat het heel eenvoudig en handig is. En als programmeur zul je het zeker in elk echt project tegenkomen. Of je het wel of niet gebruikt, is jouw keuze, maar je moet het weten. Geef het dus een paar minuten van uw kostbare tijd.
Wat maakt de Date
klas zo leuk? Zijn eenvoud.
De Date
klasse slaat datum- en tijdinformatie op als het aantal milliseconden dat is verstreken sinds 1 januari 1970. Dat zijn veel milliseconden, dus het long
type wordt gebruikt om ze op te slaan.
Waarom specifiek sinds 1970? Dit is de zogenaamde Unix-tijd : zo houdt het Unix-besturingssysteem, de grootvader van alle moderne besturingssystemen, de tijd bij.
Maar je kunt heel gemakkelijk achterhalen hoeveel tijd er is verstreken tussen twee datums: trek gewoon de ene datum van de andere af en je krijgt het tijdsverschil tussen de datums tot op de dichtstbijzijnde milliseconde.
Hier zijn enkele nuttige voorbeelden van werken met de Date
klas.
2. De huidige datum ophalen
Maak gewoon een object om de huidige tijd en datum te krijgen Date
. Elk nieuw object slaat de tijd op waarop het is gemaakt. Het ziet er heel eenvoudig uit:
Date current = new Date();
Na het uitvoeren van deze opdracht current
slaat de variabele een verwijzing op naar het gemaakte Date
object, dat intern de tijd van creatie opslaat - het aantal milliseconden dat is verstreken sinds 1 januari 1970.
Weergave van de huidige datum op het scherm
Om de huidige datum weer te geven, hoeft u alleen maar: a) een nieuw Date
object te maken, b) het op het scherm af te drukken met behulp van de System.out.println()
methode.
Voorbeeld:
Code | Console-uitvoer |
---|---|
|
|
Dit is wat de console-uitvoer betekent:
Tekst | Interpretatie |
---|---|
donderdag _ | Donderdag |
21 febr | 21 februari |
14:01:34 | uren : minuten : seconden |
EET | Tijdzone: Oost-Europese Tijd |
2019 | Jaar |
3. Een specifieke datum instellen
We hebben ontdekt hoe we de huidige tijd kunnen krijgen, maar hoe maken we een Date
object dat een andere datum of tijd opslaat?
Nogmaals, alles is hier eenvoudig. Om een specifieke datum in te stellen, moet u de volgende code schrijven:
Date birthday = new Date(year, month, day);
Alles is eenvoudig en duidelijk, maar er zijn twee nuances waarmee u rekening moet houden:
- Het jaar moet worden geteld vanaf 1900.
- Maanden zijn genummerd vanaf nul.
Dit is een andere erfenis van het Unix-besturingssysteem: op Unix duidden programmeurs het jaar aan met twee cijfers. In plaats van 1977 schreven ze gewoon 77. Dus 77 is het juiste jaar als we vanaf 1900 tellen.
Ik ben bijvoorbeeld geboren op 21 maart 1989. Maart is de derde maand, dus ik moet schrijven:
Code | Console-uitvoer |
---|---|
|
|
Maanden zijn genummerd vanaf nul, maar dagen niet. Dat is een beetje vreemd, toch?
We denken dat echte programmeurs hadden moeten zegevieren en ook de dagen van de maand vanaf nul hadden moeten nummeren. Oh, deze conformisten 🙂
Een bepaalde tijd instellen
Het instellen van een specifieke tijd is ook vrij eenvoudig: hiervoor moet u een verklaring als deze schrijven:
Date birthday = new Date(year, month, day, hour, minutes, seconds);
Uren, minuten en seconden zijn genummerd vanaf nul: laat de programmeur in je opgelucht ademhalen.
Voorbeeld:
Code | Console-uitvoer |
---|---|
|
|
We zetten de tijd op 12:15 en de datum 4 juni 2005 . Dit is een beetje moeilijk voor een niet-programmeur om te lezen, maar het werkt zoals het hoort.
4. Werken met elementen van een datum
Je kunt meer met een Date
object doen dan het alleen weergeven. Het heeft methoden waarmee u individuele elementen van de intern opgeslagen datum kunt krijgen:
Methode | Beschrijving |
---|---|
|
Retourneert het jaar van de datum ten opzichte van 1900. |
|
Retourneert de maand van de datum (maanden worden genummerd vanaf nul) |
|
Retourneert de dag van de maand |
|
Retourneert de dag van de week |
|
Retourneert de uren |
|
Retourneert de minuten |
|
Retourneert de seconden |
Voorbeeld:
Code | Console-uitvoer | Opmerking |
---|---|---|
|
|
2005 juni dag van de maand zaterdag |
Trouwens, met een Date
object kun je niet alleen individuele elementen van een datum krijgen, maar ze ook wijzigen:
Methode | Beschrijving |
---|---|
void setYear(int year) |
Verandert het jaar van de datum. Het jaartal is aangegeven ten opzichte van 1900. |
void setMonth(int month) |
Verandert de maand van de datum (maanden worden genummerd vanaf nul) |
void setDate(int date) |
Verandert de dag van de maand |
void setHours(int hours) |
Verandert uren |
void setMinutes(int minutes) |
Verandert minuten |
void setSeconds(int seconds) |
Verandert seconden |
5. Milliseconden
Zoals we eerder zeiden, Date
slaat het object het aantal milliseconden op dat is verstreken sinds 1 januari 1970.
Als we dat nummer nodig hebben, kunnen we het van het Date
object halen:
long time = date.getTime();
De getTime()
methode retourneert het aantal milliseconden dat in het Date
object is opgeslagen.
U kunt niet alleen het aantal milliseconden krijgen, maar u kunt dat aantal ook wijzigen in een bestaand object:
Date date = new Date();
date.setTime(1117876500000L);
Je kunt dit trouwens nog beknopter schrijven door de tijd aan het Date
object door te geven wanneer het wordt gemaakt:
Date date = new Date(1117876500000L);
6. Datums vergelijken
Als je twee datums wilt vergelijken en wilt weten welke er eerst was, heb je drie opties
De eerste manier is om simpelweg het aantal milliseconden dat ze elk opslaan te vergelijken:
if (date1.getTime() < date2.getTime())
De tweede manier is om de before()
methode van een Date
object te gebruiken:
if (date1.before(date2))
Het luidt als volgt: als date1
komt voor date2
, dan...
De derde manier is om de after()
methode van een Date
object te gebruiken:
if (date2.after(date1))
Het luidt als volgt: als date2
is na date1
, dan...
7. DateFormat
klasse
Onthoud dat toen we de datum op het scherm lieten zien, we zoiets als dit zagen: Thu Feb 21 14:01:34 EET 2019
. Alles lijkt correct, maar het formaat is meer hoe een datum zou worden weergegeven voor programmeurs dan voor normale mensen. We willen de datum duidelijker weergeven voor gebruikers. Iets als Tuesday, February 21
.
En zonder jaartal. Of desnoods met een jaar. Over het algemeen willen we de datum op verschillende manieren kunnen weergeven.
Hiervoor is een speciale klasse: SimpleDateFormat
.
Voorbeeld:
Code |
---|
|
Console-uitvoer |
|
Kijk naar wat het programma liet zien: Jun-04-2005
. Dat is helemaal niet meer wat het was.
Het verschil is dat we niet het Date
object zelf hebben weergegeven, maar een speciale string die is verkregen door de format()
methode op een SimpleDateFormat
object aan te roepen. Maar dat is hier niet eens het belangrijkste punt.
Toen het SimpleDateFormat
object werd gemaakt, hebben we de tekenreeks "MMM-dd-YYYY"
als parameter doorgegeven. Het is deze string die het datumformaat weergeeft dat we uiteindelijk in de console-uitvoer zagen.
- MMM geeft aan dat de naam van de maand wordt weergegeven, afgekort met drie letters
- dd geeft aan dat de dag van de maand wordt weergegeven
- JJJJ geeft aan dat het jaar met vier cijfers wordt weergegeven
Als we de maand als getallen willen uitvoeren, MMM
moeten we in plaats van schrijven MM
, wat het patroon oplevert "MM-dd-YYYY"
. De schermuitvoer zal zijn06-04-2005
We zullen deze klasse later in meer detail bespreken.
8. Date.parse
methode
De Date
klas kan iets anders interessants en nuttigs doen - het kan een datum uit een string halen. Of, zoals programmeurs zeggen, het kan een string ontleden.
parse()
Hiervoor heeft het de speciale methode. Parseren ziet er als volgt uit:
Date date = new Date();
date.setTime( Date.parse("Jul 06 12:15:00 2019") );
Overigens kan deze code compacter geschreven worden:
Date date = new Date("Jul 06 12:15:00 2019");
In andere lessen gaan we dieper in op het ontleden van tekenreeksen .
GO TO FULL VERSION