2013-09-25 87 views
1

改變我使用下面的代碼的事件添加到壓延Android的Google日曆時區不CalendarContract

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); 

的問題是,它拿起時是 一小時比原來的時間我送SHORTER和 時區總是被設置爲像「歐洲中部夏令時間GMT + 2」

請幫助設備的時區!!!!!!!!!!!!!!!

回答

0

你應該檢查這個鏈接Calendar Provider intents,它說我們不能把時區作爲意圖的額外,所以發送事件的beginTimeendTime UTC。

在事件中插入意圖的例子中提到,「它使用CalendarContract.EXTRA_EVENT_BEGIN_TIMECalendarContract.EXTRA_EVENT_END_TIM E擴展字段預填充事件的時間的形式。這些時間值必須從時代UTC毫秒。 「

2

有同樣的麻煩,但找到了出路。
TimeZone默認設置爲設備的時區。要更改此設置並將其設置爲特定時區,請使用getRawOffset()屬性。
此方法計算當前時間的毫秒數。因此,您可以爲指定的timeZone添加毫秒,並將其減去默認的timeZone。

當我試圖改變它由於時區 'GMT_ID'

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

希望這有助於。