1. Dateklasse en Unix-tijd

Vanaf het allereerste begin van Java heeft de taal een speciale klasse gehad voor het werken met tijden en datums - Date. DateIn 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 Dateklas zo leuk? Zijn eenvoud.

De Dateklasse slaat datum- en tijdinformatie op als het aantal milliseconden dat is verstreken sinds 1 januari 1970. Dat zijn veel milliseconden, dus het longtype wordt gebruikt om ze op te slaan.

Interessant.

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 Dateklas.


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 currentslaat de variabele een verwijzing op naar het gemaakte Dateobject, 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 Dateobject te maken, b) het op het scherm af te drukken met behulp van de System.out.println()methode.

Voorbeeld:

Code Console-uitvoer
Date current = new Date();
System.out.println(current);
Thu Feb 21 14:01:34 EET 2019

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 Dateobject 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:

  1. Het jaar moet worden geteld vanaf 1900.
  2. Maanden zijn genummerd vanaf nul.
Interessant.

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
Date current = new Date(89, 2, 21);
System.out.println(current);
Tue Mar 21 00:00:00 EET 1989

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
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current);
Sat Jun 04 12:15:00 EEST 2005

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 Dateobject doen dan het alleen weergeven. Het heeft methoden waarmee u individuele elementen van de intern opgeslagen datum kunt krijgen:

Methode Beschrijving
int getYear()
Retourneert het jaar van de datum ten opzichte van 1900.
int getMonth()
Retourneert de maand van de datum (maanden worden genummerd vanaf nul)
int getDate()
Retourneert de dag van de maand
int getDay()
Retourneert de dag van de week
int getHours()
Retourneert de uren
int getMinutes()
Retourneert de minuten
int getSeconds()
Retourneert de seconden

Voorbeeld:

Code Console-uitvoer Opmerking
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 van de maand
zaterdag

Trouwens, met een Dateobject 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, Dateslaat het object het aantal milliseconden op dat is verstreken sinds 1 januari 1970.

Als we dat nummer nodig hebben, kunnen we het van het Dateobject halen:

long time = date.getTime();

De getTime()methode retourneert het aantal milliseconden dat in het Dateobject 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 Dateobject 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 Dateobject te gebruiken:

if (date1.before(date2))

Het luidt als volgt: als date1komt voor date2, dan...

De derde manier is om de after()methode van een Dateobject te gebruiken:

if (date2.after(date1))

Het luidt als volgt: als date2is na date1, dan...


7. DateFormatklasse

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
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);
Console-uitvoer
Jun-04-2005

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 Dateobject zelf hebben weergegeven, maar een speciale string die is verkregen door de format()methode op een SimpleDateFormatobject aan te roepen. Maar dat is hier niet eens het belangrijkste punt.

Toen het SimpleDateFormatobject 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, MMMmoeten 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.parsemethode

De Dateklas 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 .