Suche…


Syntax

  • Date object = new Date();
  • Date object = new Date(long date);

Parameter

Parameter Erläuterung
Kein Parameter Erzeugt ein neues Date-Objekt mit der Zuordnungszeit (auf die nächste Millisekunde)
langes Datum Erzeugt ein neues Date-Objekt mit einer auf "Millisekunden" seit "der Epoche" (1. Januar 1970, 00:00:00 GMT) eingestellten Zeit.

Bemerkungen

Darstellung

Intern wird ein Java Date-Objekt als Long dargestellt. es ist die Anzahl der Millisekunden seit einer bestimmten Zeit (als Epoche bezeichnet ). Die ursprüngliche Java Date-Klasse verfügte über Methoden zum Umgang mit Zeitzonen usw., die jedoch zugunsten der damals neuen Calendar-Klasse verworfen wurden.

Wenn Sie also nur eine bestimmte Zeit in Ihrem Code verwenden möchten, können Sie eine Date-Klasse erstellen und speichern usw. Wenn Sie eine vom Menschen lesbare Version dieses Datums ausdrucken möchten, erstellen Sie jedoch eine Calendar-Klasse Verwenden Sie die Formatierung, um Stunden, Minuten, Sekunden, Tage, Zeitzonen usw. zu erstellen. Beachten Sie, dass eine bestimmte Millisekunde als unterschiedliche Stunden in verschiedenen Zeitzonen angezeigt wird. Normalerweise möchten Sie eine in der "lokalen" Zeitzone anzeigen, aber die Formatierungsmethoden müssen berücksichtigen, dass Sie sie möglicherweise für eine andere Zeitzone anzeigen möchten.

Beachten Sie außerdem, dass die von JVMs verwendeten Uhren normalerweise keine Millisekundengenauigkeit haben. Die Uhr kann nur alle 10 Millisekunden "ticken". Wenn Sie also die Zeit steuern, können Sie sich nicht darauf verlassen, die Dinge auf diesem Pegel genau zu messen.

Anweisung importieren

import java.util.Date;

Die Date Klasse kann aus dem java.util Paket importiert werden.

Vorsicht

Date sind veränderlich, sodass die Verwendung dieser Codes das Schreiben von threadsicherem Code erschweren oder versehentlich Schreibzugriff auf den internen Status ermöglichen kann. In der untenstehenden Klasse ermöglicht die Methode getDate() beispielsweise dem Aufrufer, das Transaktionsdatum zu ändern:

public final class Transaction {
  private final Date date;

  public Date getTransactionDate() {
    return date;
  }
}

Die Lösung ist, entweder eine Kopie des date oder die in Java 8 eingeführten neuen APIs in java.time .

Die meisten Konstruktormethoden in der Date Klasse sind veraltet und sollten nicht verwendet werden. In fast allen Fällen ist es ratsam, die Calendar Klasse für Datumsvorgänge zu verwenden.

Java 8

Java 8 führt eine neue Zeit- und Datums-API in das Paket java.time , einschließlich LocalDate und LocalTime . Die Klassen im Paket java.time bieten eine überarbeitete API, die einfacher zu verwenden ist. Wenn Sie in Java 8 schreiben, wird dringend empfohlen, dass Sie diese neue API verwenden. Siehe Datum und Uhrzeit (java.time. *) .

Date-Objekte erstellen

Date date = new Date();
System.out.println(date); // Thu Feb 25 05:03:59 IST 2016

Dieses Date Objekt enthält hier das aktuelle Datum und die Uhrzeit, zu der dieses Objekt erstellt wurde.

Calendar calendar = Calendar.getInstance();
calendar.set(90, Calendar.DECEMBER, 11);
Date myBirthDate = calendar.getTime();
System.out.println(myBirthDate); // Mon Dec 31 00:00:00 IST 1990

