Может кто-нибудь, пожалуйста, помогите выяснить этот вопрос:андроид SQLite сохранять и извлекать и конвертировать UTC местных
В моей базе данных SQLite У меня есть TEXT
поля startDateTimeUTCString
, который предназначен для хранения строки UTC DateTime.
У меня есть объект под названием «задача», который имеет свойство Date
под названием startDateTimeLocal
. Я хочу преобразовать значение startDateTimeUTCString
(полученный из базы данных) в Date
, а затем преобразовать его в местное значение часового пояса и сохранить его в task.startDateTimeLocal
. Я передаю значение Date
вокруг своей активности для обработки.
После обработки я хочу сначала преобразовать обновленный task.startDateTimeLocal
в UTC, а затем преобразовать в строковое значение, а затем сохранить строковое значение в поле базы данных startDateTimeUTCString
.
Я прочитал и попытался так много внедрения использования SimpleDateFormat
и DateFormat
, все время получал ошибки анализа.
Любая помощь будет принята с благодарностью.
Заранее благодарен!
Свойство в SQLite является "startDateTimeUTC TEXT NOT NULL DEFAULT" Соответствующее свойство в моем объекта "Дата startDateTimeUTC": // получение StartDateTimeUTC общественности Дата getStartDateTimeUTC() { возвращение this._startDateTimeUTC; }
// setting StartDateTimeUTC
public void setStartDateTimeUTC(Date startDateTimeUTC){
this._startDateTimeUTC = startDateTimeUTC;
}
На моем AddNewItemActivity, у меня есть набор статических чисел: StartYear, StartMonth, startDay, StartHour, startMinute и статический Календарь startDateCalendar, который представляет собой локальное значение часового пояса DateTime. Я использую DatePickerDialogFragment и в TimePickerDiaglogFragment установить их значения и установить startDateCalendar принимать эти целые значения:
startDateCalendar.set(startYear, startMonth, startDay);
startDateCalendar.set(Calendar.HOUR_OF_DAY, startHour);
startDateCalendar.set(Calendar.MINUTE, startMinute);
Я затем преобразовать startDateCalendar в строку UTC и вставить в SQLite базу данных:
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String utcString = sdf.format(sourceCalendar.getTime());
ContentValues contentValues = new ContentValues();
.....
ContentValues contentValues = new ContentValues();
contentValues.put("startDateTimeUTC", utcString);
db.insert("Task", null, contentValues);
В моей DAO код GETALL() метод преобразовать значение из строки в Дата тип:
String startDateTimeUTCString = cursor.getString(5);
SimpleDateFormat utcFormat = new SimpleDateFormat();
Date startDateTimeUTC = utcFormat.parse(startDateTimeUTCString , new ParsePosition(0));
на мой взгляд, список адаптер преобразовать в UTC DAT Значение etime в локальной строке часового пояса и отображать его Int он список:
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.setTimeZone(TimeZone.getDefault());
String localString= sdf.format(startDateTimeUTC);
Я пробовал различные форматы при объявлении SimpleDateFormat не повезло вообще ...
теперь я вынул все форматы в кодах декларации, все ошибки сервера исчезли. Однако я узнал, что преобразование из локального в UTC не удалось во время вставки, т. Е. Строка, сохраненная в базе данных SQLite, не является UAT ......
=================================
Я понял, как преобразовать DateTime в локальном строка для UTC сохранения в SQLite:
sourceCalendar.setTimeZone(TimeZone.getTimeZone("UTC"));
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String outputDateString = sdf.format(sourceCalendar.getTime());
Теперь я застрял на преобразование даты в формате UTC в локальную строку для отображения цели .....
Не могли бы вы добавить код, который показывает, как вы пытались преобразовать даты наоборот? Каковы были результаты (значения, исключения)? – Trinimon
Вы пробовали http://stackoverflow.com/questions/5617459/convert-utc-time-t0-local-time-in-java-or-groovy –