Ich werde jetzt wirklich daran erinnert, aber ich bin süchtig danach ...
Als ich ein Programm schrieb, um ein Datum in eine Zeichenfolge zu formatieren, stieß ich auf ein Phänomen, bei dem die Anzahl der Jahre aus irgendeinem Grund um 1900 anstieg. Erstens ist der Konstruktor, der das "Jahr, den Monat, den Tag" der "Date" -Klasse verwendet, veraltet, sodass es sicherlich eine Geschichte ist, die Sie nicht verwenden müssen. Dies ist jedoch ein Beispiel für einen Fehler, der auftritt, wenn Sie ihn unachtsam verwenden, ohne es zu wissen.
DateTest.java
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
int year = 2018;
int month = 5;
int dayOfMonth = 6;
Date todayDate = new Date(year, month, dayOfMonth);
DateFormat dateFormat = SimpleDateFormat.getDateInstance();
System.out.println(dateFormat.format(todayDate));
}
}
Wenn Sie wie in diesem Beispiel eine "Date" -Instanz basierend auf dem vom Typ "int" angegebenen Datum erstellen und mit "DateFormat" ein "Format" erstellen,
3918/06/06
Dieses Jahr ist 2018, aber es ist 3918. Es ist genau 1900 Jahre alt.
Dies ist eine Spezifikation der Klasse "java.util.Date". Auch geschrieben in Datum (Java Platform SE 8) Die Implementierung ist jedoch so, dass der Wert von "Jahr", den dieser Konstruktor erhält, das Jahr des Jahres minus 1900 ist.
Wie denjenigen bekannt ist, die damit vertraut sind, ist der Konstruktor, der das Datum "java.util.Date" verwendet, in JDK1.1 veraltet (er wird angezeigt, wenn Sie nach "Datum" suchen, daher ist dies nur eine Selbstverständlichkeit. Ich werde es wahrscheinlich benutzen). Stattdessen sollten Sie es mit java.util.Calendar
instanziieren und dann mit Calendar # getDate
eine Date
-Instanz abrufen.
DateTest.java
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class DateTest {
public static void main(String[] args) {
int year = 2018;
int month = 5;
int dayOfMonth = 6;
Calendar todayDate = Calendar.getInstance();
todayDate.set(year, month, dayOfMonth);
DateFormat dateFormat = SimpleDateFormat.getDateInstance();
System.out.println(dateFormat.format(todayDate.getTime()));
}
}
2018/07/06
Das Datum wird jetzt normal ausgegeben.
Recommended Posts