Date werden am besten über eine Calendar da die Verwendung der Datenkonstruktoren veraltet und nicht empfohlen wird. Dazu benötigen wir eine Instanz der Calendar Klasse von der Factory-Methode. Dann können Sie Jahr, Monat und Tag des Monats mithilfe von Zahlen oder im Fall von Monaten festgelegter Konstanten in der Klasse Calendar festlegen, um die Lesbarkeit zu verbessern und Fehler zu reduzieren.

calendar.set(90, Calendar.DECEMBER, 11, 8, 32, 35);
Date myBirthDatenTime = calendar.getTime();
System.out.println(myBirthDatenTime); // Mon Dec 31 08:32:35 IST 1990

Neben dem Datum können wir auch die Zeit in der Reihenfolge Stunde, Minuten und Sekunden übergeben.

Date-Objekte vergleichen

Kalender, Datum und LocalDate

Java SE 8

vor, nach, compareTo und gleich Methoden

//Use of Calendar and Date objects    
final Date today = new Date();
final Calendar calendar = Calendar.getInstance();
calendar.set(1990, Calendar.NOVEMBER, 1, 0, 0, 0);
Date birthdate = calendar.getTime();

final Calendar calendar2 = Calendar.getInstance();
calendar2.set(1990, Calendar.NOVEMBER, 1, 0, 0, 0);
Date samebirthdate = calendar2.getTime();

//Before example
System.out.printf("Is %1$tF before %2$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.before(birthdate)));
System.out.printf("Is %1$tF before %1$tF? %3$b%n", today, today, Boolean.valueOf(today.before(today)));
System.out.printf("Is %2$tF before %1$tF? %3$b%n", today, birthdate, Boolean.valueOf(birthdate.before(today)));

//After example
System.out.printf("Is %1$tF after %2$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.after(birthdate)));
System.out.printf("Is %1$tF after %1$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.after(today)));
System.out.printf("Is %2$tF after %1$tF? %3$b%n", today, birthdate, Boolean.valueOf(birthdate.after(today)));

//Compare example
System.out.printf("Compare %1$tF to %2$tF: %3$d%n", today, birthdate, Integer.valueOf(today.compareTo(birthdate)));
System.out.printf("Compare %1$tF to %1$tF: %3$d%n", today, birthdate, Integer.valueOf(today.compareTo(today)));
System.out.printf("Compare %2$tF to %1$tF: %3$d%n", today, birthdate, Integer.valueOf(birthdate.compareTo(today)));

//Equal example
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.equals(birthdate)));
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", birthdate, samebirthdate,
            Boolean.valueOf(birthdate.equals(samebirthdate)));
System.out.printf(
            "Because birthdate.getTime() -> %1$d is different from samebirthdate.getTime() -> %2$d, there are millisecondes!%n",
            Long.valueOf(birthdate.getTime()), Long.valueOf(samebirthdate.getTime()));

//Clear ms from calendars
calendar.clear(Calendar.MILLISECOND);
calendar2.clear(Calendar.MILLISECOND);
birthdate = calendar.getTime();
samebirthdate = calendar2.getTime();

System.out.printf("Is %1$tF equal to %2$tF after clearing ms? %3$b%n", birthdate, samebirthdate,
            Boolean.valueOf(birthdate.equals(samebirthdate)));
Java SE 8

isBefore, isAfter, compareTo und equals Methoden

//Use of LocalDate
final LocalDate now = LocalDate.now();
final LocalDate birthdate2 = LocalDate.of(2012, 6, 30);
final LocalDate birthdate3 = LocalDate.of(2012, 6, 30);

//Hours, minutes, second and nanoOfsecond can also be configured with an other class LocalDateTime
//LocalDateTime.of(year, month, dayOfMonth, hour, minute, second, nanoOfSecond);

