1

我正在使用以下代码将事件添加到日历

    Intent intent = new Intent(Intent.ACTION_INSERT);
    intent.setType("vnd.android.cursor.item/event");
    intent.putExtra(Events.TITLE, "my event title");
    intent.putExtra(Events.EVENT_LOCATION, "my city");
    intent.putExtra(Events.DESCRIPTION, "description of this event");

    intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, dep.getTimeInMillis());
    intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME,  arr.getTimeInMillis());        

    intent.putExtra(CalendarContract.Events.EVENT_TIMEZONE, departureTimeZone);
    intent.putExtra(CalendarContract.Events.EVENT_END_TIMEZONE, arrivalTimeZone);

    // Making it private and shown as busy
    intent.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE);
    intent.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    CoreApplication.getContext().startActivity(intent);

问题是它接收的时间比我发送的原始时间短一小时,并且时区始终设置为设备的时区,如“中欧夏令时 GMT +2”

请帮忙!!!!!!!!!!!!!!!

4

2 回答 2

2

有同样的麻烦,但找到了出路。
TimeZone 默认设置为设备的时区。要更改此设置并将其设置为特定时区,请使用 getRawOffset() 属性。
此方法从当前时间计算毫秒数。因此,您可以添加指定时区的毫秒数并减去默认时区的毫秒数。

当我尝试将其更改为 timeZone 'GMT_ID'

values.put(CalendarContract.Events.DTSTART, startDate.getTime()  +TimeZone.getTimeZone(GMT_ID).getRawOffset() -TimeZone.getDefault().getRawOffset());

希望这可以帮助。

于 2016-09-26T10:22:40.990 回答
0

您应该检查此链接Calendar Provider intents,它表示我们不能将时区作为意图附加内容,因此以 UTC 发送事件的beginTimeand endTime

在事件插入意图的示例中提到,“它使用CalendarContract.EXTRA_EVENT_BEGIN_TIMECalendarContract.EXTRA_EVENT_END_TIME 额外字段来使用事件时间预填充表单。这些时间的值必须以 UTC 毫秒为单位从纪元开始。”

于 2014-08-04T07:39:23.647 回答