Android 向日历中添加不考虑时间的事件

Android 向日历中添加不考虑时间的事件,android,xamarin,xamarin.android,android-calendar,Android,Xamarin,Xamarin.android,Android Calendar,我试图添加一个日历事件,但是开始时间和结束时间被忽略,而只是将两者设置为从现在起的下半小时。例如,现在是下午3:51,所以它将开始/结束时间设置为下午4:00 以下是将事件添加到日历的代码: public static void AddToCalendar (DateTime startDate, DateTime endDate, string title, string description = null, string location = null) {

我试图添加一个日历事件,但是开始时间和结束时间被忽略,而只是将两者设置为从现在起的下半小时。例如,现在是下午3:51,所以它将开始/结束时间设置为下午4:00

以下是将事件添加到日历的代码:

public static void AddToCalendar (DateTime startDate, DateTime endDate, string title, 
            string description = null, string location = null) {
            var startDateTicks = DateTime.Now.AddHours (3).ConvertToUnixTimestampMillis ();
            var endDateTicks = DateTime.Now.AddDays (2).AddHours(2).ConvertToUnixTimestampMillis ();

            var intent = new Intent (Intent.ActionInsert);
            intent.SetData (CalendarContract.Events.ContentUri);
            //intent.PutExtra (CalendarContract.Events.InterfaceConsts.Dtstart, startDateTicks);
            //intent.PutExtra (CalendarContract.Events.InterfaceConsts.Dtend, endDateTicks);
            intent.PutExtra (CalendarContract.ExtraEventBeginTime, startDateTicks);
            intent.PutExtra (CalendarContract.ExtraEventEndTime, endDateTicks);
            intent.PutExtra (CalendarContract.EventsColumns.Title, title);
            if (!String.IsNullOrEmpty (description))
                intent.PutExtra (CalendarContract.EventsColumns.Description, description);
            if (!String.IsNullOrEmpty (location))
                intent.PutExtra (CalendarContract.EventsColumns.EventLocation, location);
            ApplicationContext.Activity.StartActivity (intent);
        }
下面是将日期转换为毫秒的扩展方法:

public static double ConvertToUnixTimestampMillis (this DateTime date) {
            var epoch = new DateTime (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            return (long)(date.ToUniversalTime () - epoch).TotalMilliseconds;
        }
下面是日历事件


我尝试设置Dtstart/Dtend以及beginTime和endTime。那么,我遗漏了什么呢?

日历预计从epoch开始需要毫秒,因此您应该使用类似的方法来获得正确的值:

long GetDateTimeMS (int yr, int month, int day, int hr, int min)
{
    Calendar c = Calendar.GetInstance (Java.Util.TimeZone.Default);

    c.Set (Calendar.DayOfMonth, day);
    c.Set (Calendar.HourOfDay, hr);
    c.Set (Calendar.Minute, min);
    c.Set (Calendar.Month, month);
    c.Set (Calendar.Year, yr);

    return c.TimeInMillis;
}
并在代码中这样调用它:

intent.PutExtra (CalendarContract.ExtraEventBeginTime, DateTime.Now.AddHours(3));
intent.PutExtra (CalendarContract.ExtraEventEndTime, DateTime.Now.AddDays(2).AddHours(2));