Die parametrisierte Konstruktoren der java.util.Date Klasse sind veraltet. Was ist die Alternative?

StackOverflow https://stackoverflow.com/questions/1874298

  •  18-09-2019
  •  | 
  •  

Frage

Was kann ich verwenden, um dies zu ersetzen, new Date(2009, 12, 9)?

Danke für Ihre Hilfe.

War es hilfreich?

Lösung

Idealerweise verwenden Joda Zeit statt. Es ist ein unendlich überlegen API zum integrierten in einem. Sie würden dann zwischen LocalDateTime und DateTime je nach Ihren genauen Anforderungen (es ist ein kompliziertes Gebiet - ich werde versuchen, nicht in einem Satz oder zwei, zusammenfassen, aber die docs einen guten Job).

Falls unbedingt erforderlich, verwenden Sie einen java.util .Calendar und konvertieren, das zu einem Date, wenn Sie benötigen.

Andere Tipps

Kalender!

Calendar cal = Calendar.getInstance();
cal.set(2009, Calendar.DECEMBER, 12);

Beachten Sie, dass ich nicht 12 war für Dezember gesetzt, weil sie 11 ist eigentlich (Januar: 0).

Dann können Sie Sekunden, Minuten, Stunden, Tage, Monate oder Jahre leicht mit hinzuzufügen oder entfernen

cal.add(Calendar.HOUR, 2);
cal.add(Calendar.MONTH, -5);

Und schließlich, wenn Sie ein Datum:

cal.getTime();

Wenn Sie die Javadoc es Punkte, die Sie Kalender .

  

Ab JDK Version 1.1, ersetzt durch Calendar.set (Jahr + 1900, Monat,   Datum, Stunden, Minuten) oder GregorianCalendar (Jahr + 1900, Monat, Datum, Uhr,   min).

Wenn Sie den Date Konstruktor sehen params Sie werden sehen, warum es veraltet war:

  

Parameter:

year - the year minus 1900.
month - the month between 0-11.
date - the day of the month between 1-31.
hrs - the hours between 0-23.
min - the minutes between 0-59.

year ist nicht das, was Sie erwarten, und weder ist month.

Um das Datum stellen Sie erwähnt haben Sie Date wie dies (nicht empfohlen)

aufrufen müssen
new Date(2009-1900, 12-1, 9)

Die Alternative mit Calendar ist

Calendar cal = Calendar.getInstance();
cal.set(2009, 11, 9); //year is as expected, month is zero based, date is as expected
Date dt = cal.getTime();

Sie können auch die Simple Objekt:

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


public class DateTest {
    public static void main( String [] args ) throws ParseException {
        SimpleDateFormat sdf =  new SimpleDateFormat("yyyy, MM, dd");
        Date date = sdf.parse("2009, 12, 9");
        System.out.println( date );
    }
}

Tim, in Ihren Kommentaren erwähnt, dass Sie dies in einem GXT Kontext tun - das heißt in GWT Client-Code. GWT unterstützt GregorianCalendar nicht und Sie werden wahrscheinlich nicht in der Lage sein JodaTime durch die GWTCompiler zu setzen (Sie in der Lage sein können, aber wollen Sie wirklich).

Ich glaube, Sie links sind wirklich mit der Option zur Verwendung von JNSI wenn Sie Kalendervorgänge in GWT tun wollen. Siehe die Date-Klasse in JavaScript.

Leider gibt es in Java Datum Unterstützung ist völlig schrecklich. Offiziell würden Sie wahrscheinlich dies mit Kalender zu tun haben, aber das sollte meiner Meinung nach nicht notwendig sein. Wie andere schon erwähnt haben, ist Joda Zeit viel besser, aber immer noch nicht ganz so einfach, wie die Datumsangaben in Ruby on Rails zu verwenden.

Ich bin nicht bekannt, dass Java-Paket, das Ihnen ganz diese Menge an Datum Unterstützung gibt (Joda fällt kurz ein wenig, aber nahe kommt), aber in Groovy, mit TimeCategory gibt Ihnen sehr Ruby on Rails-like Datum Unterstützung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top