Was ist wirklich gemeint, wenn Sie Java Date-Dienstprogramme verwenden und etwas veraltet ist? Bedeutet dies, dass es nicht ratsam ist zu verwenden, oder bedeutet es, dass es verboten ist?
Ich vermute, es ist eine schlechte Praxis, veraltete Methoden zu verwenden, bin mir aber nicht sicher und wollte es herausfinden.
Zum Beispiel versuche ich Code wie den folgenden zu verwenden
%Vor%Natürlich ... Dies ist ein High-Level-Beispiel, aber in diesem Fall verwendet mein Modell den Typ Datum , und ich muss das Datum als String abziehen und ein Datum mit erstellen es.
Es funktioniert gut, wie ich es habe, aber es verwendet eine veraltete Methode.
BEARBEITEN - Ich bin zurück gegangen und habe
verwendet %Vor%
Das Datum ist im Format MM / TT / JJJ wie 07/23/2010, aber ich bekomme eine ParseException
Was könnte das sein?
Sie haben Recht, dass dies eine schlechte Praxis ist. In fast allen Fällen geben veraltete Methoden an, was zu verwenden ist, und dies ist keine Ausnahme (siehe die Javadocs ).
Sie versuchen, ein Date
aus einem String
zu erstellen. Aber welches Format hat der String? Wie sollte es geparst werden? Ist es ein britisches oder US-amerikanisches Datumsformat?
Der "richtige" Weg ist, eine Instanz von SimpleDateFormat , und rufen Sie die Methode parse()
auf, um Ihre Textzeichenfolge zu übergeben. Dies funktioniert garantiert in Zukunft und wird jetzt robuster sein.
Viele Leute haben erwähnt, was "Veraltet" bedeutet, aber ich sehe keine Erklärung dafür, warum diese Methoden veraltet sind:
Sun (bevor sie Teil von Oracle waren) lehnte eine Reihe von Methoden in Date
ab, um Leute dazu zu bringen, Calendar
/ GregorianCalendar
Klassen für Datumsmanipulation statt.
Veraltete Objekte oder Methoden bedeuten lediglich, dass Sie, wenn Sie sie im aktuellen Projekt verwenden möchten, lieber das verwenden, was empfohlen ist. Der Grund, warum sie immer noch vorhanden sind, ist für Legacy-Codes, die die veraltete Methode verwendet haben, bevor veraltet war. Ein typisches Beispiel ist StringTokenizer
vs String.split()
method.
Verwenden Sie für Ihr Date-Beispiel SimpleDateFormat
Umwandlung von String in Datum Auf diese Weise können Sie ein Datumsformat erstellen, aus dem Ihr String-Datum analysiert werden kann, um ein Date-Objekt zu erstellen.
Für Ihre BEARBEITEN tun Sie dies
%Vor%ParseException wird verursacht, da Sie keine Datumsformatstruktur angegeben haben, sodass SimpleDateFormat nicht wusste, wie Ihr Datum strukturiert wurde.
Was "veraltet" bedeutet
Sie haben vielleicht den Begriff gehört, "selbstironischer Humor" oder Humor das minimiert die Lautsprecher Bedeutung. Eine veraltete Klasse oder Methode ist so. Es ist nicht länger wichtig. Es ist so unwichtig, in Tatsache, dass Sie nicht mehr verwenden sollten es, seit es ersetzt wurde und kann aufhören, in der Zukunft zu existieren.
Java bietet eine Möglichkeit zum Ausdrücken Missbilligung weil als Klasse entwickelt, seine API (Anwendung Programmierschnittstelle) zwangsläufig Änderungen: Methoden werden umbenannt nach Konsistenz, neue und bessere Methoden hinzugefügt und Felder ändern sich. Aber so Änderungen führen zu einem Problem. Du brauchst um die alte API herumzuhalten bis Entwickler machen den Übergang zum Neues, aber Sie wollen das nicht Weiter mit der Programmierung für die alte API.
Die Fähigkeit, eine Klasse abzulehnen, Methode oder Member-Feld löst die Problem. Java unterstützt zwei Mechanismen für die Vernachlässigung: und eine Anmerkung, (unterstützt ab J2SE 5.0) und ein Javadoc-Tag (seit 1.1 unterstützt). Bestehende Aufrufe der alten API werden fortgesetzt zu arbeiten, aber die Annotation verursacht die Compiler, um eine Warnung auszugeben, wenn es findet Verweise auf veraltetes Programm Elemente. Das Javadoc-Tag und zugehörige Kommentare warnen Benutzer vor Verwenden Sie das veraltete Element und erzählen Sie, was stattdessen zu verwenden. Sie stattdessen verwenden.
Veraltet bedeutet, dass es entfernt werden soll, weil es fehlerhaft ist oder einen anderen schlechten Grund hat. Es ist besser, SimpleDateFormat zu verwenden .parse (); , um die Zeichenfolgen zu analysieren.
Wenn Sun (Oracle, was auch immer) eine Java-Methode als veraltet deklariert, heißt das im Allgemeinen, dass sie ihre Meinung geändert haben, sie davon abhalten, sie zu verwenden, und sie könnten sie in einer zukünftigen Version entfernen. Natürlich wird es wahrscheinlich eine lange Zeit dauern, bis es entfernt wird, denn wer weiß, wie viel existierender Code dort draußen verwendet wird, und was ist der Punkt, bestehende Programme zu brechen, nur weil die Erfinder von Java denken, dass sie jetzt eine bessere Vorstellung davon haben etwas tun?
Vermutlich hatten sie einen guten Grund, etwas abzulehnen, also sollten Sie herausfinden, WARUM sie sagen, dass eine neuere Funktion besser ist.
Im Fall veralteter Date-Methoden bedeutet dies normalerweise, dass sie vorschlagen, dass Sie jetzt die Calendar- oder SimpleDateFormat-Klassen verwenden. In Ihrem Fall wahrscheinlich letzteres.
veraltet : etwas, das in der aktuellen Version von Java existiert, aber irgendwann aus zukünftigen Versionen entfernt wird.
Für Ihre Bearbeitung müssen Sie das SimpleDateFormat ordnungsgemäß initialisieren, damit es weiß, welches Format eingefügt wird. Für das Format 07/22/1978:
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Wie bereits erwähnt, waren die java.util.Date-Methoden veraltet, weil das Java-Team glaubte, sie hätten eine bessere Lösung im java.util.Calendar.
Leider erwies sich diese Klasse auch als verwirrend, mühsam und schlecht gestaltet.
Also, ja, Sie sollten veraltete Methoden aus Rücksicht auf ihre Ersetzungen vermeiden. Aber jetzt haben diese Ersetzungen (.Calendar) eine Ersetzung (java.time).
Alle alten Datum-Uhrzeit-Klassen wurden durch das Java ersetzt .time Framework in Java 8. Die neuen Klassen sind vom sehr erfolgreichen Joda-Time Framework inspiriert als Nachfolger konzipiert, konzeptionell ähnlich, aber neu gestaltet. Definiert von JSR 310 . Erweitert um das ThreeTen-Extra Projekt. Weitere Informationen finden Sie im Lernprogramm .
Verwenden Sie das Paket java.time.format
für Analysieren und Erstellen von String-Darstellungen von Datum-Uhrzeit-Werten.
Die neuen Klassen enthalten LocalDate
für die Darstellung eines Datums - Nur Wert ohne Tageszeit.
Wenn Sie toString
für ein LocalDate aufrufen, erhalten Sie eine String-Darstellung des Datumswertes im Standard ISO 8601 Format, JJJJ-MM-TT. Um einen String in anderen Formaten zu generieren, definieren Sie einen anderen Formatierer. Oder rufen Sie die "localize" -Methoden auf, damit java.time bei der Festlegung eines bestimmten lokalisierten Formats die Schwerarbeit ausführt.
Nichts wird brechen, wenn Sie sie benutzen ... noch nicht.
Aber sie werden möglicherweise in zukünftigen Versionen entfernt.
Tags und Links java simpledateformat deprecated parseexception