Как сделать так, чтобы Plone отображал события во время летнего времени с правильным временем? - PullRequest
2 голосов
/ 07 июня 2011

Я пишу продукт Plone, который берет iCalendar , извлекает его и создает типы событий Plone. У меня все работает отлично, за исключением того, что для половины дат года отметки времени отключены на час.

Мой фид iCalendar передает их как метки времени UTC:

DTSTART; ЗНАЧЕНИЕ = ДАТА: 20110812T130000Z должно быть 9 утра в часовом поясе Америки / Нью-Йорка DTEND; VALUE = DATE: 20110812T160000Z должно быть 12:00 в часовом поясе Америки / Нью-Йорка

Те работают отлично. Это не:

DTSTART; ЗНАЧЕНИЕ = ДАТА: 20111225T175525Z должен быть 13:55, но показывается как 12:55. DTEND; VALUE = DATE: 20111225T215525Z должно быть 5:55 вечера, но отображается как 4:55 вечера * 10101 *

Screenshot of Plone showing incorrect EDT event time От базы данных, которая генерирует канал iCalendar, до генератора iCalendar, до фактических значений, хранящихся в Zope, все правильно. Но Plone отображает неверное местное время на страницах с подробностями события.

Я попытался установить "TZ America / New_York" в моей сборке, я попытался установить системные часы на сервере Zope заранее, чтобы посмотреть, произойдет ли преобразование магическим образом "после того, как мы вернемся в EST". Не повезло.

Вот несколько примеров, которые могут проиллюстрировать проблему:

Правильно отображаемое событие, которое происходит в EDT:

 BEGIN:VEVENT
DESCRIPTION:Flyer Fridays give you the opportunity to hear from professors
  in Communication Sciences & Disorders\, Education\, Management\, Nursing\
 , Physical Therapy\, Occupational Therapy or Visual & Performing Arts.  \n
 \nFaculty sessions begin at 9:15am (PLEASE CHOOSE ONE)\, followed by a 10a
 m campus tour and an 11am Freshmen information session.  After the day's e
 vents\, you're invited to join the Admissions staff for lunch.
DTEND;VALUE=DATE:20110812T160000Z
DTSTART;VALUE=DATE:20110812T130000Z
LOCATION:Nazareth College
SUMMARY:Flyer Friday - Management Info Session
UID:ug-flyerfriday-164
END:VEVENT

И как оно хранится в Zope:

>>> app.Plone.events['ug-flyerfriday-164'].startDate
DateTime('2011/08/12 13:00:00 GMT+0')

Неверно отображаемое событие, которое происходит в EST:

BEGIN:VEVENT
DESCRIPTION:Fun with TZINFO Flyer Fridays give you the opportunity to hear
  from professors in Communication Sciences & Disorders\, Education\, Manag
 ement\, Nursing\, Physical Therapy\, Occupational Therapy or Visual & Perf
 orming Arts.  \n\nFaculty sessions begin at 9:15am (PLEASE CHOOSE ONE)\, f
 ollowed by a 10am campus tour and an 11am Freshmen information session.  A
 fter the day's events\, you're invited to join the Admissions staff for lu
 nch.
DTEND;VALUE=DATE:20111225T215525Z
DTSTART;VALUE=DATE:20111225T175525Z
LOCATION:Nazareth College
SUMMARY:Flyer Friday - Timezone Info Session
UID:ug-flyerfriday-172
END:VEVENT

И вы можете видеть, что он хранится в Zope с UTC, поэтому проблема только в том, как он отображается:

>>> app.Plone.events['ug-flyerfriday-172'].startDate
DateTime('2011/12/25 17:55:25 GMT+0')

1 Ответ

2 голосов
/ 07 июня 2011

Попробуйте Преобразователь часового пояса .

Вы экспериментируете с летним временем. Это возникает при смене даты.

Отметьте одну из предположительно неправильных дат:

DTSTART; ЗНАЧЕНИЕ = ДАТА: 20111225T175525Z должно быть 13:55, но показывается как 12:55 pm и прочитайте легенду:

Летнее время не действует в эту дату / время по Гринвичу Дневной свет

Экономия времени на это не действует дата / время в Америке / New_York

А затем проверьте одну из дат без проблем:

DTSTART; ЗНАЧЕНИЕ = ДАТА: 20110812T130000Z должно быть 9 утра в часовом поясе Америки / Нью-Йорка с этой легендой:

Летнее время не действует в эту дату / время по Гринвичу Дневной свет

Экономия времени в влияет на это дата / время в Америке / New_York

Здесь вы можете увидеть подробности ежедневного времени для Америки / часовой пояс Нью-Йорка: http://www.timezoneconverter.com/cgi-bin/zoneinfo.tzc?s=default&tz=America/New_York

...