我正在使用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
答案 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);
}
}
}