D-Day Calendar has wrong dates when importing from google calendar?
I am using D-Day calendar and I am not sure but I got a weird problem.
I basically have this for my code
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.
}
Yet when I import a calendar from google calendar the end date is messed up on some of the stuff I am importing.
Like for instance I have this
Title: should not show When: Sun, March 21(all day).
Yet when I import it in. I says the start date is the 21st yet the end date is the 22nd when it should be the 21st.
Not sure what is going on.
I am not really sure what other info I can give you guys.
I made a cmd line application and put the .ics file in it. If anyone 开发者_高级运维knows a good place I can upload it and you guys can see what I mean.
This is what my cmd line is outputting.
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
If it is an all day event, I believe the end time will be 00:00:00
on the next day, aka 12:00:00 AM
. Is this not what you're seeing for the times?
The last example you give truly does span two days (March has 31 days), and is correct. The output you're seeing jives with the definition of an All Day Event. It begins at 12:00 AM and ends at 12:00 AM the next day.
If you wanted All Day events to truely stay only on the same day, you could do a check like:
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,
If you're trying to create all-day events in DDay.iCal it's really simple:
event.IsAllDay = true;
Is that what you're trying to accomplish? In all honesty your problem isn't all that clear from what you've already told us.
Thanks, -Doug
You need to set the same date for Start and End properties and IsAllDay = true:
var evt = iCal.Create<DDay.iCal.Event>();
evt.Start = new iCalDateTime(myEvent.Date);
evt.End = new iCalDateTime(myEvent.Date);
evt.IsAllDay = true;
Otherwise IsAllDay property doesn't work as expected. Please check implementation of this property:
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);
}
}
}
精彩评论