//isBefore example
System.out.printf("Is %1$tF before %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isBefore(birthdate2)));
System.out.printf("Is %1$tF before %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isBefore(now)));
System.out.printf("Is %2$tF before %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(birthdate2.isBefore(now)));

//isAfter example
System.out.printf("Is %1$tF after %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isAfter(birthdate2)));
System.out.printf("Is %1$tF after %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isAfter(now)));
System.out.printf("Is %2$tF after %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(birthdate2.isAfter(now)));

//compareTo example
System.out.printf("Compare %1$tF to %2$tF %3$d%n", now, birthdate2, Integer.valueOf(now.compareTo(birthdate2)));
System.out.printf("Compare %1$tF to %1$tF %3$d%n", now, birthdate2, Integer.valueOf(now.compareTo(now)));
System.out.printf("Compare %2$tF to %1$tF %3$d%n", now, birthdate2, Integer.valueOf(birthdate2.compareTo(now)));

//equals example
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.equals(birthdate2)));
System.out.printf("Is %1$tF to %2$tF? %3$b%n", birthdate2, birthdate3, Boolean.valueOf(birthdate2.equals(birthdate3)));

//isEqual example
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isEqual(birthdate2)));
System.out.printf("Is %1$tF to %2$tF? %3$b%n", birthdate2, birthdate3, Boolean.valueOf(birthdate2.isEqual(birthdate3)));

Datumsvergleich vor Java 8

Vor Java 8 konnten Datumsangaben mit den Klassen java.util.Calendar und java.util.Date verglichen werden. Datumsklasse bietet 4 Methoden zum Vergleich von Datumsangaben:

after , before , compareTo und equals Methoden , um die Werte zurückgegeben durch Vergleichen getTime () Methode für jedes Datum.

compareTo Methode gibt eine positive ganze Zahl zurück.

  • Wert größer als 0: Wenn das Datum nach dem Datumsargument liegt
  • Wert größer als 0: Wenn das Datum vor dem Datumsargument liegt
  • Wert gleich 0: wenn Date gleich dem Date-Argument ist

equals Ergebnisse können, wie im Beispiel gezeigt, überraschend sein, da Werte wie Millisekunden nicht mit dem gleichen Wert initialisiert werden, wenn dies nicht ausdrücklich angegeben ist.

Seit Java 8

Mit Java 8 ist ein neues Objekt für die Arbeit mit Date java.time.LocalDate verfügbar. LocalDate implementiert ChronoLocalDate , die abstrakte Darstellung eines Datums, an dem das Chronologie- oder Kalendersystem steckbar ist.

Um die Datumszeitgenauigkeit zu erhalten, muss das Objekt java.time.LocalDateTime verwendet werden. LocalDate und LocalDateTime verwenden zum Vergleich den gleichen Methodennamen.

Der Vergleich von Datumsangaben mit einem LocalDate unterscheidet sich von der Verwendung von ChronoLocalDate da die Chronologie oder das Kalendersystem nicht als erstes berücksichtigt werden.

Da die meisten Anwendungen LocalDate verwenden LocalDate , ist ChronoLocalDate nicht in den Beispielen enthalten. Lesen Sie hier weiter .

Die meisten Anwendungen sollten Methodensignaturen, Felder und Variablen als LocalDate deklarieren, nicht diese Schnittstelle [ChronoLocalDate].

LocalDate bietet 5 Methoden zum Vergleich von Daten:

Im Falle des LocalDate Parameters ist isAfter , isBefore , isEqual , equals und compareTo nun diese Methode:

int compareTo0(LocalDate otherDate) {
    int cmp = (year - otherDate.year);
    if (cmp == 0) {
        cmp = (month - otherDate.month);
        if (cmp == 0) {
            cmp = (day - otherDate.day);
        }
    }
    return cmp;
}

equals Methode prüft, ob die Parameterreferenz dem Datum zuerst entspricht, während isEqual direkt compareTo0

Bei einer anderen Klasseninstanz von ChronoLocalDate die Datumsangaben anhand des Epoch Day verglichen. Die Epochen-Tageszählung ist eine einfache Erhöhung der Anzahl von Tagen, an denen Tag 0 1970-01-01 (ISO) ist.

Datum in ein bestimmtes String-Format konvertieren

format() aus der SimpleDateFormat Klasse hilft beim Konvertieren eines Date Objekts in ein bestimmtes Format- String Objekt mithilfe der angegebenen Musterzeichenfolge .

Date today = new Date();
    
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yy"); //pattern is specified here
System.out.println(dateFormat.format(today)); //25-Feb-16 

Muster können mit applyPattern() erneut angewendet werden

dateFormat.applyPattern("dd-MM-yyyy");
System.out.println(dateFormat.format(today)); //25-02-2016

dateFormat.applyPattern("dd-MM-yyyy HH:mm:ss E");
System.out.println(dateFormat.format(today)); //25-02-2016 06:14:33 Thu

Hinweis: Hier steht mm (kleiner Buchstabe m) für Minuten und MM (Großbuchstabe M) für Monat. Achten Sie besonders bei der Formatierung Jahre: Kapital „Y“ ( Y ) gibt die „Woche im Jahr“ , während Klein „y“ ( y ) das Jahr angibt.

String in Datum konvertieren

SimpleDateFormat parse() aus der SimpleDateFormat Klasse hilft beim Konvertieren eines String Musters in ein Date Objekt.

DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.US);
String dateStr = "02/25/2016"; // input String
Date date = dateFormat.parse(dateStr);
System.out.println(date.getYear()); // 116

Es gibt 4 verschiedene Formatvorlagen für das Textformat: SHORT , MEDIUM (Standardeinstellung), LONG und FULL , die jeweils vom Gebietsschema abhängen. Wenn kein Gebietsschema angegeben ist, wird das Systemgebietsschema verwendet.

Stil Locale.US Locale.France
KURZ 30.6.09 30/06/09
MITTEL 30. Juni 2009 30. Juni 2009
LANGE 30. Juni 2009 30. Juni 2009
VOLL Dienstag, 30. Juni 2009 30. Juni 2009

Eine grundlegende Datumsausgabe

Wenn Sie den folgenden Code mit dem Formatstring yyyy/MM/dd hh:mm.ss , erhalten Sie die folgende Ausgabe

2016/04/19 11: 45.36

// define the format to use
String formatString = "yyyy/MM/dd hh:mm.ss";

// get a current date object
Date date = Calendar.getInstance().getTime();

// create the formatter
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formatString);

