我希望将SharePoint TimeZone信息转换为Java TimeZone对象,以与我的应用程序一起使用,该应用程序使用SharePoint REST API。我知道SharePoint将所有时间戳存储在UTC中,但是当使用REST API时,一些时间戳会返回时区域区域区域,有些则不是。除了您期望的那样,UTC值以" Z"结尾,而时区调整值则没有。因此,将它们转换为Java DateTime对象很容易,但是如果我想始终如一地将UTC值返回到呼叫者,我将不得不将"非Z"值调整为UTC。SharePoint允许我获取SharePoint服务器的配置时区信息,但是我需要的是从该信息到Java TimeZone ID的映射。SharePoint通过REST看起来像这样提供的内容:
描述:( GMT-07:00)山区时间(美国和加拿大)偏见:420日光偏见:-60标准偏见:0
它没有提供任何可能表明DST启动的信息。但是我认为,只要我可以将SharePoint"描述"映射到Java TimeZone ID,我就不必担心这一点。因此,我希望有人在以前遇到了这种需求,或者也许还有一些关于我如何从SharePoint的REST API中获得所需的UTC值的建议。
java使用iana时区。
Microsoft Windows存在于CLDR补充数据中的IANA时区的映射。
但是,SharePoint时区与常规Windows时区不完全相同。他们使用的是使用特定于SharePoint的整数ID,而不是使用Windows注册表中的字符串时区键(或通过.NET TimeZoneInfo
类的Id
属性)。您可以在此处找到部分列表,并在此处找到更多更新(非正式)列表。
SharePoint时区说明松散匹配Windows时区的DisplayName
,但这不是一个完美的匹配。某些SharePoint时区可能完全未定义为Windows时区。
假设您将每个SharePoint SPTimeZone
数字ID映射到TimeZoneInfo
ID,则可以使用CLDR数据从那里转换为IANA时区。如果您可以运行.NET代码,那么您可以很容易地使用Noda Time库进行操作。
update
我继续映射到合理的等效物。这些不能保证100%准确,但我认为它会给您您的需求。
- 完整映射的CSV电子表格
- JSON for SharePoint ID到IANA TZ名称 - 准备您在任何语言中使用
这些主要使用大致等效的Windows时区进行匹配,然后使用主CLDR映射到IANA区域。唯一的例外是:
-
SharePoint区33和81是独立的,但与单个" SA Western Standard Time" Windows区域匹配。他们分别映射到IANA区域
America/La_Paz
和America/Manaus
。 -
SharePoint区41和92是独立的,但与单个" Magadan标准时间" Windows区域匹配。他们分别映射到IANA区域
Asia/Magadan
和Asia/Kamchatka
。
我已经开始使用Matt的映射,它们看起来很亮。但是,我注意到SharePoint 2013年,马特提供的列表末尾还有10个。因此,在这里使用iana时区的可爱列表,http://en.wikipedia.org/wiki/wiki/list_of_tz_database_time_time_zones我已经将这些添加到Matt的列表中,并用我的最佳猜测中的IANA列表中的猜测(是的,如果您是最好的猜测,所以有反馈,让我知道)。
"SharePoint ID","SharePoint Description","IANA Time Zone"
"95","(UTC-11:00) Coordinated Universal Time-11","Etc/GMT+11"
"96","(UTC-02:00) Coordinated Universal Time-02","Etc/GMT+2"
"97","(UTC+12:00) Coordinated Universal Time+12","Etc/GMT-12"
"98","(UTC+02:00) Damascus","Asia/Damascus"
"99","(UTC+12:00) Magadan","Asia/Magadan"
"100","(UTC+03:00) Kaliningrad, Minsk","Europe/Kaliningrad"
"101","(UTC+02:00) Istanbul","Europe/Istanbul"
"102","(UTC+06:00) Dhaka","Asia/Dhaka"
"103","(UTC-03:00) Salvador","America/Bahia"
"104","(UTC+02:00) E. Europe","Europe/Chisinau"