codestory

Die Anleitung zu Java Date Time

  1. Die Klasse vom Datum, der Zeit, der Kalendar im Java (Date, time, calendar in Java)
  2. System.currentTimeMillis()
  3. TimeUnit
  4. java.util.Date
  5. Date, Time, Timestamp (java.sql)
  6. java.util.Calendar
  7. Zwischen Date und Calendar umwandeln
  8. DateFormat & SimpleDateFormat

1. Die Klasse vom Datum, der Zeit, der Kalendar im Java (Date, time, calendar in Java)

Java bietet einige Class beziehend die Zeit und Calendar. Das ist die Liste von der Class
Die Klasse
Die Bezeichnung
java.util.Date
Eine Klasse vertritt das Datum und die Zeit. Die meiste Methode sind veraltet
java.util.concurrent.TimeUnit
TimeUnit ist ein Enum, die Datum und die Zeit bezeichnet
java.sql.Date
Eine Klasse vertritt das Datum. Die Information von der Zeit wird geschnitten. Die Klasse wird oft in JDBC benutzt
java.sql.Time
Eine Klasse bezeichnet die Zeit ( die Stunden, die Minuten, die Sekundär, die Milisekundär ) und enthaltet nicht die Datum ( Tag, Monat, Jahr). Die Klasse wird oft in JDBC benutzt
java.sql.Timestamp
Eine Klasse bezeichnet das Datum und die Zeit. Die Klasse wird oft in JDBC benutzt
java.util.Calendar
Die Klasse bezeichnet den Kalender. Sie hat die arithmetische Methode über die Zeit, z.B den Tag einfügen oder vermindern,...
java.util.GregorianCalendar
Ist die direkte Klasse von java.util.Calendar, die denTag nach dem gregorianischer Kalender bezeichnet. Es hat alle Methode aus java.util.Calendarum die Datum und Zeit Arithmetik zu machen
java.util.TimeZone
TimeZone ist eine Klasse zur Bezeichnung der Timezone. Sie ist nutzlich wenn Sie mit dem Kalender nach der Timezone arbeiten
java.text.SimpleDateFormat
Die Klasse hilft Ihnen bei der Umwandlung eines String zum Date und umgekehrt

2. System.currentTimeMillis()

currentTimeMillis() ist ein static method von class System. Es bezeichnet die Zeitraum ins Mili Sekunde ab 1-1-1971 bis zum momentan
System.currentTimeMillis() ist meisten benutzt, ein Zeitraum der Arbeiten zu messen. Die method wird vor dem Beginn der Arbeit und nach der Erledigung aufgeruft
JobTimeDemo.java
package org.o7planning.tutorial.dt;

public class JobTimeDemo {

	// Das ist die Methode zur Rechnung der Summe von 1 bis 100.
	private static int sum() {
		int sum = 0;
		for (int i = 0; i <= 100; i++) {
			sum += i;
		}
		return sum;
	}

	private static void doJob(int count) {
		// Die Aufruf der Methode 'sum' mit der Mal-Anzahl, 
		// die von dem Parameter gegeben wird
		for (int i = 0; i < count; i++) {
			sum();
		}
	}

	public static void main(String[] args) {
		long millis1 = System.currentTimeMillis();

		doJob(10000);

		long millis2 = System.currentTimeMillis();

		long distance = millis2 - millis1;

		System.out.println("Distance time in milli second: " + distance);
	}
}
Das Ergebnis von dem Beispiel
Distance time in milli second: 3

3. TimeUnit

TimeUnit ist ein Enum, wird ab Java 5 eingeführt. Es hat einige Method für die Umwechslung der zeitlichen Elemente und wirklich in einigen Fälle nützlich
// Die Anzahl der Minuten
int minute = 5;

// Die Anzahl der Minuten in die Milisekunden umwandeln.
// Das ist der tradtionelle Weg.
int millisecond = minute * 60 * 1000;

// TimeUnit benutzen:
long millisecond = TimeUnit.MINUTES.toMillis(minute);
Einige Method von TimeUnit
// In die Nano-Sekunde wechseln (nanoseconds).
public long toNanos(long d);

