Java Convert unixtime на сегодняшний день, давая неверные результаты - PullRequest
1 голос
/ 29 марта 2012

Я пытаюсь конвертировать unixtime в дату, но получаемые результаты неверны: например, у меня есть unixtime: 1354312800, посещающий этот сайт:
введите описание ссылки здесь
результат:
Пт, 30 ноября 2012 г. 22:00:00 по Гринвичу

но когда я это сделаю:

long timestamp = 1354312800;
java.util.Date time=new java.util.Date((long)timestamp*1000);
int d = time.getDay();
int m = time.getMonth();

я получаю: d = 6 << это неправильно должно быть 30. </strong>
и м - 11

Ответы [ 2 ]

4 голосов
/ 29 марта 2012

Вы приняли getDay() за getDate().

getDay Javadoc:

Возвращает день недели, представленный этой датой.Возвращаемое значение (0 = воскресенье, 1 = понедельник, 2 = вторник, 3 = среда, 4 = четверг, 5 = пятница, 6 = суббота) представляет день недели, который содержит или начинается с момента времени, представленного этимДата объекта, как интерпретируется в местном часовом поясе.

Так что просто используйте getDate() вместо getDay()

Для получения дополнительной информации, проверьте Javadoc: http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html


Если ваше время все ещеотличается от времени в Unix, которое вы пробовали, вы, вероятно, живете не в часовом поясе GMT, поэтому вам нужно узнать дату для соответствующего часового пояса:

SimpleDateFormat df = new SimpleDateFormat();
df.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(df.format(time));

Это должно дать вам ожидаемый результат, даже есливаш местный таймзон отличается от GMT

2 голосов
/ 29 марта 2012

Метод Date.getDay() дает день недели (0 = воскресенье, ..., 6 = суббота).

Измените его на Date.getDate() и в результате вы получите 30.


Некоторые примечания:

  • Класс Dateв значительной степени устарела.Вместо этого используйте Calendar или, что еще лучше, библиотеку времени Joda .

  • Ваше преобразование довольно забавное.(long)timestamp*1000 преобразует timestamp в длинное значение (которое равно уже длинному значению), а затем автоматически расширяет 1000 в длинное значение для выполнения умножения.

    Я быпропустите преобразование, (long), в целом, и если вы хотите явно сказать, что факторы являются длинными значениями, используйте вместо этого 1000L, что является длинным литералом.

...