有人可以帮忙解决这个问题:
在我的SQLite数据库中,我有一个TEXT
字段startDateTimeUTCString
,用于存储UTC日期时间字符串。
我有一个名为“task”的对象,它有一个名为Date
的{{1}}属性。我想将startDateTimeLocal
(从数据库中检索)的值转换为startDateTimeUTCString
类型,然后将其转换为本地时区值,并将其存储到Date
中。我将此task.startDateTimeLocal
值传递给我的活动进行处理。
处理后我想先将更新后的Date
转换为UTC时间,然后转换为字符串值,然后将字符串值保存到数据库字段task.startDateTimeLocal
中。
我已经阅读了并尝试了使用startDateTimeUTCString
和SimpleDateFormat
的大量实现,一直都在解析错误。
非常感谢任何帮助。
提前致谢!
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日期转换为本地字符串以供显示......
答案 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字符串。我不确定这对于遇到同样问题的其他人是否有任何帮助,目前我认为问题已得到解决。