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

时间:2010-03-23 06:08:03

标签: c# icalendar dday

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

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

Chobo,

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

event.IsAllDay = true;

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

谢谢, -Doug

答案 2 :(得分: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);
                }
            }
        }