По какой-то причине у меня всегда самое сложное время, чтобы получать временные отметки для правильной отображения, но в любом случае это моя проблема.Преобразование метки времени UTC в метку времени локального устройства
Я тянущие события из Calendar Provider API
и некоторые события, такие как US Holidays
события календаря в формате UTC, поэтому метка времени не то, что она должна быть на устройстве (если устройство не находится в том часовом поясе, конечно).
У меня есть отметка времени 1374105600000
которая 07/18/2013 00:00:00 UTC
так 18 июля в полночь UTC. То, что я хочу, - это отметка времени 18-го июля в полночь местного времени устройства.
Это то, что я делаю
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
cal.setTimeInMillis(time);
long offset = tz.getRawOffset(); //gives me -18000000 5hr difference since I am in EST which I think is actually wrong because it should be a 4hr difference now with DST
Так что, если я добавляю это к UTC метки времени
long local = time+offset;
это дает мне неправильное время july 17th at 3:00PM
Если я вычесть раз
long local = time-offset;
Я все еще получаю неправильное время, это дает мне july 18th at 1:00AM
, но я не думаю, что я должен даже вычитать, потому что это не будет работать для людей в +
разница в часовом поясе.
Что я делаю неправильно, почему я не могу получить правильное смещение, чтобы получить правильное время?
Я также использовал это как в качестве эталона слишком Link