2013-04-18 2 views
0

Может кто-нибудь, пожалуйста, помогите выяснить этот вопрос:андроид 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 в локальную строку для отображения цели .....

+0

Не могли бы вы добавить код, который показывает, как вы пытались преобразовать даты наоборот? Каковы были результаты (значения, исключения)? – Trinimon

+0

Вы пробовали http://stackoverflow.com/questions/5617459/convert-utc-time-t0-local-time-in-java-or-groovy –

ответ

0

Я не уверен, если это то, как работает Дата, когда я преобразовать строку в Date, она показывает значение в локальном TimeZone независимо от того, в какой временной зоне я устанавливаю SimpleDateFormat. Все, о чем мне нужно беспокоиться, это преобразовать дату в строку UTC при отправке в базу данных. Я не уверен, что это какая-то помощь другим, которые сталкиваются с одной и той же проблемой, пока я думаю, что проблема исправлена.

1

Это даст вам UTC системное время миллисекунд для Android.

Calendar c = Calendar.getInstance(); 
int utcOffset = c.get(Calendar.ZONE_OFFSET) + c.get(Calendar.DST_OFFSET); 
Long utcMilliseconds = c.getTimeInMillis() + utcOffset; 
Смежные вопросы