附录 B
时区
本附录说明 Calendar Server 如何处理时区。亦说明如何添加新时区表或修改 Calendar Server 所提供的时区表。
本附录包含以下几节:
时区管理概述
timezones.ics 文件包含 Calendar Server 支持的时区表示形式。该文件包含 92 个时区,位于 server-root/cal/bin/data 目录中(例如,在 Solaris 系统中为 opt/SUNWics5/cal/bin/data)。
启动时,Calendar Server 会读取 timezones.ics 文件,生成 92 个时区,并将它们以数组的形式存储在内存中。如此,当 Calendar Server 运行时,所有的时区就会保留在内存中。
如果 WCAP 命令包含一个时区 ID (tzid),则它应当引用内存数组中的某个时区。例如,如果 storeevents 或 fetchcomponents_by_range 等命令指定一个 tzid 参数,则该参数值必须是 92 个时区列表中所定义的某个 tzid。Calendar Server 随即会返回该时区中的数据,而且该时区的日期会应用到所有数据的日期。
如果命令指定了一个无法识别的 tzid,则服务器在默认情况下会返回 GMT 时区。对于该命令返回的所有数据,其日期都将应用 GMT 时间。
有关 WCAP 的更多信息,请参考《Sun ONE Calendar Server Programmer's Manual》。
管理 Calendar Server 时区
本节说明如何添加或修改时区:
要修改 Calendar Server 时区列表,必须编辑位于 server-root/cal/bin/data 目录中的 timezones.ics 文件(例如,在 Solaris 系统中为 opt/SUNWics5/cal/bin/data)。该文件包含 92 个时区的 Calendar Server 格式。
时区由 TZID 属性来标识。例如,Calendar Server 将太平洋地区标准时区 (PST/PDT) 标识为 TZID America/Los_Angeles(如以下示例所示)。使用夏时制的时区通常包含两部分:STANDARD 和 DAYLIGHT。
图 B-1    America/Los_Angeles 时区
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;19891029T090
000Z;
|
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
|
|
RRULE 属性定义 STANDARD 和 DAYLIGHT 规则的模式。TZOFFSETFROM 和 TZOFFSETTO 属性定义从 DAYLIGHT 更改到 STANDARD 或从 STANDARD 更改到 DAYLIGHT 前后相对于 GMT 的时差。TZNAME 属性是时区的简化表示形式。有关时区属性的更多信息,请参考 RFC 2445“Internet Calendaring and Scheduling Core Object Specification (iCalendar)”。
添加新时区
-
创建一个 TZID 列表中尚未包括的 TZID 名称。
-
创建时区的表示形式。
-
要支持 Calendar Express 用户界面,必须为新时区生成 X-NSCP-TZCROSS 列表。Calendar Express 用户界面使用 X-NSCP-TZCROSS 中的日期来确定何时显示时区的更改。
-
X-NSCP-TZCROSS 列表包含一个日期列表,这些日期会指出从 DAYLIGHT 更改到 STANDARD 和从 STANDARD 更改到 DAYLIGHT 的时间:
-
停止 Calendar Server 然后重新启动,将新时区读入内存。
修改现有时区
-
修改 TZID 以表示所需的时区数据。
-
要支持 Calendar Express 客户端,必须生成已修改时区的 X-NSCP-TZCROSS 列表。有关更多信息,请参见前面的步骤 3。
-
停止 Calendar Server 然后重新启动,将修改的时区读入内存。
在用户界面中自定义时区
要修改 Calendar Express 用户界面以对时区使用自定义命名方案,必须添加 JavaScript 将新名称映射到 Calendar Server 提供的时区名称。
例如,若要使用名为 US Pacific 的自定义时区表而不使用提供的 America/Los_Angeles 时区表,您必须提供一个程序,将 US Pacific 日期映射到 America/Los_Angeles 表。
Calendar Server 时区表
Calendar Server 时区表是在名为 timezones.ics 的纯文本文件中定义的,该文件位于 server-root/cal/bin/data 目录中(例如,opt/SUNWics5/cal/bin/data)。此表包括 92 个基于 JDK(Java 开发工具包)1.1 版的时区。
以下的示例显示时区表的前几节。
图 B-2    Calendar Server 时区表
BEGIN:VTIMEZONE
|
TZID:Pacific/Apia
|
BEGIN:STANDARD
|
DTSTART:19970101T000000
|
TZOFFSETFROM:-1100
|
TZOFFSETTO:-1100
|
TZNAME:WST
|
TZNAME:SST
|
TZNAME:NUT
|
END:STANDARD
|
END:VTIMEZONE
|
|
BEGIN:VTIMEZONE
|
TZID:Pacific/Honolulu
|
BEGIN:STANDARD
|
DTSTART:19970101T000000
|
TZOFFSETFROM:-1000
|
TZOFFSETTO:-1000
|
TZNAME:HST
|
TZNAME:TKT
|
TZNAME:TAHT
|
END:STANDARD
|
END:VTIMEZONE
|
|
BEGIN:VTIMEZONE
|
TZID:America/Adak
|
BEGIN:STANDARD
|
DTSTART:19671025T020000
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
TZOFFSETFROM:-0900
|
TZOFFSETTO:-1000
|
TZNAME:HAST
|
END:STANDARD
|
BEGIN:DAYLIGHT
|
DTSTART:19870405T020000
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
TZOFFSETFROM:-1000
|
TZOFFSETTO:-0900
|
TZNAME:HADT
|
END:DAYLIGHT
|
X-NSCP-TZCROSS:19880403T120000Z;19881030T110000Z;19890402T120000Z;19891029T110
000Z;
|
19900401T120000Z;19901028T110000Z;19910407T120000Z;19911027T110000Z;
|
19920405T120000Z;19921025T110000Z;19930404T120000Z;19931031T110000Z;
|
19940403T120000Z;19941030T110000Z;19950402T120000Z;19951029T110000Z;
|
19960407T120000Z;19961027T110000Z;19970406T120000Z;19971026T110000Z;
|
19980405T120000Z;19981025T110000Z;19990404T120000Z;19991031T110000Z;
|
20000402T120000Z;20001029T110000Z;20010401T120000Z;20011028T110000Z;
|
20020407T120000Z;20021027T110000Z;20030406T120000Z;20031026T110000Z;
|
20040404T120000Z;20041031T110000Z;20050403T120000Z;20051030T110000Z;
|
20060402T120000Z;20061029T110000Z;20070401T120000Z;20071028T110000Z;
|
20080406T120000Z;20081026T110000Z;20090405T120000Z;20091025T110000Z;
|
20100404T120000Z;20101031T110000Z;20110403T120000Z;20111030T110000Z;
|
20120401T120000Z;20121028T110000Z;20130407T120000Z;20131027T110000Z;
|
20140406T120000Z;20141026T110000Z;20150405T120000Z;20151025T110000Z;
|
20160403T120000Z;20161030T110000Z;20170402T120000Z;20171029T110000Z;
|
20180401T120000Z;20181028T110000Z;20190407T120000Z;20191027T110000Z;
|
20200405T120000Z;20201025T110000Z;20210404T120000Z;20211031T110000Z;
|
20220403T120000Z;20221030T110000Z;20230402T120000Z;20231029T110000Z;
|
20240407T120000Z;20241027T110000Z;20250406T120000Z;20251026T110000Z;
|
20260405T120000Z;20261025T110000Z;20270404T120000Z;20271031T110000Z;
|
20280402T120000Z;20281029T110000Z;20290401T120000Z;20291028T110000Z;
|
20300407T120000Z;20301027T110000Z;20310406T120000Z;20311026T110000Z;
|
20320404T120000Z;20321031T110000Z;20330403T120000Z;20331030T110000Z;
|
20340402T120000Z;20341029T110000Z;20350401T120000Z;20351028T110000Z;
|
20360406T120000Z;20361026T110000Z;20370405T120000Z;20371025T110000Z
|
END:VTIMEZONE
|
|