android sqlite保存并检索utc并转换为本地

时间:2013-04-18 17:34:24

标签: android sqlite utc

有人可以帮忙解决这个问题:

在我的SQLite数据库中,我有一个TEXT字段startDateTimeUTCString,用于存储UTC日期时间字符串。

我有一个名为“task”的对象,它有一个名为Date的{​​{1}}属性。我想将startDateTimeLocal(从数据库中检索)的值转换为startDateTimeUTCString类型,然后将其转换为本地时区值,并将其存储到Date中。我将此task.startDateTimeLocal值传递给我的活动进行处理。

处理后我想先将更新后的Date转换为UTC时间,然后转换为字符串值,然后将字符串值保存到数据库字段task.startDateTimeLocal中。

我已经阅读了并尝试了使用startDateTimeUTCStringSimpleDateFormat的大量实现,一直都在解析错误。

非常感谢任何帮助。

提前致谢!

SQLite中的属性是“startDateTimeUTC TEXT NOT NULL DEFAULT” 我的对象中的相应属性是“Date startDateTimeUTC”:     //获取StartDateTimeUTC     public Date getStartDateTimeUTC(){         return this._startDateTimeUTC;     }

DateFormat

在我的AddNewItemActivity上,我有一组静态整数:startYear,startMonth,startDay,startHour,startMinute和一个静态日历startDateCalendar,它表示本地时区datetime值。我使用DatePickerDialogFragment和TimePickerDiaglogFragment来设置它们的值,并设置startDateCalendar来获取这些整数值:

// setting StartDateTimeUTC
public void setStartDateTimeUTC(Date startDateTimeUTC){
    this._startDateTimeUTC = startDateTimeUTC;
}

然后我将startDateCalendar转换为UTC字符串并插入到SQLite数据库中:

startDateCalendar.set(startYear, startMonth, startDay);
startDateCalendar.set(Calendar.HOUR_OF_DAY, startHour);
startDateCalendar.set(Calendar.MINUTE, startMinute);

在我的DAO代码GetAll()方法中,我将String中的值转换为Date type:

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);

在我的列表视图适配器中,我将UTC日期时间值转换为本地时区字符串并将其显示在列表中:

String startDateTimeUTCString = cursor.getString(5);
SimpleDateFormat utcFormat = new SimpleDateFormat();    
Date startDateTimeUTC = utcFormat.parse(startDateTimeUTCString , new ParsePosition(0));

在声明SimpleDateFormat时,我尝试了各种格式......

现在我取出了声明代码中的所有格式,所有服务器错误都消失了。但是我发现在插入过程中从本地到UTC的转换失败了,即保存到SQLite数据库中的字符串不是UAT ......

=================================

我想出了如何将本地日期时间转换为utc字符串以保存到SQLite:

SimpleDateFormat sdf = new SimpleDateFormat();
sdf.setTimeZone(TimeZone.getDefault());
String localString= sdf.format(startDateTimeUTC);

现在我不得不将UTC日期转换为本地字符串以供显示......

2 个答案:

答案 0 :(得分:1)

这将为您提供Android的UTC系统时间毫秒。

Calendar c = Calendar.getInstance();
int utcOffset = c.get(Calendar.ZONE_OFFSET) + c.get(Calendar.DST_OFFSET);  
Long utcMilliseconds = c.getTimeInMillis() + utcOffset;

答案 1 :(得分:0)

我不确定Date是如何工作的,一旦我将字符串转换为Date,它在本地TimeZone中显示值,无论我设置SimpleDateFormat的时区是什么。我需要担心的是在提交到数据库时将日期转换为UTC字符串。我不确定这对于遇到同样问题的其他人是否有任何帮助,目前我认为问题已得到解决。