Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

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
1Date() – Initialiseert object met huidige datum en tijd.
2Date(long millisec) – Accepteert milliseconden sinds middernacht 1 januari 1970.

Methodes van de Date class:

Nr.Methode & Beschrijving
1after(Date date) – True als aanroepende Date later is dan parameter.
2before(Date date) – True als aanroepende Date eerder is dan parameter.
3clone() – Dupliceert Date object.
4compareTo(Date date) – Vergelijkt: 0=gelijk, negatief=vroeger, positief=later.
5compareTo(Object obj) – Als Date: zelfde als compareTo(Date), anders ClassCastException.
6equals(Object date) – True als zelfde tijd en datum.
7getTime() – Milliseconden sinds 1 januari 1970.
8hashCode() – Hash code voor object.
9setTime(long time) – Stelt tijd/datum in via milliseconden sinds 1-1-1970.
10toString() – 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() via Comparable interface.

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

KarakterBeschrijvingVoorbeeld
GEra aanduidingAD
yJaar in 4 cijfers2001
MMaand in jaarJuly of 07
dDag in maand10
hUur in AM/PM (1-12)12
HUur in dag (0-23)22
mMinuut in uur30
sSeconde in minuut55
SMilliseconde234
EDag in weekTuesday
DDag in jaar360
FDag van week in maand2 (2e woensdag in juli)
wWeek in jaar40
WWeek in maand1
aAM/PM markerPM
kUur in dag (1-24)24
KUur in AM/PM (0-11)10
zTijdzoneEastern Standard Time
'Escape voor tekstDelimiter
"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

KarakterBeschrijvingVoorbeeld
cComplete datum en tijdMon May 04 09:51:52 CDT 2009
FISO 8601 datum2004-02-09
DUS formaat (maand/dag/jaar)02/09/2004
T24-uurs tijd18:05:19
r12-uurs tijd06:05:19 pm
R24-uurs tijd, geen seconden18:05
Y4-cijferig jaar (met leading zeros)2004
yLaatste 2 cijfers jaar04
CEerste 2 cijfers jaar20
BVolledige maandnaamFebruary
bAfgekorte maandnaamFeb
m2-cijferige maand02
d2-cijferige dag03
e2-cijferige dag (geen leading zeros)9
AVolledige weekdagnaamMonday
aAfgekorte weekdagnaamMon
j3-cijferige dag van jaar069
H2-cijferig uur (00-23)18
k2-cijferig uur (0-23, geen leading zeros)18
I2-cijferig uur (01-12)06
l2-cijferig uur (1-12, geen leading zeros)6
M2-cijferige minuten05
S2-cijferige seconden19
L3-cijferige milliseconden047
N9-cijferige nanoseconden047000000
PUppercase AM/PM markerPM
pLowercase AM/PM markerpm
zRFC 822 numerieke offset GMT-0800
ZTijdzonePST
sSeconden sinds 1970-01-01 GMT1078884319
QMilliseconden sinds 1970-01-01 GMT1078884319047

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
1GregorianCalendar() – Default met huidige tijd, default zone/locale.
2GregorianCalendar(int year, int month, int date) – Met gegeven datum, default zone/locale.
3GregorianCalendar(int year, int month, int date, int hour, int minute) – Met datum/tijd, default zone/locale.
4GregorianCalendar(int year, int month, int date, int hour, int minute, int second) – Met datum/tijd/sec, default zone/locale.
5GregorianCalendar(Locale aLocale) – Op basis van huidige tijd, default zone, gegeven locale.
6GregorianCalendar(TimeZone zone) – Op basis van huidige tijd, gegeven zone, default locale.
7GregorianCalendar(TimeZone zone, Locale aLocale) – Op basis van huidige tijd, gegeven zone/locale.

Nuttige support methodes:

Nr.Methode & Beschrijving
1add(int field, int amount) – Voegt gesigneerde hoeveelheid tijd toe aan veld.
2computeFields() – Converteert UTC ms naar tijd velden.
3computeTime() – Converteert tijd velden naar UTC ms.
4equals(Object obj) – Vergelijkt met object referentie.
5get(int field) – Waarde voor tijd veld.
6getActualMaximum(int field) – Max waarde veld gegeven huidige datum.
7getActualMinimum(int field) – Min waarde veld gegeven huidige datum.
8getGreatestMinimum(int field) – Hoogste minimum voor veld als varierend.
9getGregorianChange() – Gregorian Calendar wijzigingsdatum.
10getLeastMaximum(int field) – Laagste maximum voor veld als varierend.
11getMaximum(int field) – Maximum waarde voor veld.
12getTime() – Huidige tijd van Calendar.
13getTimeInMillis() – Huidige tijd als long.
14getTimeZone() – Tijdzone ophalen.
15getMinimum(int field) – Minimum waarde voor veld.
16hashCode() – Override hashCode.
17isLeapYear(int year) – Is gegeven jaar schrikkeljaar?
18roll(int field, boolean up) – Voegt/trekt 1 eenheid af van veld zonder grotere velden te wijzigen.
19set(int field, int value) – Stelt tijd veld in op waarde.
20set(int year, int month, int date) – Stelt jaar, maand, datum in.
21set(int year, int month, int date, int hour, int minute) – Stelt jaar, maand, datum, uur, minuut in.
22set(int year, int month, int date, int hour, int minute, int second) – Stelt alle in.
23setGregorianChange(Date date) – Stelt GregorianCalendar wijzigingsdatum.
24setTime(Date date) – Stelt huidige tijd met Date.
25setTimeInMillis(long millis) – Stelt huidige tijd vanuit long waarde.
26setTimeZone(TimeZone value) – Stelt tijdzone in.
27toString() – 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

  1. C# Classes & Objects: Fundamenten voor Robuuste OOP
  2. Huidige datum en tijd ophalen in Python: een praktische gids
  3. Java-variabelen en literals: een uitgebreide gids
  4. Java Expressies, Statements en Blokken begrijpen
  5. Java klassen en objecten: een praktische gids
  6. Java abstracte klassen en methoden: een uitgebreide gids
  7. Java geneste en inner classes meesteren: typen, voorbeelden en best practices
  8. Java Singleton patroon uitgelegd: hoe veilig te implementeren en gebruiken
  9. Java throw vs throws: Exception Handling meesteren met praktische voorbeelden
  10. Java Autoboxing en Unboxing: Praktische voorbeelden en best practices
  11. Java Object Serialisatie: Objecten Persisteren en Herstellen