2013-02-18 9 views
8

Ich versuche, das Datum von gestern zu bekommen. Also schreibe ich die nächste Funktion:Geting gestern - Die Methode getDate() vom Typ Datum ist veraltet

public String getYestrday() { 
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    Date date = new Date(); 
    return dateFormat.format(date.getDate() - 1); 
} 

Aber es gibt mir die nächste Warnung:

The method getDate() from the type Date is deprecated 

und es nicht tun, es funktioniert.

Vielen Dank für Ihre Hilfe.

+1

Der deprecation Text deutet auf 'Calendar', wenn Sie es vollständig –

Antwort

16

Date#getDate() ist eine veraltete Methode nach JDK 1.1. Sie sollten stattdessen die Klasse Calendar verwenden, um Datumsangaben zu bearbeiten.

Von API:

Vor JDK 1.1 musste die Klasse Date zwei weitere Funktionen. Es erlaubte die Interpretation der Daten als Jahr, Monat, Tag, Stunde, Minute, und zweite Werte. Es ermöglichte auch das Formatieren und Parsing von Strings des Datums . Leider war die API für diese Funktionen zur Internationalisierung nicht zugänglich. Ab JDK 1.1 sollte die Calendar-Klasse zum Konvertieren zwischen Datums- und Uhrzeitfeldern verwendet werden, und die DateFormat-Klasse sollte zum Formatieren und Analysieren von Datumsstrings verwendet werden. Die entsprechenden Methoden in Date sind veraltet.

Es wird auch in der API Date#getDate() klar dokumentiert Calendar#get(Calendar.DATE);

Veraltete zu verwenden. Ab JDK Version 1.1, ersetzt durch Calendar.get (Calendar.DAY_OF_MONTH)

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DATE, -1); 
return dateFormat.format(cal.getTime()); 
+3

+1 zur Vermeidung von zusätzlichen Bibliotheken für eine kleine Aufgabe zu lesen. Entweder "Calendar.DAY_OF_MONTH" oder "Calendar.DATE" genügt, sie sind Synonyme. – Gamb

1

Verwenden Sie java.util.Calendar, um es zu tun. Oder versuchen Sie JODA.

0

Sie Calendar Klasse verwenden können, um die gleiche Aufgabe zu tun:

Calendar c = new Calendar(); 
//c.add(Calendar.DAY_OF_MONTH, -1); 
Date d = c.getTime(); 
+0

Der leere Konstruktor von java.util.Calendar ist geschützt. Verwenden Sie Calendar.getInstance(). GetTime(); stattdessen – BlondCode

1

vermeiden java.util.Date & .Kalender

Die accepted answer ist korrekt. Die Klassen java.util.Date und .Calendar sind jedoch bekanntermaßen mühsam. Vermeide sie. Verwenden Sie entweder Joda-Time oder die neue java.time package (in Java 8).

Separate Date-Time Manipulation von der Formatierung

Auch mischt der Code in der Frage Datum Zeitarbeit mit der Formatierung. Trennen Sie diese Aufgaben, um Ihren Code zu vereinfachen und das Testen/Debuggen zu vereinfachen.

Zeitzone

Zeitzone ist in Datum Zeitarbeit kritisch. Wenn Sie das Problem ignorieren, wird die Standardzeitzone der JVM angewendet. Eine bessere Vorgehensweise besteht darin, immer anzugeben, anstatt sich auf den Standardwert zu verlassen. Auch wenn Sie den Standard wünschen, rufen Sie explizit getDefault.

Der Beginn des Tages wird durch die Zeitzone definiert. Ein neuer Tag dämmert früher in Paris als in Montréal. Wenn Sie also mit "gestern" den ersten Moment dieses Tages meinen, dann sollten Sie (a) eine Zeitzone angeben und (b) withTimeAtStartOfDay anrufen.

Joda-Time

Beispielcode in Joda-Time 2.3.

DateTimeZone timeZone = DateTimeZone.forID("Europe/Paris"); 
DateTime today = DateTime.now(timeZone); 

Oder konvertieren von einem java.util.Date-Objekt.

DateTime today = new DateTime(myJUDate, timeZone); 

Subtrahieren Sie einen Tag, um zu gestern (oder Tag vorher) zu gelangen.

DateTime yesterday = today.minusDays(1); 
DateTime yesterdayStartOfDay = today.minusDays(1).withTimeAtStartOfDay(); 

standardmäßig Joda-Time und java.time Parse/erzeugen Strings in ISO 8601 Format.

String output = yesterdayStartOfDay.toString(); // Uses ISO 8601 format by default. 

einen Formatierer für einen ganzen Tag in einem vierstelliges Jahr zweistelliger Monat des Jahres verwenden, und zweistelligen Tag des Monats (yyyy-MM-dd). Ein solcher Formatierer ist bereits in Joda-Time definiert.

String outputDatePortion = ISODateFormat.date().print(yesterdayStartOfDay); 
0

Nach Arbeiten für mich

int date = Calendar.getInstance().get(Calendar.DAY_OF_MONTH); 
Verwandte Themen