1

我正在使用 D-Day 日历,我不确定,但我遇到了一个奇怪的问题。

我的代码基本上有这个

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 日。

不知道发生了什么。

我不确定我还能给你们什么其他信息。

我制作了一个命令行应用程序并将 .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
4

3 回答 3

1

如果是全天活动,我相信结束时间将00:00:00在第二天,也就是12:00:00 AM. 这不是你所看到的时代吗?

您给出的最后一个示例确实跨越了两天(三月有 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
}
于 2010-03-23T18:55:57.910 回答
1

乔博,

如果您尝试在 DDay.iCal 中创建全天事件,这非常简单:

event.IsAllDay = true;

这就是你想要完成的事情吗?老实说,从您已经告诉我们的内容来看,您的问题并不是那么清楚。

谢谢,-道格

于 2010-03-25T21:06:56.993 回答
0

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

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);
                }
            }
        }
于 2014-04-15T08:48:03.307 回答