// format the date
String formattedDate = simpleDateFormat.format(date);

// print it
System.out.println(formattedDate);


// single-line version of all above code
System.out.println(new SimpleDateFormat("yyyy/MM/dd hh:mm.ss").format(Calendar.getInstance().getTime()));

Konvertieren Sie die formatierte Zeichenfolgendarstellung des Datums in das Date-Objekt

Mit dieser Methode kann eine formatierte Zeichenfolgendarstellung eines Datums in ein Date Objekt konvertiert werden.

    /**
     * Parses the date using the given format.
     *
     * @param formattedDate the formatted date string
     * @param dateFormat the date format which was used to create the string.
     * @return the date
     */
    public static Date parseDate(String formattedDate, String dateFormat) {
        Date date = null;
        SimpleDateFormat objDf = new SimpleDateFormat(dateFormat);
        try {
          date = objDf.parse(formattedDate);
        } catch (ParseException e) {
          // Do what ever needs to be done with exception.
        }
        return date;
    }

Ein bestimmtes Datum erstellen

Während die Java Date-Klasse mehrere Konstruktoren hat, werden Sie feststellen, dass die meisten veraltet sind. Die einzige akzeptable Methode zum direkten Erstellen einer Date-Instanz ist entweder die Verwendung des leeren Konstruktors oder die Übergabe eines langen Zeitraums (Anzahl Millisekunden seit Standardzeit). Beides ist nicht praktisch, es sei denn, Sie suchen nach dem aktuellen Datum oder haben bereits eine andere Datumsinstanz in der Hand.