// In die Mikro-Sekunde wechseln (microseconds).
public long toMicros(long d);

// In die Mili-Sekunde wechseln  (milliseconds)
public long toMillis(long d);

// In die Sekunde wechseln  (seconds).
public long toSeconds(long d);

// In die Minute wechseln  (minutes).
public long toMinutes(long d);

// In die Stunde wechseln (hours).
public long toHours(long d);

// In die Tage wechseln (days).
public long toDays(long d) ;

// Vom die Einheit in die anderen Einheit durch den Parameter 'u' wechseln.
public long convert(long d, TimeUnit u);
Beispiel
TimeUnitConvertDemo.java
package org.o7planning.tutorial.timeunit;

import java.util.concurrent.TimeUnit;

public class TimeUnitConvertDemo {

	public static void main(String[] args) {

		// Die Sekunden
		long second = 125553;

		// Die Sekunden in die Minuten umwandeln
		long minute = TimeUnit.MINUTES.convert(second, TimeUnit.SECONDS);
		System.out.println("Minute " + minute);

		// Die Sekunden in die Stunden umwandeln.
		long hour = TimeUnit.HOURS.convert(second, TimeUnit.SECONDS);
		System.out.println("Hour " + hour);

		System.out.println("------");

		// Die 3 Tagen in die Minuten umwandeln.
		minute = TimeUnit.DAYS.toMinutes(3);

		System.out.println("Minute " + minute);

		// Die 3 Tagen in die Stunden umwandeln
		hour = TimeUnit.DAYS.toHours(3);

		System.out.println("Hour " + hour);
	}

}
Das Ergebnis von dem Beispiel
Minute 2092
Hour 34
------
Minute 4320
Hour 72

4. java.util.Date

java.util.Date ist einer der ersten Class für die Bezeichnung des Datum im Java. Ihre meisten Method sind leider veraltet. stattdessen benutzt man die Method von java.util.Calendar. Aber Sie können java.util.Date für die Bezeichnung des Datum benutzen
Es gibt nur 2 Constructor für Benutzung
// Ein Date Objekt zur Bezeichnung der aktuellen Zeit erstellen.
Date date1 = new Date();

// Ein  Date Objekt nach der Zeit in die Milisekunden seit 1-1-1970.
long millis = .....;
Date date2 = new Date(millis);
DateDemo.java
package org.o7planning.tutorial.date;

import java.util.Date;
import java.util.concurrent.TimeUnit;

public class DateDemo {

	public static void main(String[] args) throws InterruptedException {

		// Ein Date Objekt für die Bezeichnung der aktuellen Zeit erstellen.
		Date date1 = new Date();

		// 3 Sekunden stoppen.
		Thread.sleep(TimeUnit.SECONDS.toMillis(3));

		// Die aktuellen Zeit in Milisekunden (vom -01-1970 zum Jetzt).
		long millis = System.currentTimeMillis();
		Date date2 = new Date(millis);

		// Der Vergleich zwischen 2 Objekte date1 und date2.
		// i < 0 heißt date1 < date2
		// i = 0 heißt là date1 = date2
		// i > 0 heißt là date1 > date2
		int i = date1.compareTo(date2);

		System.out.println("date1 compareTo date2 = " + i);

		// Prüfen, ob date1 vor dem date2 steht oder nicht.
		boolean before = date1.before(date2);

		System.out.println("date1 before date2 ? " + before);

		// Prüfen, ob date1 hinter dem date2 steht oder nicht..
		boolean after = date1.after(date2);

		System.out.println("date1 after date2 ? " + after);
	}

}
Das Ergebnis von dem Beispiel
date1 compareTo date2 = -1
date1 before date2 ? true
date1 after date2 ? false

5. Date, Time, Timestamp (java.sql)

java.sql hat 3 Class über das Datum und die Zeit:
  • java.sql.Date
  • java.sql.Time
  • java.sql.Timestamp
