如何在DST期间以正确的时间制作Plone显示事件?

时间:2011-06-06 20:35:05

标签: python plone icalendar zope dst

我正在编写一个Plone产品,它接受iCalendar,将其拉入,并创建Plone事件类型。我已经完美地完成了所有工作,除了在一年的一半时间里,时间戳已经过了一个小时。

我的iCalendar Feed将这些传递为UTC时间戳:

DTSTART; VALUE = DATE:20110812T130000Z应该是美国/纽约时区的上午9点 DTEND; VALUE = DATE:20110812T160000Z在美国/纽约时区应该是12noon

那些工作正常。这些不是:

DTSTART; VALUE = DATE:20111225T175525Z应该是1:55 pm,但它显示为下午12:55 DTEND; VALUE = DATE:20111225T215525Z应该是下午5:55,但它显示为下午4:55

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

你可以看到它用UTC存储在Zope中,所以问题只在于它的显示方式:

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

1 个答案:

答案 0 :(得分:2)

尝试Time Zone Converter

您正在尝试夏令时。 当您更改日期时会出现这种情况。

检查其中一个错误的日期:

DTSTART;VALUE=DATE:20111225T175525Z should be 1:55pm, but it's showing as 12:55pm 并阅读传奇:

  

夏令时有效   在GMT日光的这个日期/时间

     

节省时间对此有效   日期/时间在America / New_York

然后查看其中一个无问题日期:

DTSTART;VALUE=DATE:20110812T130000Z should be 9am in the America/New_York timezone有这个传说:

  

夏令时有效   在GMT日光的这个日期/时间

     

节省时间对此有效   日期/时间在America / New_York

在这里您可以看到America / New_York时区的每日保存时间详情: http://www.timezoneconverter.com/cgi-bin/zoneinfo.tzc?s=default&tz=America/New_York