Um ein neues Datum zu erstellen, benötigen Sie eine Kalenderinstanz. Von dort aus können Sie die Kalenderinstanz auf das gewünschte Datum einstellen.

Calendar c = Calendar.getInstance();

Dadurch wird eine neue Kalenderinstanz auf die aktuelle Uhrzeit zurückgegeben. Kalender verfügt über viele Methoden, um Datum und Uhrzeit zu ändern oder ganz einfach einzustellen. In diesem Fall setzen wir es auf ein bestimmtes Datum.

c.set(1974, 6, 2, 8, 0, 0);
Date d = c.getTime();

Die getTime Methode gibt die Date-Instanz zurück, die wir benötigen. Beachten Sie, dass mit den Kalendersatzmethoden nur ein oder mehrere Felder festgelegt werden, sie jedoch nicht alle. Das heißt, wenn Sie das Jahr einstellen, bleiben die anderen Felder unverändert.

FALLE

In vielen Fällen erfüllt dieses Code-Snippet seinen Zweck. Beachten Sie jedoch, dass zwei wichtige Teile des Datums / der Uhrzeit nicht definiert sind.

  • Die Parameter (1974, 6, 2, 8, 0, 0) werden innerhalb der an anderer Stelle definierten Standardzeitzone interpretiert.
  • Die Millisekunden werden nicht auf Null gesetzt, sondern zum Zeitpunkt der Erstellung der Kalenderinstanz von der Systemuhr aufgefüllt.

Java 8 LocalDate- und LocalDateTime-Objekte

Date- und LocalDate-Objekte können nicht genau miteinander konvertiert werden, da ein Date-Objekt einen bestimmten Tag und eine bestimmte Uhrzeit darstellt, während ein LocalDate-Objekt keine Zeit- oder Zeitzoneninformationen enthält. Es kann jedoch nützlich sein, zwischen den beiden zu konvertieren, wenn Sie nur die tatsächlichen Datumsinformationen und nicht die Zeitangaben berücksichtigen.

Erzeugt ein LocalDate

// Create a default date
LocalDate lDate = LocalDate.now();

// Creates a date from values
lDate = LocalDate.of(2017, 12, 15);
    
// create a date from string
lDate = LocalDate.parse("2017-12-15");

// creates a date from zone
LocalDate.now(ZoneId.systemDefault());

Erzeugt eine LocalDateTime

// Create a default date time
LocalDateTime lDateTime = LocalDateTime.now();

// Creates a date time from values
lDateTime = LocalDateTime.of(2017, 12, 15, 11, 30);

// create a date time from string
lDateTime = LocalDateTime.parse("2017-12-05T11:30:30");

// create a date time from zone 
LocalDateTime.now(ZoneId.systemDefault());

LocalDate to Date und umgekehrt

Date date = Date.from(Instant.now());
ZoneId defaultZoneId = ZoneId.systemDefault();

// Date to LocalDate
LocalDate localDate = date.toInstant().atZone(defaultZoneId).toLocalDate();

// LocalDate to Date
Date.from(localDate.atStartOfDay(defaultZoneId).toInstant());

LocalDateTime to Date und umgekehrt

Date date = Date.from(Instant.now());
ZoneId defaultZoneId = ZoneId.systemDefault();

// Date to LocalDateTime
LocalDateTime localDateTime =  date.toInstant().atZone(defaultZoneId).toLocalDateTime();

// LocalDateTime to Date
Date out = Date.from(localDateTime.atZone(defaultZoneId).toInstant());

Zeitzonen und java.util.Date

