从Google日历导入时,D日历日期有错误的日期?

从Google日历导入时,D日历日期有错误的日期?

问题描述:

我正在使用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 

如果是全天事件,我认为结束时间将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

Chobo,

如果你想创建全天事件在DDay.iCal它真的很简单:

event.IsAllDay = true; 

这就是你想要完成的?诚实地说,你的问题并不是你已经告诉我们的那么清楚。

感谢, -Doug

+0

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

您需要设置开始和结束的属性和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); 
       } 
      } 
     }