我正在开发一个Android应用程序,其目标是在PHP应用程序和智能手机之间同步事件。一切都适用于“常规”活动,但我有“全天”活动的问题。我按照官方Android文档,将EVENT_TIMEZONE设置为UTC,并设置dtstart和dtend的时间戳,对应于午夜UTC。
但是,根据活动创建时的手机时区,当我打开Google日历时,事件为:
您应该知道我的测试是在法国进行的,目前我们的格林尼治标准时间+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电话活动:
手机时区的事件已更改为GMT-1:
所以我把日历中包含了那些全天活动,一个用我的应用程序创建,另一个用Google日历创建:
如您所见,通过Google日历创建的活动将设置为凌晨2点开始,而不是午夜!所以我尝试将dstart和dtend时间戳设置为电话时区的午夜(即凌晨2点,如果手机的时区是格林威治标准时间+2,或者前一天下午23点,如果GMT-1),但事件仍然是上一天或下一天。
简而言之:我迷失了,我不知道如何在正确的一天开始和结束正确的全天活动,并且当电话的时区发生变化时,不会在日历周围移动!