pt1*_*123 14 timezone android calendar google-calendar-api
我写了一个简单的代码,使用官方网站上的教程将日常活动插入日历. http://developer.android.com/guide/topics/providers/calendar-provider.html
ContentResolver cr = context.getContentResolver();
ContentValues values = new ContentValues();
values.put(Events.DTSTART, dueDate.getTime());
values.put(Events.ALL_DAY, true);
values.put(Events.DTEND, dueDate.getTime());
values.put(Events.TITLE, "Some Event");
values.put(Events.CALENDAR_ID, mCalID);
TimeZone tz = TimeZone.getDefault();
values.put(Events.EVENT_TIMEZONE, tz.getID());
Uri uri = cr.insert(Events.CONTENT_URI, values);
Run Code Online (Sandbox Code Playgroud)
我发现当我在运行4.03的Acer设备上打开Google Calendar应用程序时,输入的日期已经转回了1天.我当地的时区是Sydney,GMT + 10.
所以我去设置时将当地时区改为美国东部(GMT -5)并运行相同的代码并且日期没有变化.然后我将时区改为GMT + 2,伊斯坦布尔,日期也发生了变化.然后我改为伦敦GMT 0,没有转变.
当我进行非全天活动时,无论时区如何,都会将正确的时间输入日历.
我发现的最接近的错误报告是 http://code.google.com/p/android/issues/detail?id=14051
我在代码中遗漏了什么,或者其他人也遇到了这个问题.
编辑 使用内容解析程序读取事件数据时的进一步检查
ContentResolver cr = context.getContentResolver();
Uri uri = CalendarContract.Events.CONTENT_URI;
String selection =CalendarContract.Events._ID + "=?";
String [] selectionArgs = new String[]{String.valueOf(eventID)};
Run Code Online (Sandbox Code Playgroud)
转换为日期时的长度值是正确的日期和时间,例如.2013年2月14日12.00 AEST(悉尼时间).因此,问题必须出在Google日历阅读这些值的方式中.当我从Android中的日历应用程序手动添加一整天活动,并使用内容解析程序读取时间时,它是AEST(悉尼时间)的日期和上午11点,相当于悉尼的+11 GMT关闭设置.因此,需要在GMT中输入全天事件以避免这种情况,但在文档中没有提到这一点.
所以现在我正在改变时间,以避免这个问题.
小智 6
一些想法:
[1]"如果allDay设置为1,则eventTimezone必须为TIMEZONE_UTC且时间必须对应于午夜边界."
[2] http://developer.android.com/reference/android/provider/CalendarContract.Events.html
| 归档时间: |
|
| 查看次数: |
6889 次 |
| 最近记录: |