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

我正在使用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文件放入其中。 如果有人知道一个好地方我可以上传它,你们可以看到我的意思。

这就是我的cmd行正在输出的内容。

 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 00:00:00 。 这不是你所看到的时代吗?

你给出的最后一个例子确实跨越两天(三月有31天),并且是正确的。 您看到的输出与全天事件的定义一起出现。 它从凌晨12:00开始,到第二天凌晨12:00结束。

如果您希望All Day活动仅在同一天真正停留,您可以执行以下检查:

 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 } 

Chobo,

如果你想在DDay.iCal中创建全天活动,那真的很简单:

 event.IsAllDay = true; 

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

谢谢,-Doug

您需要为Start和End属性设置相同的日期,并且IsAllDay = true:

 var evt = iCal.Create(); 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); } } }