将事件添加到日历显示错误的结束日期
Adding event to calendar shows wrong end date
我想以编程方式在日历中添加一个事件。我正在使用下面的代码来创建和日历事件。
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, DateUtils.getMiliseconds("10/10/2017", "09:02 AM");
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, DateUtils.getMiliseconds("10/13/2017", "05:02 PM"));
intent.putExtra(CalendarContract.Events.TITLE, "my title");
intent.putExtra(CalendarContract.Events.EVENT_LOCATION, "my location" );
startActivity(intent);
下面DateUtils.getMiliseconds
是我的方法
static long getMiliseconds(String date, String time){
try{
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy h:mm a");
Date date1 = sdf.parse(date+" "+time);
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar beginCal = Calendar.getInstance();
beginCal.set(cal1.get(Calendar.YEAR),cal1.get(Calendar.MONTH), cal1.get(Calendar.DAY_OF_MONTH), cal1.get(Calendar.HOUR_OF_DAY), cal1.get(Calendar.MINUTE));
return beginCal.getTimeInMillis();
}
catch (Exception e) {
return new Date().getTime();
}
}
在这里,我使用相同的方法来获取开始时间和结束时间的毫秒数。我在日历事件中得到的正确开始时间是 10/10/2017 9:02 AM。但是结束时间是 10/10/2017 10:02 AM 而不是 10/13/2017 5:02 PM。
我已经尝试了 Whosebug 上可用的解决方案,但 none 的解决方案对我有用。
我也尝试传递 Events.DTSTART
和 Events.DTSTART
而不是 EXTRA_EVENT_BEGIN_TIME
和 EXTRA_EVENT_END_TIME
但它也显示错误的日期。
而不是
Calendar cal1 = Calendar.getInstance();
试一试:
calendar = Calendar.getInstance(TimeZone.getDefault());
希望对您有所帮助
当我 运行 您的 getMiliseconds
方法时,它返回的时间(以毫秒为单位)似乎是正确的。这看起来像是 Google 日历的问题,它忽略了 endTime
的参数并使用默认的“startTime
+ 1 小时”作为 endTime
值。
检查此 Google 的问题跟踪器:Google Calendar does not respect event start and end times received via intent。看来这个问题是因为 运行 某些版本的 Android 5.0 设备的股票日历应用程序中存在错误。它适用于 Android 4.4.4。
对于他们中的大多数人来说,将应用程序更新到最新版本可以解决问题,而对于其他人来说,卸载 phone 上日历应用程序的更新就可以了。为您正在测试的设备尝试上述 2 个选项。希望对你有帮助。
我想以编程方式在日历中添加一个事件。我正在使用下面的代码来创建和日历事件。
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, DateUtils.getMiliseconds("10/10/2017", "09:02 AM");
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, DateUtils.getMiliseconds("10/13/2017", "05:02 PM"));
intent.putExtra(CalendarContract.Events.TITLE, "my title");
intent.putExtra(CalendarContract.Events.EVENT_LOCATION, "my location" );
startActivity(intent);
下面DateUtils.getMiliseconds
是我的方法
static long getMiliseconds(String date, String time){
try{
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy h:mm a");
Date date1 = sdf.parse(date+" "+time);
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar beginCal = Calendar.getInstance();
beginCal.set(cal1.get(Calendar.YEAR),cal1.get(Calendar.MONTH), cal1.get(Calendar.DAY_OF_MONTH), cal1.get(Calendar.HOUR_OF_DAY), cal1.get(Calendar.MINUTE));
return beginCal.getTimeInMillis();
}
catch (Exception e) {
return new Date().getTime();
}
}
在这里,我使用相同的方法来获取开始时间和结束时间的毫秒数。我在日历事件中得到的正确开始时间是 10/10/2017 9:02 AM。但是结束时间是 10/10/2017 10:02 AM 而不是 10/13/2017 5:02 PM。
我已经尝试了 Whosebug 上可用的解决方案,但 none 的解决方案对我有用。
我也尝试传递 Events.DTSTART
和 Events.DTSTART
而不是 EXTRA_EVENT_BEGIN_TIME
和 EXTRA_EVENT_END_TIME
但它也显示错误的日期。
而不是
Calendar cal1 = Calendar.getInstance();
试一试:
calendar = Calendar.getInstance(TimeZone.getDefault());
希望对您有所帮助
当我 运行 您的 getMiliseconds
方法时,它返回的时间(以毫秒为单位)似乎是正确的。这看起来像是 Google 日历的问题,它忽略了 endTime
的参数并使用默认的“startTime
+ 1 小时”作为 endTime
值。
检查此 Google 的问题跟踪器:Google Calendar does not respect event start and end times received via intent。看来这个问题是因为 运行 某些版本的 Android 5.0 设备的股票日历应用程序中存在错误。它适用于 Android 4.4.4。
对于他们中的大多数人来说,将应用程序更新到最新版本可以解决问题,而对于其他人来说,卸载 phone 上日历应用程序的更新就可以了。为您正在测试的设备尝试上述 2 个选项。希望对你有帮助。