In konkreten
  • java.sql.Date entspricht dem SQL DATE, d.h sie archiviert den Jahr, den Monat, den Tag und ignoriert die Stunde, die Minute, die Sekunde und Milisekunde. Und noch java.sql.Date bezeichnet keine Information über die Zeitzone.
  • java.sql.Time entspricht dem SQL TIME und bezeichnet nur die Information von die Stunde, die Minute, die Sekunde und die Milisekunde.
  • java.sql.Timestamp entspricht dem SQL TIMESTAMP, es bezeichnet die NanoSekude sehr genau ( beachten Sie: java.util.Date bezeichnet nur die MiliSekunde mit der custom Genauigkeit)
Die oben Class nehmen an PreparedStatement in JDBC API teil, Zum Beispiel: die Method setDate, setTime, setTimestamp. oder aus ResultSet. herausnehmen

6. java.util.Calendar

Die Zusammenfassung über das Kalendar
Gregorian Calendar: Das ist der Sonnenkalender, auch der christliche Kalender genannt, der internationale Kalender. Er ist populär am meisten. Und er wir nach Papst Gregory XIII benannt, der ihn im Jahr 1582 eingeführt
Buddhist Calendar: Das ist buddhistischer Kalender, die üblicherweise in einige südostasiatischen Ländern wie Thailand, Laos, Kambodscha und sowie Sri Lanka. Jetzt wird dieser Kalender in der buddhistischen Zeremonien verwendet. Und keine Länder verwendet diesen Kalender mehr. Diese Länder wechseln die Gregorian Calendar zu benutzen. Sie können die mehre Information über dieser Kalender bei ...
Japanese Imperial Calendar: Das ist der traditionelle Kalender von Japan. Aber jetzt verwendet man in Japan den Sonnenkalender (Gregorian Calendar), Aber der traditionelle Kalender wird noch inoffiziell verwendet
Calendar ist ein Class für die Bezeichnung eines Kalenderssystem
Calendar hat einige untergeordneten Class
  • GregorianCalendar
  • JapaneseImperialCalendar
  • BuddhistCalendar
Calendar ist ein Abstrakt class. Das heißt, Sie können es aus Constructor nicht erstellen. Aber es gibt 2 static method für die Erstellung des Object Calendar.
public static Calendar getInstance();

public static Calendar getInstance(TimeZone zone);

public static Calendar getInstance(Locale aLocale);

public static Calendar getInstance(TimeZone zone,Locale aLocale);
Beispiel
// Ein Objekt Calender zur Bezeichnung der aktuellen Zeit erstellen.
// Mit der Default-Locale und Default-TimeZone (von dem laufenden PC)
Calendar c = Calendar.getInstance();
Wenn Sie Calendar.getInstance(TimeZone,Locale) verwendet, bekommen Sie eine der obengenannten untergeordneten Class. Und normalerweise ist das GregorianCalendar.

Aufruf von Calendar.getInstance() wird das Objekt Calendar mit dem Parameter TimeZone nach Ihrem Computer und Default Locale erhaltet.
Sehen Sie die Code von class Calendar (JDK7):
Calendar (JDK7)
/**
* Gets a calendar using the default time zone and locale. The
* <code>Calendar</code> returned is based on the current time
* in the default time zone with the default locale.
*
* @return a Calendar.
*/
public static Calendar getInstance()
{
  Calendar cal = createCalendar(TimeZone.getDefaultRef(),
                                  Locale.getDefault(Locale.Category.FORMAT));
  cal.sharedZone = true;
  return cal;
}

/**
* Gets a calendar using the specified time zone and default locale.
* The <code>Calendar</code> returned is based on the current time
* in the given time zone with the default locale.
*
* @param zone the time zone to use
* @return a Calendar.
*/
public static Calendar getInstance(TimeZone zone)
{
  return createCalendar(zone, Locale.getDefault(Locale.Category.FORMAT));
}

/**
* Gets a calendar using the default time zone and specified locale.
* The <code>Calendar</code> returned is based on the current time
* in the default time zone with the given locale.
*
* @param aLocale the locale for the week data
* @return a Calendar.
*/
public static Calendar getInstance(Locale aLocale)
{
  Calendar cal = createCalendar(TimeZone.getDefaultRef(), aLocale);
  cal.sharedZone = true;
  return cal;
}

