revolutionary
revolutionary

Reputation: 3354

Android Calendar timezone not changing with CalendarContract

I am using the following code to add an event to the calender

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

The problem is that the time it picks up is One Hour SHORTER than the original time i send and timezone is always set to device's timezone like "Central European Summer Time GMT +2"

HELP PLEASE!!!!!!!!!!!!!!!

Upvotes: 1

Views: 1774

Answers (2)

d.sanghvi
d.sanghvi

Reputation: 47

Had the same trouble but found a way out.
TimeZone sets to the device's timeZone by default. To change this and to set it to a specific timeZone use the getRawOffset() property.
This method calculates the milliseconds from the current time. So you can add the milliseconds for your specified timeZone and subtract those for the default timeZone.

When I tried to change it to timeZone 'GMT_ID'

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

Hope this helps.

Upvotes: 2

KRP
KRP

Reputation: 294

You should check this link Calendar Provider intents, it says that we can't put timezone as intent extras, so send the beginTime and endTime of the event in UTC.

Mentioned in the example of event insert intent, "It uses the CalendarContract.EXTRA_EVENT_BEGIN_TIME and CalendarContract.EXTRA_EVENT_END_TIME extra fields to pre-populate the form with the time of the event. The values for these times must be in UTC milliseconds from the epoch."

Upvotes: 0

Related Questions