2017-03-16 114 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));