Я использую календарь 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.
                }

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

Например, у меня есть это

Название: не должно отображаться Когда: Вс, 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
1
chobo2 23 Мар 2010 в 09:08

3 ответа

Лучший ответ

Если это мероприятие на весь день, я полагаю, что время окончания будет 00:00:00 на следующий день, иначе 12:00:00 AM. Разве это не то, что вы видите сейчас?

Последний приведенный вами пример действительно охватывает два дня (в марте 31 день) и является правильным. На выходе вы видите джайвы с определением All Day Event. Он начинается в 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
user7116 24 Мар 2010 в 17:56
Это то же самое, что и 00:00:00, если вы не включаете информацию AM / PM.
 – 
user7116
24 Мар 2010 в 17:50
Ой. Так что это то, чего требует стандарт ics, или что-то такое, что я нахожу таким странным. Для моего календаря, когда кто-то поставил allDay, мне понравилось с 12:00 до 23:30 (они могут выбирать только с шагом в полчаса).
 – 
chobo2
25 Мар 2010 в 18:48

Чобо,

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

event.IsAllDay = true;

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

Спасибо, -Дуг

1
Doug 26 Мар 2010 в 00:06

Вам нужно установить одинаковую дату для свойств 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);
                }
            }
        }
0
evgeny-i 15 Апр 2014 в 12:48