/**
* Gets a calendar with the specified time zone and locale.
* The <code>Calendar</code> returned is based on the current time
* in the given time zone with the given locale.
*
* @param zone the time zone to use
* @param aLocale the locale for the week data
* @return a Calendar.
*/
public static Calendar getInstance(TimeZone zone,
                                 Locale aLocale)
{
  return createCalendar(zone, aLocale);
}

private static Calendar createCalendar(TimeZone zone,
                                     Locale aLocale)
{
  Calendar cal = null;

  String caltype = aLocale.getUnicodeLocaleType("ca");
  if (caltype == null) {
      // Calendar type is not specified.
      // If the specified locale is a Thai locale,
      // returns a BuddhistCalendar instance.
      if ("th".equals(aLocale.getLanguage())
              && ("TH".equals(aLocale.getCountry()))) {
          cal = new BuddhistCalendar(zone, aLocale);
      } else {
          cal = new GregorianCalendar(zone, aLocale);
      }
  } else if (caltype.equals("japanese")) {
      cal = new JapaneseImperialCalendar(zone, aLocale);
  } else if (caltype.equals("buddhist")) {
      cal = new BuddhistCalendar(zone, aLocale);
  } else {
      // Unsupported calendar type.
      // Use Gregorian calendar as a fallback.
      cal = new GregorianCalendar(zone, aLocale);
  }

  return cal;
}
Einige wichtigen Method

Method get(int)

Return

get(Calendar.DAY_OF_WEEK)
1 (Calendar.SUNDAY) to 7 (Calendar.SATURDAY).
get(Calendar.YEAR)
year
get(Calendar.MONTH)
0 (Calendar.JANUARY) to 11 (Calendar.DECEMBER).
get(Calendar.DAY_OF_MONTH)
1 to 31
get(Calendar.DATE)
1 to 31
get(Calendar.HOUR_OF_DAY)
0 to 23
get(Calendar.MINUTE)
0 to 59
get(Calendar.SECOND)
0 to 59
get(Calendar.MILLISECOND)
0 to 999
get(Calendar.HOUR)
0 to 11, to be used together with Calendar.AM_PM.
get(Calendar.AM_PM)
0 (Calendar.AM) or 1 (Calendar.PM).
get(Calendar.DAY_OF_WEEK_IN_MONTH)
DAY_OF_MONTH 1 through 7 always correspond to DAY_OF_WEEK_IN_MONTH 1;

8 through 14 correspond to DAY_OF_WEEK_IN_MONTH 2, and so on.
get(Calendar.DAY_OF_YEAR)
1 to 366
get(Calendar.ZONE_OFFSET)
GMT offset value of the time zone.
get(Calendar.ERA)
Indicate AD (GregorianCalendar.AD), BC (GregorianCalendar.BC).
CalendarFieldsDemo.java
package org.o7planning.tutorial.calendar;

import java.util.Calendar;

public class CalendarFieldsDemo {

	public static void main(String[] args) {
		// Ein Default - Objekt Kalender erstellen.
		// Mit der Benutzung von Default Time zone und Locale.
		Calendar c = Calendar.getInstance();
		int year = c.get(Calendar.YEAR);

		// Die Wert von 0 bis 11 zurückgeben
		int month = c.get(Calendar.MONTH);
		int day = c.get(Calendar.DAY_OF_MONTH);
		int hour = c.get(Calendar.HOUR_OF_DAY);
		int minute = c.get(Calendar.MINUTE);
		int second = c.get(Calendar.SECOND);
		int millis = c.get(Calendar.MILLISECOND);

		System.out.println("Year: " + year);
		System.out.println("Month: " + (month + 1));
		System.out.println("Day: " + day);
		System.out.println("Hour: " + hour);
		System.out.println("Minute: " + minute);
		System.out.println("Second: " + second);
		System.out.println("Minute: " + minute);
		System.out.println("Milli Second: " + millis);

	}

}
Das Ergebnis von dem Beispiel
Year: 2021
Month: 5
Day: 15
Hour: 20
Minute: 34
Second: 52
Minute: 34
Milli Second: 382
Einige sonstigen Method von Calendar:
void set(int calendarField, int value)
void set(int year, int month, int date)
void set(int year, int month, int date, int hour, int minute, int second)

