Verkrijg de huidige datum vóór Java 8

1. Inleiding

In oudere systemen moeten we mogelijk met datums werken als noch de nieuwe datum- en tijd-API, noch de sterk aanbevolen Joda-Time-bibliotheek beschikbaar is.

In deze korte tutorial gaan we verschillende benaderingen bekijken om te zien hoe u de huidige datum kunt krijgen in pre-Java 8-systemen.

2. Systeemtijd

Als alles wat we nodig hebben een enkele numerieke waarde is die de huidige datum en tijd vertegenwoordigt, kunnen we de systeemtijd gebruiken. Om het aantal milliseconden te krijgen dat sindsdien is verstreken 1 januari 1970 00:00:00 GMT we kunnen de currentTimeMillis methode die een lang:

long elapsedMilliseconds = System.currentTimeMillis ();

Als we de verstreken tijd nauwkeuriger willen meten, kunnen we de nanoTime methode. Dit retourneert de waarde van nanoseconden die zijn verstreken vanaf een vast maar willekeurig moment.

Deze willekeurige tijd is hetzelfde voor alle aanroepen binnen de JVM, dus de geretourneerde waarde is alleen nuttig voor het berekenen van het verschil in verstreken nanoseconden tussen meerdere aanroepen van nanoTime:

long elapsedNanosecondsStart = System.nanoTime (); long elapsedNanoseconds = System.nanoTime () - elapsedNanosecondsStart;

3. Het java.util Pakket

Met behulp van klassen uit de java.util pakket, kunnen we een moment in de tijd vertegenwoordigen, meestal in de milliseconden die sindsdien zijn verstreken 1 januari 1970 00:00:00 GMT.

3.1. java.util.Date

We kunnen een specifieke datum en tijd weergeven door een Datum voorwerp. Dit bevat een precisie van milliseconden en de tijdzone-informatie.

Hoewel er veel constructors beschikbaar zijn, is de eenvoudigste manier om een Datum object dat de huidige datum in de lokale tijdzone vertegenwoordigt, is om de basisconstructor te gebruiken:

Datum currentUtilDate = nieuwe datum ();

Laten we nu een Datum object voor een specifieke datum en tijd. We zouden de bovengenoemde constructors kunnen gebruiken en eenvoudig de millisecondenwaarde kunnen doorgeven.

Als alternatief kunnen we de SimpleDateFormat class om een Draad waarde naar een werkelijke Datum voorwerp:

SimpleDateFormat dateFormatter = nieuwe SimpleDateFormat ("dd-MM-jjjj HH: mm: ss"); Datum customUtilDate = dateFormatter.parse ("30-01-2020 10:11:12");

We kunnen een breed scala aan datumpatronen gebruiken om aan onze behoeften te voldoen.

3.2. java.util.Calendar

EEN Kalender object kan doen wat een Datum doet, en het is beter voor rekenkundige berekeningen op datum, omdat het ook een Locale. We kunnen de Locale als geografische, politieke of culturele regio.

Om de huidige datum te krijgen, zonder Tijdzone of Locale opgegeven, kunnen we de getInstance methode:

Kalender currentUtilCalendar = Calendar.getInstance ();

En voor Kalender naar Datum conversie, kunnen we gewoon de krijg tijd methode:

Datum currentDate = Calendar.getInstance (). GetTime ();

Als een leuk feit is de Gregoriaanse kalender class is de implementatie van de meest gebruikte kalender ter wereld.

4. Het java.sql Pakket

Vervolgens gaan we drie uitbreidingen van de java.util.Date klasse die de equivalente SQL-objecten vertegenwoordigt.

4.1. java.sql.Datum

Met een java.sql.Datum voorwerp, we hebben geen toegang tot tijdzonegegevens en de precisie wordt afgekapt op dagniveau. Om vandaag weer te geven, kunnen we de constructor gebruiken die een lang weergave van milliseconden:

Datum currentSqlDate = nieuwe datum (System.currentTimeMillis ());

Net als voorheen kunnen we voor een specifieke datum de SimpleDateFormat class om te zetten naar een java.util.Date eerst en haal dan de milliseconden op met behulp van de krijg tijd methode. Vervolgens kunnen we deze waarde doorgeven aan de java.sql.Datum constructeur.

We kunnen gewoon de waarde van methode wanneer de Draad vertegenwoordiging van een Datum komt overeen met de jjjj- [m] m- [d] d patroon:

Datum customSqlDate = Date.valueOf ("2020-01-30");

4.2. java.sql.Time

De java.sql.Time object aanbiedingen toegang tot de uur-, minuut- en seconde-informatie - nogmaals, zonder toegang tot een tijdzone. Laten we de stroom bekijken Tijd met behulp van milliseconden weergave:

Tijd currentSqlTime = nieuwe tijd (System.currentTimeMillis ());

Om een ​​tijd op te geven met de waarde van methode, kunnen we een waarde doorgeven die overeenkomt met de uu: mm: ss patroon:

Tijd customSqlTime = Time.valueOf ("10:11:12");

4.3. java.sql.Timestamp

In deze laatste sectie combineren we beide SQL Datum en Tijd informatie met behulp van de Tijdstempel klasse. Hierdoor kunnen we hebben precisie tot op nanoseconden.

Laten we een Tijdstempel object door nogmaals een lang waarde voor het huidige aantal milliseconden naar de constructor:

Tijdstempel currentSqlTimestamp = nieuwe tijdstempel (System.currentTimeMillis ());

Laten we tot slot een nieuwe gewoonte maken Tijdstempel de ... gebruiken waarde van methode met de vereiste jjjj- [m] m- [d] d uu: mm: ss [.f…] patroon:

Tijdstempel customSqlTimestamp = Timestamp.valueOf ("2020-1-30 10: 11: 12.123456789");

5. Conclusie

In deze korte tutorial hebben we gezien hoe we de huidige datum en de datum voor een bepaald moment kunnen krijgen zonder het gebruik van Java 8 of externe bibliotheken.

Zoals altijd is de code voor het artikel beschikbaar op GitHub.