本附录介绍 Calendar Server 如何定义和处理时区,包含以下内容:
有关时区属性和参数的更多信息,请参阅 RFC 2445 "Internet Calendaring and Scheduling Core Object Specification (iCalendar)":
http://www.ietf.org/rfc/rfc2445.txt
timezones.ics 文件中包含 Calendar Server 支持的时区表示。该文件位于以下目录中:
cal_svr_base/SUNWics5/cal/data
启动时,Calendar Server 读取 timezones.ics 文件,生成时区数据,然后将数据存储在内存中。这样,在 Calendar Server 运行时,时区数据将一直保存在内存中。之后,如果添加新时区或修改现有的时区,必须停止并重新启动 Calendar Server 才能使所做的更改生效。
timezones.ics 文件中的时区由 TZID 参数标识。例如,Calendar Server 使用 America/Los_Angeles TZID 标识太平洋标准时间 (PST/PDT) 时区,如示例 19–1 所示。TZNAME 属性是时区的缩写表示,例如 PST(Pacific Standard Time,太平洋标准时间)代表 America/Los_Angeles 时区。
可识别夏令时 (daylight savings time, DST) 的时区(例如 America/Los_Angeles)包含两个组成部分:表示标准时间的 STANDARD 和表示 DST 的 DAYLIGHT。X-NSCP-TZCROSS 列表包含一系列日期,用于表明时区何时被更改为(或更改自)DST (DAYLIGHT) 和标准时间 (STANDARD)。
RRULE 属性定义 STANDARD 和 DAYLIGHT 规则的模式。TZOFFSETFROM 和 TZOFFSETTO 属性定义从 DST 更改为标准时间或从标准时间更改为 DST 之前和之后的 GMT 偏移。Communications Express 用户界面通过 X-NSCP-TZCROSS 中的日期来确定何时显示时区中的更改。
包含时区 ID (tzid) 参数的 WCAP 命令应引用 timezones.ics 文件中定义的有效时区。Calendar Server 然后将返回以该时区表示的数据。如果 WCAP 命令指定了无法识别的时区,默认情况下,Calendar Server 将返回以 GMT 时区表示的数据。有关 WCAP 的更多信息,请参阅《Sun Java System Calendar Server 6 2005Q4 Developer’s Guide》。
下面的示例显示了 timezones.ics 文件中 America/Los_Angeles 时区的表示。
BEGIN:VTIMEZONE TZID:America/Los_Angeles BEGIN:STANDARD DTSTART:19671025T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 TZOFFSETFROM:-0700 TZOFFSETTO:-0800 TZNAME:PST END:STANDARD BEGIN:DAYLIGHT DTSTART:19870405T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZOFFSETFROM:-0800 TZOFFSETTO:-0700 TZNAME:PDT END:DAYLIGHT X-NSCP-TZCROSS: 19880403T100000Z;19881030T090000Z;19890402T100000Z;19891029T090000Z; 19900401T100000Z;19901028T090000Z;19910407T100000Z;19911027T090000Z; 19920405T100000Z;19921025T090000Z;19930404T100000Z;19931031T090000Z; 19940403T100000Z;19941030T090000Z;19950402T100000Z;19951029T090000Z; 19960407T100000Z;19961027T090000Z;19970406T100000Z;19971026T090000Z; 19980405T100000Z;19981025T090000Z;19990404T100000Z;19991031T090000Z; 20000402T100000Z;20001029T090000Z;20010401T100000Z;20011028T090000Z; 20020407T100000Z;20021027T090000Z;20030406T100000Z;20031026T090000Z; 20040404T100000Z;20041031T090000Z;20050403T100000Z;20051030T090000Z; 20060402T100000Z;20061029T090000Z;20070401T100000Z;20071028T090000Z; 20080406T100000Z;20081026T090000Z;20090405T100000Z;20091025T090000Z; 20100404T100000Z;20101031T090000Z;20110403T100000Z;20111030T090000Z; 20120401T100000Z;20121028T090000Z;20130407T100000Z;20131027T090000Z; 20140406T100000Z;20141026T090000Z;20150405T100000Z;20151025T090000Z; 20160403T100000Z;20161030T090000Z;20170402T100000Z;20171029T090000Z; 20180401T100000Z;20181028T090000Z;20190407T100000Z;20191027T090000Z; 20200405T100000Z;20201025T090000Z;20210404T100000Z;20211031T090000Z; 20220403T100000Z;20221030T090000Z;20230402T100000Z;20231029T090000Z; 20240407T100000Z;20241027T090000Z;20250406T100000Z;20251026T090000Z; 20260405T100000Z;20261025T090000Z;20270404T100000Z;20271031T090000Z; 20280402T100000Z;20281029T090000Z;20290401T100000Z;20291028T090000Z; 20300407T100000Z;20301027T090000Z;20310406T100000Z;20311026T090000Z; 20320404T100000Z;20321031T090000Z;20330403T100000Z;20331030T090000Z; 20340402T100000Z;20341029T090000Z;20350401T100000Z;20351028T090000Z; 20360406T100000Z;20361026T090000Z;20370405T100000Z;20371025T090000Z; 20360406T120000Z;20361026T110000Z;20370405T120000Z;20371025T110000Z END:VTIMEZONE |
本节介绍以下主题:
本节介绍如何为 Calendar Server 添加新时区,以便可以在 Communications Express 用户界面中使用它。例如,您可能需要添加 America/Miami 新时区。
要添加新时区,最简单的方法就是在以下步骤介绍的文件中复制并编辑与要添加的时区类似的时区条目。例如,如果要添加 America/Miami 时区,请复制并编辑每个文件中的 America/New_York 时区条目。
在以下文件中添加新时区的时区块:
cal_svr_base/SUNWics5/cal/data/timezones.ics |
同样,要添加新时区块,最简单的方法就是复制与要添加的时区类似的现有块(包括所有夏令时 [DST] 偏移)。然后编辑新时区块,对新时区进行任何所需的更改。如果新时区具有夏令时 (DST),可尝试找到类似的时区。
修改以下文件中的 getDisplayNameofTZID 模板:
cal_svr_base/SUNWics5/cal/html/language/i18n.xsl file |
其中,language 指定您的站点使用的语言的目录。例如:en 代表英语,fr 代表法语。
在 i18n.xsl 文件中添加如下所示的新条目:
<xsl:when test="$tzid=’TimeZoneArea/ TimeZoneName’"TimeZoneArea/ TimeZoneName</xsl:when\> |
其中:
TimeZoneArea 是以下地理区域之一:非洲、美洲、亚洲、大西洋、澳大利亚、欧洲或太平洋。
TimeZoneName 为新时区的名称。
例如:
<xsl:when test="$tzid='America/Miami'"\>America/Miami</xsl:when\> |
修改以下 XML 文件:
cal_svr_base/SUNWics5/cal/html/change_timezone.xml cal_svr_base/SUNWics5/cal/html/new_cal.xml cal_svr_base/SUNWics5/cal/html/new_group.xml |
在每个文件中添加以下代码行:
<timezone type="TimeZoneType" tzid="TimeZoneArea/TimeZoneName" offset="offset"> |
其中:
TimeZoneType 可以是 "americas"、"europeAfrica" 或 "asiaPacific"。
TimeZoneArea 和 TimeZoneName 在添加新时区中定义。
offset 是新时区比 GTM 时间早 (+) 或晚 (-) 的小时数。例如,如果新时区比 GMT 时间晚四个小时,则偏移值为 "-04:00"。
例如:
<timezone type="americas" tzid="America/Miami" offset="-05:00" daylightOffset="-04:00"> |
如果要将新时区作为用户首选项的默认时区,请修改以下文件中的 timezone 条目:
cal_svr_base/SUNWics5/cal/html/default_user_prefs.xml |
停止(如果必要)并重新启动 Calendar Server 以使新时区生效。
本节介绍如何修改现有时区。例如,您可能需要更改时区的名称,比如将 "America/Phoenix" 更改为 "US/Arizona"。
在以下文件中修改要更改的时区的时区块:
cal_svr_base/SUNWics5/cal/data/timezones.ics |
如果要更改时区名称,请将 TZID 条目更改为新名称。
修改以下文件中的 getDisplayNameofTZID 模板:
cal_svr_base/SUNWics5/cal/html/language/i18n.xsl file |
其中:language 指定您的站点使用的语言的目录。例如:en 代表英语,fr 代表法语。
如果要更改名称,请将现有的时区名称更改为新名称。
修改以下 XML 文件,对时区进行所需的更改:
cal_svr_base/SUNWics5/cal/html/change_timezone.xml cal_svr_base/SUNWics5/cal/html/new_cal.xml cal_svr_base/SUNWics5/cal/html/new_group.xml |
有关这些文件中的条目的信息,请参见添加新时区。
如果所做的更改影响用户首选项的默认时区,请修改以下文件中的 "icsTimeZone" 条目:
cal_svr_base/SUNWics5/cal/html/default_user_prefs.xml |
停止(如果必要)并重新启动 Calendar Server 以使时区更改生效。