2010-03-23 158 views
1

我正在使用D日曆,但我不確定,但我有一個奇怪的問題。從Google日曆導入時,D日曆日期有錯誤的日期?

我基本都爲我的代碼

iCalendar iCal = iCalendar.LoadFromStream(file.InputStream); 
foreach (Event evt in iCal.Events) 
       { 
        DateTime start = evt.DTStart.Date; 
        DateTime end = evt.DTEnd.Date; 
        // loop through it and get values. 
       } 

然而,當我從谷歌導入檯曆掛曆結束日期搞砸對一些我進口的東西。

例如像我有這個

標題:不應該顯示 當:孫老師,3月21日(全天)。

然而,當我將它導入時,我說開始日期是21日,但結束日期是22日,當它應該是21日。

不知道發生了什麼事。

我不太清楚我可以給你們什麼其他信息。

我做了一個cmd行應用程序,並將.ics文件放入其中。如果有人知道一個好地方,我可以上傳它,你們可以看到我的意思。

這是我的命令行輸出。

Start Date Of this Record 
Some one day task 3/25/2010 12:00:00 AM 
End Date of this Record 3/26/2010 12:00:00 AM 


Start Date Of this Record 
Test using quick create(bubble that shows up when clicked on date box) - 1 day t 
ask 3/21/2010 12:00:00 AM 
End Date of this Record 3/22/2010 12:00:00 AM 


Start Date Of this Record 
Spans 2 days 3/30/2010 12:00:00 AM 
End Date of this Record 4/1/2010 12:00:00 AM 

回答

1

如果是全天事件,我認爲結束時間將00:00:00第二天,又名12:00:00 AM。這是不是你所看到的時代?

你給出的最後一個例子確實是兩天(3月有31天),並且是正確的。您看到的輸出與全天事件的定義相關。它從上午12:00開始,到第二天中午12:00結束。

如果你想全天活動,忠實地在同一天只停留,你可以不喜歡一個檢查:

if (((end - start) == TimeSpan.FromDays(1.0)) 
    && (start.Hour == 0 && start.Minute == 0)) 
{ 
    end = end - TimeSpan.FromSeconds(1.0); // now 23:59:59 same day as start 
} 
+0

不,它只是設置爲12:00:00(請參閱我的編輯輸出)。 – chobo2 2010-03-23 19:49:44

+0

如果您不包含AM/PM信息,則與00:00:00相同。 – user7116 2010-03-24 14:50:49

+0

哦。所以這是ics標準所需要的或者我覺得很奇怪的東西。對於我的日曆,當有人把所有的日子,我喜歡上午12:00至下午11:30(他們只能選擇一半和一小時增量)。 – chobo2 2010-03-25 15:48:02

1

Chobo,

如果你想創建全天事件在DDay.iCal它真的很簡單:

event.IsAllDay = true; 

這就是你想要完成的?誠實地說,你的問題並不是你已經告訴我們的那麼清楚。

感謝, -Doug

+0

你似乎在其他論壇上了解它lol。 – chobo2 2010-03-27 05:44:31

0

您需要設置開始和結束的屬性和IsAllDay =真同一日期:預期

var evt = iCal.Create<DDay.iCal.Event>(); 
evt.Start = new iCalDateTime(myEvent.Date); 
evt.End = new iCalDateTime(myEvent.Date); 
evt.IsAllDay = true; 

否則IsAllDay屬性不起作用。請檢查此屬性的執行情況:

virtual public bool IsAllDay 
     { 
      get { return !Start.HasTime; } 
      set 
      { 
       // Set whether or not the start date/time 
       // has a time value. 
       if (Start != null) 
        Start.HasTime = !value; 
       if (End != null) 
        End.HasTime = !value; 

       if (value && 
        Start != null && 
        End != null && 
        object.Equals(Start.Date, End.Date)) 
       { 
        Duration = default(TimeSpan); 
        End = Start.AddDays(1); 
       } 
      } 
     }