// Einen Zeitraum auf einem Felder vom Kalender einfügen oder vermindern, 
// die nach der Regelung vom Kalender basieren.
void add(int field, int amount)

// Einen Felder vom Kalender rollen (nach oben und hinten).
// roll(): wirkt auf die anderen Felder vom Kalender nicht aus.
void roll(int calendarField, boolean up)

// Auf einen Felder eines Kalender rollen.
// roll(): wirkt auf die anderen Felder vom Kalender nicht aus.
void roll(int calendarField, int amount):

// Das Objekt Date nach der Wert vom Kalender zurückgeben.
Date getTime()

void setTime(Date date)

// Die Milisekunden vom Objekt Kalender zurückgeben
long getTimeInMills():

void setTimeInMillis(long millis)

void setTimeZone(TimeZone value)
CalendarDemo.java
package org.o7planning.tutorial.calendar;

import java.util.Calendar;

public class CalendarDemo {

	public static void showCalendar(Calendar c) {
		int year = c.get(Calendar.YEAR);

		// die Wert vom 0 - 11 zurückgeben
		int month = c.get(Calendar.MONTH);
		int day = c.get(Calendar.DAY_OF_MONTH);
		int hour = c.get(Calendar.HOUR_OF_DAY);
		int minute = c.get(Calendar.MINUTE);
		int second = c.get(Calendar.SECOND);
		int millis = c.get(Calendar.MILLISECOND);

		System.out.println(" " + year + "-" + (month + 1) + "-" + day //
				+ " " + hour + ":" + minute + ":" + second + " " + millis);
	}

	public static void main(String[] args) {
		// Ein Objekt Kalender zur Bezeichnung der aktuellen Zeit erstellen.
		// Mit der Benutzung von Default-TimeZone und Default-Locale
		Calendar c = Calendar.getInstance();

		System.out.println("First calendar info");
		showCalendar(c);

		// roll(..): einen Feld vom Kalender rollen.
		// roll(..): die anderen Felder nicht ändern.
		// Z.B: eine Stunden heranrollen (boolean up = true)
		c.roll(Calendar.HOUR_OF_DAY, true);

		System.out.println("After roll 1 hour");
		showCalendar(c);

		// roll(..): die anderen Felder vom Kalender nicht ändern .
		// eine Stunde herunterrollen (boolean up = false)
		c.roll(Calendar.HOUR_OF_DAY, false);

		System.out.println("After roll -1 hour");
		showCalendar(c);

		// add(..): die anderen Felder vom Kalender ändern ..
		// eine Stunde erhöhen (boolean up = true)
		c.add(Calendar.HOUR_OF_DAY, 1);

		System.out.println("After add 1 hour");
		showCalendar(c);

		// roll(..): die anderen Felder vom Kalender nicht ändern.
		// 30 Tag herunterrollen.
		c.roll(Calendar.DAY_OF_MONTH, -30);

		System.out.println("After roll -30 day");
		showCalendar(c);

		// add(..): die anderen Felder vom Kalender ändern können. 
		// 30 Tagen addieren
		c.add(Calendar.DAY_OF_MONTH, 30);
		System.out.println("After add 30 day");
		showCalendar(c);

	}

}
Das Ergebnis von dem Beispiel
First calendar info
 2021-5-15 20:35:27 395
After roll 1 hour
 2021-5-15 21:35:27 395
After roll -1 hour
 2021-5-15 20:35:27 395
After add 1 hour
 2021-5-15 21:35:27 395
After roll -30 day
 2021-5-16 21:35:27 395
After add 30 day
 2021-6-15 21:35:27 395

7. Zwischen Date und Calendar umwandeln

  • Date ==> Calendar
Date now = new Date();

Calendar c = Calendar.getInstance();
c.setTime(now);
  • Calendar ==> Date
