Android - 将活动导出到本地日历

时间:2014-07-28 14:02:08

标签: java android

我正在尝试通过如下所示的意图将事件导出到本地日历:

    Intent intent = new Intent(Intent.ACTION_EDIT);
    intent.setType("vnd.android.cursor.item/event");
    intent.putExtra("beginTime", 1407880800000);
    intent.putExtra("allDay", false);
    intent.putExtra("endTime", 1408053600000);
    intent.putExtra("title", helper.events.get(position).optString("name"));
    intent.putExtra("description",  helper.events.get(position).optString("description"));
    intent.putExtra("eventLocation", helper.events.get(position).optString("address"));
    intent.putExtra("eventTimezone", TimeZone.getTimeZone("GMT"));
    startActivity(intent);

日期从unix时间戳转换为毫秒,应该开始: 2014年8月12日22:00:00 并完成 2014年8月14日22:00:00 。但是当我将它插入日历时,它会增加+2小时的时间,所以我在00:00:00和结束时间15:00 00:00:00得到第13个。

如何插入正确的时间?

编辑:如果我删除时区或将其改为其他任何内容,但GMT什么都不做。

2 个答案:

答案 0 :(得分:0)

难道你是以某种方式进入GMT + 2吗?如果是这样,您的本地日历将在您的时区中显示该事件,并增加2小时。

在这种情况下,您需要将正确的eventTimezone设置为TimeZone.getTimeZone(“GMT + 02”)

答案 1 :(得分:0)

我最终需要将毫秒转换为字符串,然后使用simpledateformat并将其转换回毫秒,将默认时区添加到simpledateformat。像这样:

public void exportEventToCalendar() {
    try {
        SimpleDateFormat startFormat = new SimpleDateFormat(getString(R.string.date_format));
        startFormat.setTimeZone(TimeZone.getDefault());
        Date dateS = startFormat.parse(Methods.getMethods().getDate(getActivity(), helper.events.get(position).optLong("starts"), R.string.date_format));
        long start = dateS.getTime();

        SimpleDateFormat endFormat = new SimpleDateFormat(getString(R.string.date_format));
        endFormat.setTimeZone(TimeZone.getDefault());
        Date dateE = endFormat.parse(Methods.getMethods().getDate(getActivity(), helper.events.get(position).optLong("ends"), R.string.date_format));
        long end = dateE.getTime();

        Log.e("Start", "" + start);
        Log.e("Ends", "" + end);

        Intent intent = new Intent(Intent.ACTION_EDIT);
        intent.setType("vnd.android.cursor.item/event");
        intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, start);
        intent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, false);
        intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end);
        intent.putExtra(CalendarContract.Events.TITLE, helper.events.get(position).optString("name"));
        intent.putExtra(CalendarContract.Events.DESCRIPTION,  helper.events.get(position).optString("description"));
        intent.putExtra(CalendarContract.Events.EVENT_LOCATION, helper.events.get(position).optString("address"));
        startActivity(intent);

    } catch (ParseException e) {
        e.printStackTrace();
    }
}