2

我正在使用 Ruby Rical 基本上生成一个 icalendar 作为对我正在参加(接受)邀请的原始 icalendar 的响应。

我可以正确生成响应,但时区有问题,基本上如果我让 RiCal 推断正确的时区,它会根据原始文件中指定的时区字符串正常工作。

让我举个例子:

我可以毫无问题地从 Google 日历回复此邀请:

BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:20091226T210000Z
DTEND:20091226T220000Z
DTSTAMP:20091223T191926Z
ORGANIZER;CN=xxx xxx:mailto:x...@xxxx.com
UID:4kkcos0ovgf9cvo3su6hlql...@google.com
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE;CN=xxxx xxxx;X-NUM-GUESTS=0:mailto:x...@xxxx.com
CREATED:20091223T191925Z
DESCRIPTION:View your event at 4NmIxMmM1ZmJiODM4OTEx&ctz=America%2FLos_Angeles&hl=en.
LAST-MODIFIED:20091223T191925Z
LOCATION:800-292-2393 pin 1234
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:test google calendar attendance response
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR

但是当我生成对 Ical (Mac Ical.app) 邀请的响应时,我收到一个错误(没有要加载的此类文件 -- tzinfo/definitions/US/Pacific):

BEGIN:VCALENDAR
CALSCALE:GREGORIAN
VERSION:2.0
METHOD:REQUEST
PRODID:-//Apple Inc.//iCal 4.0.1//EN
BEGIN:VTIMEZONE
TZID:US/Pacific
BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
DTSTART:20070311T020000
TZNAME:PDT
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0700
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
DTSTART:20071104T020000
TZNAME:PST
TZOFFSETTO:-0800
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
ATTENDEE;CN="x...@xxxx.com";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTI
 ON;RSVP=TRUE:mailto:x...@xxxx.com
DTEND;TZID=US/Pacific:20091231T091500

如您所见,TZID:US/Pacific 是 RiCal 的无效时区标识符,因此在这些情况下..您将如何使用 Rical 回答这种类型的 icalendar 并保留原始时区?

如果我不清楚这个问题,请问我你需要什么。

4

1 回答 1

2

我认为 RiCal 使用 TZInfo 来支持时区。您可能目前正在使用 Ruby on Rails 的 ActiveSupport 库中包含的 TZInfo 的精简版本。这不包含您需要的美国/太平洋时区定义。

TZInfo 的完整版确实包括美国/太平洋地区。如果您安装了 tzinfo gem,然后重新启动 Rails 应用程序,您应该会发现这是可行的。

于 2009-12-30T16:26:08.390 回答