我正在尝试通过如下所示的意图将事件导出到本地日历:
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什么都不做。
答案 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();
}
}