2010-12-27 9 views
2

Следующий код:формат SimpleDateFormat неправильные значения

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. Что происходит?

+0

Глупая ошибка. Спасибо всем за ответы. Вы все ответили в ту же минуту, поэтому не уверены, кому направить правильный ответ. – Finbarr

ответ

8

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

Date date = new Date(1293253200L*1000L); 
Sat Dec 25 06:00:00 CET 2010 
4

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

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

2

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

0

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

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

Параметры:

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

Смежные вопросы