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 unFormat 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