2017-03-16 109 views
2

我试图添加日历事件,但是开始和结束时间被忽略,相反它只是设置从现在开始的下半个小时。例如,现在是3:51 pm,因此它将开始/结束时间设置为下午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; 
     } 

下面是日历事件。

enter image description here

我试着设置都为dtstart/DTEND和BEGINTIME和结束时间。那么我错过了什么?

回答

2

日历期待自世纪的微秒所以你应该使用这样的事情得到正确的值:

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