Android AllDay事件在错误的一天开始或结束

时间:2016-06-22 16:23:05

标签: android calendar timezone google-calendar-api timezone-offset

我正在开发一个Android应用程序,其目标是在PHP应用程序和智能手机之间同步事件。一切都适用于“常规”活动,但我有“全天”活动的问题。我按照官方Android文档,将EVENT_TIMEZONE设置为UTC,并设置dtstart和dtend的时间戳,对应于午夜UTC。

但是,根据活动创建时的手机时区,当我打开Goog​​le日历时,事件为:

  • 正确显示电话时区为GMT + 2
  • 在电话时区为GMT-11前一天开始 - > GMT + 1
  • 在电话时区为GMT + 3后一天完成 - > GMT + 13

您应该知道我的测试是在法国进行的,目前我们的格林尼治标准时间+2。 Google日历配置为使用手机时区。

以下是插入前的事件信息转储:

06-22 17:41:02.339: V/EventEntity - addToCalendar(6535): 
Event to be inserted : 
    calendar_id=8 
    dtstart=1466719200000      ( = 24/6/2016 0:00:00 )
    eventLocation= 
    title=Server AllDay Event 
    dtend=1466805600000        ( = 25/6/2016 0:00:00 )
    allDay=true 
    description= 
    hasAlarm=1 
    eventStatus=1 
    eventTimezone=UTC

以下是执行事件插入的方法的代码,其中前一个日志来自:

Context context = AppContext.getAppContext();
ContentValues eventValues = this.getValuesForCalendar();

Log.v("EventEntity - addToCalendar", "Event to be inserted : " + eventValues);

Uri eventUri = context.getContentResolver().insert(Uri.parse("content://com.android.calendar/events"), eventValues);
this.setSystem_id(Long.parseLong(eventUri.getLastPathSegment()));

// === RAPPEL DE RDV ===
String reminderUriString = "content://com.android.calendar/reminders";

ContentValues reminderValues = new ContentValues();

reminderValues.put("event_id", this.getSystem_id());
reminderValues.put("minutes", 5);

// Default(0), Alert(1), Email(2), SMS(3)
reminderValues.put("method", 0);

context.getContentResolver().insert(Uri.parse(reminderUriString), reminderValues);
// =====================

然而,当事件正确显示时,如果手机时区发生变化,事件将在前一天或第二天进行。使用Google日历创建的“全天”事件的行为不一样:

GMT + 2电话活动:

Events with phone at GMT+2

手机时区的事件已更改为GMT-1:

Events with phone's timezone changed to GMT-1

所以我把日历中包含了那些全天活动,一个用我的应用程序创建,另一个用Google日历创建:

calendar dump

如您所见,通过Google日历创建的活动将设置为凌晨2点开始,而不是午夜!所以我尝试将dstart和dtend时间戳设置为电话时区的午夜(即凌晨2点,如果手机的时区是格林威治标准时间+2,或者前一天下午23点,如果GMT-1),但事件仍然是上一天或下一天。

简而言之:我迷失了,我不知道如何在正确的一天开始和结束正确的全天活动,并且当电话的时区发生变化时,不会在日历周围移动!

0 个答案:

没有答案