Как я могу конвертировать миллисекунды в соответствующую дату правильно? - PullRequest
0 голосов
/ 28 октября 2011

У меня проблема с датами.

Я уверен, что эти миллисекунды 1317322560000 представляют дату Чт 29 сентября 18:56:00 GMT + 02: 00 2011 в Италии.

Но с использованием класса Calendar дата Чт 29 сентября 20:56:00 GMT + 02: 00. Я думаю, это происходит потому, что действует летнее расписание.

как я могу преобразовать миллисекунды в соответствующую дату, верно?

Ответы [ 2 ]

2 голосов
/ 28 октября 2011

System.currentTimeMillis () возвращает «разницу, измеряемую в миллисекундах, между текущим временем и полночью 1 января 1970 года по Гринвичу». (т.е. по Гринвичу).

Итак, «Дата» 1317322560000 у вас есть 29.09.2011: 18: 56: 00 по Гринвичу. В Италии 29 сентября смещение от GMT составляет +2 часа (из-за «летнего времени» или, если говорить технически, летнее время = Летнее время ). С 30/10/2011: 03: 00: 00 (кстати, в следующее воскресенье) в Италии будет «зимнее время» (без летнего времени), поэтому смещение будет +1).

Таким образом, вы правильно получите Чт 29 сентября 20:56:00 CEST 2011 (18:56:00 + 2 часа смещения во временном поясе Италии) Пожалуйста, проверьте этот код, который показывает все эти вещи (это Groovy).

import java.text.DateFormat
import java.util.TimeZone

println Locale.getDefault()
Date d = new Date(1317322560000)
println d
Locale.setDefault(new Locale("it", "IT"))
println Locale.getDefault()

DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
println df.getTimeZone().getOffset(1317322560000) + " => +2h offset in 'summer time' (DST on)"

df.setTimeZone(TimeZone.getTimeZone("GMT+00:00"))
println df.format(d)
df.setTimeZone(TimeZone.getTimeZone("GMT+01:00"))
println df.format(d)
df.setTimeZone(TimeZone.getTimeZone("GMT+02:00"))
println df.format(d)
df.setTimeZone(TimeZone.getTimeZone("Europe/Rome"))
println df.format(d)
println "---"

Date winterDate = new Date(1321382560000)
println winterDate
println df.getTimeZone().getOffset(1321382560000) + " => +1h offset in 'winter time' (DST off)"

Результат этого:

es_ES
Thu Sep 29 20:56:00 CEST 2011
it_IT
7200000 => +2h offset in 'summer time' (DST on)
giovedì 29 settembre 2011 18.56.00 GMT+00:00
giovedì 29 settembre 2011 19.56.00 GMT+01:00
giovedì 29 settembre 2011 20.56.00 GMT+02:00
giovedì 29 settembre 2011 20.56.00 CEST
---
Tue Nov 15 19:42:40 CET 2011
3600000 => +1h offset in 'winter time' (DST off)
0 голосов
/ 28 октября 2011

new Date(1317322560000l)

выходы

Thu Sep 29 20:56:00 CEST 2011

так же, как ваш календарь. Почему это должно быть 18:56?

...