Неправильные значения формата SimpleDateFormat - PullRequest
2 голосов
/ 27 декабря 2010

следующий код:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd");
System.out.println(sdf.format(new Date(1293253200))); // 12/25/2010 05:00 GMT
System.out.println(sdf.format(new Date(1293339600))); // 12/26/2010 05:00 GMT
System.out.println(sdf.format(new Date(1293426000))); // 12/27/2010 05:00 GMT

печать:

01/16
01/16
01/16

При использовании значения по умолчанию DateFormat через SimpleDateFormat.getDateInstance(); эти даты печатаются как 16-Jan-1970. Что происходит?

Ответы [ 4 ]

8 голосов
/ 27 декабря 2010

Вы смешиваете миллисекунды и секунды.1293253200 - это действительно 16. Январь 2010 года. Вы должны умножить на 1000, чтобы получить нужные даты:

Date date = new Date(1293253200L*1000L);
Sat Dec 25 06:00:00 CET 2010
4 голосов
/ 27 декабря 2010

Пожалуйста, ознакомьтесь с документацией конструктора Date(long): он принимает значения в миллисекундах, а не секундах.
new Date(1293253200000l) должно работать нормально.

PS.Многие IDE предоставляют встроенную документацию, поэтому вам даже не нужно открывать браузер.

2 голосов
/ 27 декабря 2010

Конструктор Date ожидает количество миллисекунд с начала эпохи, но число, которое вы передаете, равно секундам с начала эпохи.Умножьте это на 1000, и вы получите правильную дату.

0 голосов
/ 26 мая 2012

Как указал Мхаллер, в этом случае вы действительно ошиблись в миллисекундах и секундах.

Перегруженный конструктор Date принимает свой параметр как long. Следующий фрагмент страницы java-doc.

Параметры:

дата - миллисекунды с 1 января 1970 года по 00:00:00 мск не должны превышать представление в миллисекундах за год 8099. Отрицательное число указывает количество миллисекунд до 1 января 1970 года, 00:00:00 GMT.

...