У меня есть приложение для Android, которое работает с модулем GPS и базой данных SQLite. Вначале все звучит так хорошо, но ужас приходит, когда мне нужно работать с датой () и часовыми поясами.
Небольшой фон
Модуль GPS имеет возможность получать дату со спутника. Это отличная вещь, и она мне нужна в моем приложении, чтобы обеспечить достоверность данных. Дата, возвращаемая из него - время по Гринвичу.
Эта дата вставляется в поле в локальной базе данных как StartTime. StartTime хранится в зашифрованном виде с AES. Когда я расшифровываю StartTime, мне нужно преобразовать его как дату и сохранить формат как GMT.
Что я делаю
Получить данные с GPS в LocationListener:
gpsDate = new Date(location.getTime());
при наличии новой даты () по умолчанию дата GPS преобразуется в текущий часовой пояс устройства. Таким образом, вместо хорошего Вс 5 декабря 14:00:00 по Гринвичу 2010 времени, я получаю Вс 5 декабря 16:00:00 по Гринвичу + 2 2010 . Почему это так? Я просто хотел новую дату из getTime ().
Вставляю данные в базу данных:
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
outputFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
String date = outputFormat.format(gpsDate);
Я получаю дату, когда мне это нужно:
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
outputFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
String myStored = {decrypy from the database}
Date myStartDate = outputFormat.parse(myStoredDate);
myStored показывает: 2010-12-05 14: 00
myStartDate показывает: вс декабрь 05 16:00:00 GMT + 2 2010
Здесь есть кое-что, чего мне не хватает. Мне нужно иметь возможность получить дату в формате GMT, вставить ее, конвертировать, сравнить, вычислить различия. Дата в часовом поясе пользователей нужна мне только тогда, когда мне нужно показать его ему.
Пожалуйста, просветите меня.