Календарь D-Day имеет неправильные даты при импорте из календаря Google? - PullRequest
1 голос
/ 23 марта 2010

Я использую календарь на день Д, и я не уверен, но у меня возникла странная проблема.

У меня в основном это есть для моего кода

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.
                }

Тем не менее, когда я импортирую календарь из календаря Google, конечная дата путается с некоторыми материалами, которые я импортирую.

Как, например, у меня есть

Заголовок: не показывать Когда: Солнце, 21 марта (весь день).

Тем не менее, когда я импортирую его. Я говорю, что дата начала 21-го числа, а дата окончания 22-го, когда он должен быть 21-го.

Не уверен, что происходит.

Я не совсем уверен, какую еще информацию я могу дать вам, ребята.

Я сделал приложение cmd line и поместил в него файл .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 ]

1 голос
/ 26 марта 2010

Chobo,

Если вы пытаетесь создать однодневные события в DDay.iCal, это действительно просто:

event.IsAllDay = true;

Это то, что вы пытаетесь достичь? Честно говоря, ваша проблема не совсем ясна из того, что вы нам уже сказали.

Спасибо, -Doug

1 голос
/ 23 марта 2010

Если это событие на весь день, я думаю, что конечное время будет 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
}
0 голосов
/ 15 апреля 2014

Вам необходимо установить одинаковую дату для свойств 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);
                }
            }
        }
...