Calendar c = Calendar.getInstance();

Date date = c.getTime();
CalendarDateConversionDemo.java
package org.o7planning.tutorial.calendar;

import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.TimeUnit;

public class CalendarDateConversionDemo {

	public static void showCalendar(Calendar c) {
		int year = c.get(Calendar.YEAR);

		// Die Wert vom 0 - 11 zurückgeben
		int month = c.get(Calendar.MONTH);
		int day = c.get(Calendar.DAY_OF_MONTH);
		int hour = c.get(Calendar.HOUR_OF_DAY);
		int minute = c.get(Calendar.MINUTE);
		int second = c.get(Calendar.SECOND);
		int millis = c.get(Calendar.MILLISECOND);

		System.out.println(year + "-" + (month + 1) + "-" + day //
				+ " " + hour + ":" + minute + ":" + second + " " + millis);
	}

	public static void main(String[] args) {

		Calendar c = Calendar.getInstance();

		// year, month, day
		c.set(2000, 11, 24);

		Date date = c.getTime();

		System.out.println("Date " + date);

		long timeInMillis = System.currentTimeMillis();

		// 24 Stunden subtrahieren
		timeInMillis -= TimeUnit.HOURS.toMillis(24);

		Date date2 = new Date(timeInMillis);
		Calendar c2 = Calendar.getInstance();
		c2.setTime(date2);

		showCalendar(c2);

	}

}
Das Ergebnis von dem Beispiel
Date Sun Dec 24 20:36:10 KGT 2000
2021-5-14 20:36:10 608

8. DateFormat & SimpleDateFormat

  • Date ==> String
Date date = new Date();

DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");

String dateString  = df.format(date);
  • String ==> Date
String dateString = "23/04/2005 23:11:59";

DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

Date date = df.parse(dateString);
DateFormatDemo.java
package org.o7planning.tutorial.dateformat;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatDemo {

  public static void main(String[] args) throws ParseException {

      final DateFormat df1 = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

      String dateString1 = "23/04/2005 23:11:59";
      System.out.println("dateString1 = " + dateString1);

      // String ==> Date
      Date date1 = df1.parse(dateString1);

      System.out.println("date1 = " + date1);

      final DateFormat df2 = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");

      // Date ==> String.
      String dateString2 = df2.format(date1);

      System.out.println("dateString2 = " + dateString2);
  }
}
Das Ergebnis von dem Beispiel
dateString1 = 23/04/2005 23:11:59
date1 = Sat Apr 23 23:11:59 KGST 2005
dateString2 = 23-04-2005 23:11:59
die Format Date, Time anpassen
Custom Date Format. Lassen Sie uns einige Beispiele für das Format und die zurückgegebenen Ergebnisse sehen.
Pattern
Output
dd.MM.yy
30.06.09
yyyy.MM.dd G 'at' hh:mm:ss z
2009.06.30 AD at 08:29:36 PDT
EEE, MMM d, ''yy
Tue, Jun 30, '09
h:mm a
8:29 PM
H:mm
8:29
H:mm:ss:SSS
8:28:36:249
K:mm a,z
8:29 AM,PDT
yyyy.MMMMM.dd GGG hh:mm aaa
2009.June.30 AD 08:29 AM
Die Vorlagensyntax von Date Format
Symbol
Meaning
Presentation
Example
G
era designator
Text
AD
y
year
Number
2009
M
month in year
Text & Number
July & 07
d
day in month
Number
10
h
hour in am/pm (1-12)
Number
12
H
hour in day (0-23)
Number
0
m
minute in hour
Number
30
s
second in minute
Number
55
S
millisecond
Number
978
E
day in week
Text
Tuesday
D
day in year
Number
189
F
day of week in month
Number
2 (2nd Wed in July)
w
week in year
Number
27
W
week in month
Number
2
a
am/pm marker
Text
PM
k
hour in day (1-24)
Number
24
K
hour in am/pm (0-11)
Number
0
z
time zone
Text
Pacific Standard Time
'
escape for text
Delimiter
(none)
'
single quote
Literal
'
  • Java Date Time Format Pattern