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

問題は、ピックアップする時間が送信元の時間よりも 1 時間短く、タイムゾーンが常に「中央ヨーロッパ夏時間 GMT +2」のようなデバイスのタイムゾーンに設定されていることです。

助けてください!!!!!!!!!!!!!!!

4

2 に答える 2

2

同じ問題がありましたが、解決策を見つけました。
デフォルトでは、TimeZone はデバイスの timeZone に設定されます。これを変更して特定の timeZone に設定するには、getRawOffset() プロパティを使用します。
このメソッドは、現在の時刻からのミリ秒を計算します。したがって、指定した timeZone のミリ秒を加算し、デフォルトの timeZone のミリ秒を減算できます。

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

このリンクを確認する必要がありますカレンダー プロバイダー インテント、タイムゾーンをインテント エクストラとして配置できないため、イベントの と を UTC で送信しbeginTimeますendTime

イベント挿入インテントの例で言及されているように、「イベントの時刻をフォームに事前入力するために、CalendarContract.EXTRA_EVENT_BEGIN_TIMEおよびCalendarContract.EXTRA_EVENT_END_TIME の追加フィールドを使用します。これらの時刻の値は、エポックからの UTC ミリ秒である必要があります。」

于 2014-08-04T07:39:23.647 に答える