Ein java.util.Date Objekt verfügt nicht über ein Konzept der Zeitzone.

  • Es gibt keine Möglichkeit , eine Zeitzone für ein Datum festlegen
  • Es ist nicht möglich, die Zeitzone eines Date-Objekts zu ändern
  • Ein Date-Objekt, das mit dem new Date() Standardkonstruktor new Date() wird mit der aktuellen Uhrzeit in der Standardzeitzone des Systems initialisiert

Es ist jedoch möglich, das durch den Date-Objekt beschriebene Datum in einer anderen Zeitzone java.text.SimpleDateFormat , z. B. mit java.text.SimpleDateFormat :

Date date = new Date();
//print default time zone
System.out.println(TimeZone.getDefault().getDisplayName());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //note: time zone not in format!
//print date in the original time zone
System.out.println(sdf.format(date));
//current time in London
sdf.setTimeZone(TimeZone.getTimeZone("Europe/London"));
System.out.println(sdf.format(date));

Ausgabe:

Central European Time
2016-07-21 22:50:56
2016-07-21 21:50:56

Konvertieren Sie java.util.Date in java.sql.Date

java.sql.Date Konvertierung von java.util.Date in java.sql.Date ist normalerweise erforderlich, wenn ein Date-Objekt in eine Datenbank geschrieben werden muss.

java.sql.Date ist ein Wrapper um den Millisekundenwert und wird von JDBC zur Identifizierung eines SQL DATE Typs verwendet

Im folgenden Beispiel verwenden wir den Konstruktor java.util.Date() , der ein Date-Objekt erstellt und es initialisiert, um die Zeit auf die nächste Millisekunde darzustellen. Dieses Datum wird in der convert(java.util.Date utilDate) -Methode verwendet, um ein java.sql.Date Objekt zurückzugeben

Beispiel

public class UtilToSqlConversion {
    
    public static void main(String args[])
    {
        java.util.Date utilDate = new java.util.Date();
        System.out.println("java.util.Date is : " + utilDate);
        java.sql.Date sqlDate = convert(utilDate);
        System.out.println("java.sql.Date is : " + sqlDate);
        DateFormat df = new SimpleDateFormat("dd/MM/YYYY - hh:mm:ss");
        System.out.println("dateFormated date is : " + df.format(utilDate));
    }

    private static java.sql.Date convert(java.util.Date uDate) {
        java.sql.Date sDate = new java.sql.Date(uDate.getTime());
        return sDate;
    }

}

Ausgabe

java.util.Date is : Fri Jul 22 14:40:35 IST 2016
java.sql.Date is : 2016-07-22
dateFormated date is : 22/07/2016 - 02:40:35

java.util.Date enthält sowohl Datums- als auch Zeitinformationen, wohingegen java.sql.Date nur java.sql.Date enthält

Ortszeit

Um nur den Zeitteil eines Datums zu verwenden, verwenden Sie LocalTime. Sie können ein LocalTime-Objekt auf mehrere Arten instanziieren

  1. LocalTime time = LocalTime.now();
  2. time = LocalTime.MIDNIGHT;
  3. time = LocalTime.NOON;
  4. time = LocalTime.of(12, 12, 45);

LocalTime verfügt außerdem über eine integrierte toString-Methode, die das Format sehr gut anzeigt.

System.out.println(time); 

Sie können Stunden, Minuten, Sekunden und Nanosekunden auch vom LocalTime-Objekt abrufen, addieren und subtrahieren

time.plusMinutes(1);
time.getMinutes();
time.minusMinutes(1);

Sie können es mit dem folgenden Code in ein Date-Objekt umwandeln:

LocalTime lTime = LocalTime.now();
Instant instant = lTime.atDate(LocalDate.of(A_YEAR, A_MONTH, A_DAY)).
        atZone(ZoneId.systemDefault()).toInstant();
Date time = Date.from(instant);

Diese Klasse funktioniert sehr gut innerhalb einer Timer-Klasse, um einen Wecker zu simulieren.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow