Cela me rappelle vraiment maintenant, mais j'y suis accro ...
Lorsque j'écrivais un programme pour formater une date en une chaîne, j'ai rencontré un phénomène selon lequel le nombre d'années avançait vers 1900 pour une raison quelconque. En premier lieu, le constructeur qui prend les "year, month, day" de la classe Date
est obsolète, donc c'est certainement une histoire que vous n'avez pas à l'utiliser. Cependant, c'est un exemple d'échec qui se produit lorsque vous l'utilisez négligemment sans le savoir.
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));
}
}
Comme dans cet exemple, si vous créez une instance Date
basée sur la date donnée par le type ʻint et créez un
Format avec
DateFormat`,
3918/06/06
Cette année, c'est 2018, mais c'est 3918. Il a exactement 1900 ans.
Ceci est une spécification de la classe java.util.Date
.
Également écrit en Date (Java Platform SE 8) Cependant, l'implémentation est telle que la valeur de «year» reçue par ce constructeur est l'année de l'année moins 1900.
Comme cela est bien connu de ceux qui le connaissent, le constructeur qui prend la date de java.util.Date
est obsolète de JDK1.1 (il apparaîtra lorsque vous recherchez Date
, donc juste Je vais probablement l'utiliser). Au lieu de cela, il est préférable d'instancier avec java.util.Calendar
puis d'obtenir une instance Date
avec Calendar # getDate
.
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
La date est maintenant sortie normalement.
Recommended Posts