Java Datum en Tijd Onder de Knie: Constructors, Methods & Best Practices
Java biedt de Date class in java.util package, die de huidige datum en tijd incapseert.
De Date class ondersteunt twee constructors:
| Nr. | Constructor & Beschrijving |
|---|---|
| 1 | Date() – Initialiseert object met huidige datum en tijd. |
| 2 | Date(long millisec) – Accepteert milliseconden sinds middernacht 1 januari 1970. |
Methodes van de Date class:
| Nr. | Methode & Beschrijving |
|---|---|
| 1 | after(Date date) – True als aanroepende Date later is dan parameter. |
| 2 | before(Date date) – True als aanroepende Date eerder is dan parameter. |
| 3 | clone() – Dupliceert Date object. |
| 4 | compareTo(Date date) – Vergelijkt: 0=gelijk, negatief=vroeger, positief=later. |
| 5 | compareTo(Object obj) – Als Date: zelfde als compareTo(Date), anders ClassCastException. |
| 6 | equals(Object date) – True als zelfde tijd en datum. |
| 7 | getTime() – Milliseconden sinds 1 januari 1970. |
| 8 | hashCode() – Hash code voor object. |
| 9 | setTime(long time) – Stelt tijd/datum in via milliseconden sinds 1-1-1970. |
| 10 | toString() – Converteert Date naar string. |
Huidige Datum en Tijd Ophalen
Eenvoudig met Date object en toString():
Voorbeeld
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
Date date = new Date();
System.out.println(date.toString());
}
}
Output
Mon May 04 09:51:52 CDT 2009
Datum Vergelijken
Drie manieren om twee datums te vergelijken:
getTime()voor milliseconden, dan waarden vergelijken.before(),after(),equals(). Bijv. 12e < 18e:new Date(99,2,12).before(new Date(99,2,18))= true.compareTo()viaComparableinterface.
Datum Formatteren met SimpleDateFormat
SimpleDateFormat is concrete class voor formatteren/parsen van datums in locale-gevoelige manier. Gebruikt user-defined patterns.
Voorbeeld
import java.util.*; import java.text.*;
public class DateDemo {
public static void main(String args[]) {
Date dNow = new Date();
SimpleDateFormat ft = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
}
}
Output
Current Date: Sun 2004.07.18 at 04:14:09 PM PDT
SimpleDateFormat Format Codes
| Karakter | Beschrijving | Voorbeeld |
|---|---|---|
| G | Era aanduiding | AD |
| y | Jaar in 4 cijfers | 2001 |
| M | Maand in jaar | July of 07 |
| d | Dag in maand | 10 |
| h | Uur in AM/PM (1-12) | 12 |
| H | Uur in dag (0-23) | 22 |
| m | Minuut in uur | 30 |
| s | Seconde in minuut | 55 |
| S | Milliseconde | 234 |
| E | Dag in week | Tuesday |
| D | Dag in jaar | 360 |
| F | Dag van week in maand | 2 (2e woensdag in juli) |
| w | Week in jaar | 40 |
| W | Week in maand | 1 |
| a | AM/PM marker | PM |
| k | Uur in dag (1-24) | 24 |
| K | Uur in AM/PM (0-11) | 10 |
| z | Tijdzone | Eastern Standard Time |
| ' | Escape voor tekst | Delimiter |
| " | Enkele quote | ` |
Datum Formatteren met printf
Met printf heel eenvoudig: twee-letter formaat beginnend met t en eindigend op letter uit tabel.
Voorbeeld
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
Date date = new Date();
String str = String.format("Current Date/Time : %tc", date);
System.out.printf(str);
}
}
Output
Current Date/Time : Sat Dec 15 16:37:57 MST 2012
Als je datum meerdere keren hoeft te leveren voor formattering, kan format string index van argument aangeven. Index volgt direct op % en eindigt met $.
Voorbeeld
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
Date date = new Date();
System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
}
}
Output
Due date: February 09, 2004
Alternatief: < flag gebruikt hetzelfde argument als vorige format specificatie.
Voorbeeld
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
Date date = new Date();
System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
}
}
Output
Due date: February 09, 2004
Datum en Tijd Conversie Karakters
| Karakter | Beschrijving | Voorbeeld |
|---|---|---|
| c | Complete datum en tijd | Mon May 04 09:51:52 CDT 2009 |
| F | ISO 8601 datum | 2004-02-09 |
| D | US formaat (maand/dag/jaar) | 02/09/2004 |
| T | 24-uurs tijd | 18:05:19 |
| r | 12-uurs tijd | 06:05:19 pm |
| R | 24-uurs tijd, geen seconden | 18:05 |
| Y | 4-cijferig jaar (met leading zeros) | 2004 |
| y | Laatste 2 cijfers jaar | 04 |
| C | Eerste 2 cijfers jaar | 20 |
| B | Volledige maandnaam | February |
| b | Afgekorte maandnaam | Feb |
| m | 2-cijferige maand | 02 |
| d | 2-cijferige dag | 03 |
| e | 2-cijferige dag (geen leading zeros) | 9 |
| A | Volledige weekdagnaam | Monday |
| a | Afgekorte weekdagnaam | Mon |
| j | 3-cijferige dag van jaar | 069 |
| H | 2-cijferig uur (00-23) | 18 |
| k | 2-cijferig uur (0-23, geen leading zeros) | 18 |
| I | 2-cijferig uur (01-12) | 06 |
| l | 2-cijferig uur (1-12, geen leading zeros) | 6 |
| M | 2-cijferige minuten | 05 |
| S | 2-cijferige seconden | 19 |
| L | 3-cijferige milliseconden | 047 |
| N | 9-cijferige nanoseconden | 047000000 |
| P | Uppercase AM/PM marker | PM |
| p | Lowercase AM/PM marker | pm |
| z | RFC 822 numerieke offset GMT | -0800 |
| Z | Tijdzone | PST |
| s | Seconden sinds 1970-01-01 GMT | 1078884319 |
| Q | Milliseconden sinds 1970-01-01 GMT | 1078884319047 |
Andere nuttige classes voor datum/tijd: raadpleeg Java standaard documentatie.
Strings Parsen naar Datums
SimpleDateFormat heeft parse() die probeert string te parsen volgens opgeslagen formaat.
Voorbeeld
import java.util.*; import java.text.*;
public class DateDemo {
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
String input = args.length == 0 ? "1818-11-11" : args[0];
System.out.print(input + " Parses as ");
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
}
Output
1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818
Wachten voor een Periode
Je kunt wachten van 1 milliseconde tot levensduur computer. Voorbeeld: 3 seconden slapen:
Voorbeeld
import java.util.*;
public class SleepDemo {
public static void main(String args[]) {
try {
System.out.println(new Date() + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date() + "\n");
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
Output
Sun May 03 18:04:41 GMT 2009 Sun May 03 18:04:51 GMT 2009
Verstreken Tijd Meten
Soms meet je tijd in milliseconden. Herschreven voorbeeld:
Voorbeeld
import java.util.*;
public class DiffDemo {
public static void main(String args[]) {
try {
long start = System.currentTimeMillis();
System.out.println(new Date() + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date() + "\n");
long end = System.currentTimeMillis();
long diff = end - start;
System.out.println("Difference is : " + diff);
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
Output
Sun May 03 18:16:51 GMT 2009 Sun May 03 18:16:57 GMT 2009 Difference is : 5993
GregorianCalendar Class
GregorianCalendar is concrete implementatie van Calendar met de normale Gregoriaanse kalender. Calendar class niet besproken; zie standaard documentatie.
getInstance() van Calendar retourneert GregorianCalendar geïnitialiseerd met huidige datum/tijd in default locale/timezone. Definieert velden: AD en BC (twee era's).
Constructors:
| Nr. | Constructor & Beschrijving |
|---|---|
| 1 | GregorianCalendar() – Default met huidige tijd, default zone/locale. |
| 2 | GregorianCalendar(int year, int month, int date) – Met gegeven datum, default zone/locale. |
| 3 | GregorianCalendar(int year, int month, int date, int hour, int minute) – Met datum/tijd, default zone/locale. |
| 4 | GregorianCalendar(int year, int month, int date, int hour, int minute, int second) – Met datum/tijd/sec, default zone/locale. |
| 5 | GregorianCalendar(Locale aLocale) – Op basis van huidige tijd, default zone, gegeven locale. |
| 6 | GregorianCalendar(TimeZone zone) – Op basis van huidige tijd, gegeven zone, default locale. |
| 7 | GregorianCalendar(TimeZone zone, Locale aLocale) – Op basis van huidige tijd, gegeven zone/locale. |
Nuttige support methodes:
| Nr. | Methode & Beschrijving |
|---|---|
| 1 | add(int field, int amount) – Voegt gesigneerde hoeveelheid tijd toe aan veld. |
| 2 | computeFields() – Converteert UTC ms naar tijd velden. |
| 3 | computeTime() – Converteert tijd velden naar UTC ms. |
| 4 | equals(Object obj) – Vergelijkt met object referentie. |
| 5 | get(int field) – Waarde voor tijd veld. |
| 6 | getActualMaximum(int field) – Max waarde veld gegeven huidige datum. |
| 7 | getActualMinimum(int field) – Min waarde veld gegeven huidige datum. |
| 8 | getGreatestMinimum(int field) – Hoogste minimum voor veld als varierend. |
| 9 | getGregorianChange() – Gregorian Calendar wijzigingsdatum. |
| 10 | getLeastMaximum(int field) – Laagste maximum voor veld als varierend. |
| 11 | getMaximum(int field) – Maximum waarde voor veld. |
| 12 | getTime() – Huidige tijd van Calendar. |
| 13 | getTimeInMillis() – Huidige tijd als long. |
| 14 | getTimeZone() – Tijdzone ophalen. |
| 15 | getMinimum(int field) – Minimum waarde voor veld. |
| 16 | hashCode() – Override hashCode. |
| 17 | isLeapYear(int year) – Is gegeven jaar schrikkeljaar? |
| 18 | roll(int field, boolean up) – Voegt/trekt 1 eenheid af van veld zonder grotere velden te wijzigen. |
| 19 | set(int field, int value) – Stelt tijd veld in op waarde. |
| 20 | set(int year, int month, int date) – Stelt jaar, maand, datum in. |
| 21 | set(int year, int month, int date, int hour, int minute) – Stelt jaar, maand, datum, uur, minuut in. |
| 22 | set(int year, int month, int date, int hour, int minute, int second) – Stelt alle in. |
| 23 | setGregorianChange(Date date) – Stelt GregorianCalendar wijzigingsdatum. |
| 24 | setTime(Date date) – Stelt huidige tijd met Date. |
| 25 | setTimeInMillis(long millis) – Stelt huidige tijd vanuit long waarde. |
| 26 | setTimeZone(TimeZone value) – Stelt tijdzone in. |
| 27 | toString() – String representatie van kalender. |
Voorbeeld
import java.util.*;
public class GregorianCalendarDemo {
public static void main(String args[]) {
String months[] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
int year;
GregorianCalendar gcalendar = new GregorianCalendar();
System.out.print("Date: ");
System.out.print(months[gcalendar.get(Calendar.MONTH)]);
System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
System.out.println(year = gcalendar.get(Calendar.YEAR));
System.out.print("Time: ");
System.out.print(gcalendar.get(Calendar.HOUR) + ":");
System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
System.out.println(gcalendar.get(Calendar.SECOND));
if(gcalendar.isLeapYear(year)) {
System.out.println("The current year is a leap year");
} else {
System.out.println("The current year is not a leap year");
}
}
}
Output
Date: Apr 22 2009 Time: 11:25:27 The current year is not a leap year
Volledige lijst constanten in Calendar class: zie standaard Java documentatie.
Java
- C# Classes & Objects: Fundamenten voor Robuuste OOP
- Huidige datum en tijd ophalen in Python: een praktische gids
- Java-variabelen en literals: een uitgebreide gids
- Java Expressies, Statements en Blokken begrijpen
- Java klassen en objecten: een praktische gids
- Java abstracte klassen en methoden: een uitgebreide gids
- Java geneste en inner classes meesteren: typen, voorbeelden en best practices
- Java Singleton patroon uitgelegd: hoe veilig te implementeren en gebruiken
- Java throw vs throws: Exception Handling meesteren met praktische voorbeelden
- Java Autoboxing en Unboxing: Praktische voorbeelden en best practices
- Java Object Serialisatie: Objecten Persisteren en Herstellen