Java 如何解析时区字符串;太平洋时间(美国和加拿大)“;在JVM上?

Java 如何解析时区字符串;太平洋时间(美国和加拿大)“;在JVM上?,java,timezone,jodatime,yammer,Java,Timezone,Jodatime,Yammer,我正在编写一个与Yammer的集成,它返回一个时区字符串,如下所示: Pacific Time (US & Canada) 如何将其解析为JVM上的时区或日期时区?我已经试过了,但是没有用。如果Yammer提供给你的话,你最好使用时区偏移。据我所知,Yammer提供给您的时区字符串是不正确的(或者至少是特定于Microsoft的)。如果执行此Java代码: System.out.println(Arrays.toString(TimeZone.getAvailableIDs()));

我正在编写一个与Yammer的集成,它返回一个时区字符串,如下所示:

Pacific Time (US & Canada)

如何将其解析为JVM上的时区或日期时区?我已经试过了,但是没有用。

如果Yammer提供给你的话,你最好使用时区偏移。据我所知,Yammer提供给您的时区字符串是不正确的(或者至少是特定于Microsoft的)。如果执行此Java代码:

System.out.println(Arrays.toString(TimeZone.getAvailableIDs()));

您会发现字符串
太平洋时间(美国和加拿大)
没有出现在其中,因为它(我认为)是一个微软风格的时区名称,并且出于只有他们自己知道的原因,微软决定对它们进行不同的命名。

对于使用“友好”时区名称而不是标准时区名称的RubyonRails时间API来说,这看起来很熟悉“美国/洛杉矶”,正如另一个答案所暗示的,可能实际上是Windows的名字

这让我找到了Java程序的Windows名称


看起来您必须将日期时间内容包装在一个您自己借用或编写的翻译层中。

Yammer似乎会返回一个
时区
字段,作为REST API中
用户
对象的一部分。一个示例可以在标记为C.应用程序认证”,看起来像:

{
“用户”:
{
“时区”:“夏威夷”,
“利益”:无效,
“类型”:“用户”,
...
这也是从任何一个返回的。通过实验,我可以看到API返回的值对应于用户帐户设置屏幕中出现的下拉列表的键(位于
https://yammer.com//account/display_options
):

查看此网页的源代码时,可以看到包含所有键和值的下拉列表:

(GMT-10:00)夏威夷
(GMT-09:00)阿拉斯加
(GMT-08:00)太平洋时间(美国和加拿大)
(GMT-07:00)亚利桑那州
(GMT-07:00)山地时间(美国和加拿大)
(GMT-06:00)中部时间(美国和加拿大)
(GMT-05:00)东部时间(美国和加拿大)
(GMT-05:00)印第安纳州(东部)-------------
(GMT-11:00)美属萨摩亚
(GMT-11:00)国际日期线西
(GMT-11:00)中途岛
(GMT-08:00)蒂华纳
(GMT-07:00)吉娃娃
(GMT-07:00)马萨特兰
(GMT-06:00)中美洲
(GMT-06:00)瓜达拉哈拉
(GMT-06:00)墨西哥城
(GMT-06:00)蒙特雷
(GMT-06:00)萨斯喀彻温省
(GMT-05:00)波哥大
(GMT-05:00)利马
(GMT-05:00)基多
(GMT-04:30)加拉加斯
(GMT-04:00)大西洋时间(加拿大)
(GMT-04:00)乔治敦
(GMT-04:00)拉巴斯
(GMT-03:30)纽芬兰
(GMT-03:00)巴西利亚
(GMT-03:00)布宜诺斯艾利斯
(GMT-03:00)格陵兰
(GMT-03:00)圣地亚哥
(GMT-02:00)大西洋中部
(GMT-01:00)亚速尔群岛
(GMT-01:00)佛得角是。
(格林尼治标准时间+00:00)卡萨布兰卡
(格林尼治标准时间+00:00)都柏林
(格林尼治标准时间+00:00)爱丁堡
(格林尼治标准时间+00:00)里斯本
(格林尼治标准时间+00:00)伦敦
(格林尼治标准时间+00:00)蒙罗维亚
(格林尼治标准时间+00:00)UTC
(格林尼治标准时间+1:00)阿姆斯特丹
(格林尼治时间+1:00)贝尔格莱德
(格林尼治时间+01:00)柏林
(格林尼治时间+01:00)伯尔尼
(格林尼治时间+1:00)布拉迪斯拉发
(格林尼治时间+1:00)布鲁塞尔
(格林尼治标准时间+1:00)布达佩斯
(格林尼治时间+1:00)哥本哈根
(格林尼治时间+1:00)卢布尔雅那
(格林尼治时间+01:00)马德里
(格林尼治标准时间+01:00)巴黎
(格林尼治时间+1:00)布拉格
(格林尼治标准时间+01:00)罗马
(格林尼治标准时间+1:00)萨拉热窝
(格林尼治时间+1:00)斯科普里
(格林尼治时间+1:00)斯德哥尔摩
(格林尼治标准时间+01:00)维也纳
(格林尼治时间+1:00)华沙
(格林尼治标准时间+01:00)中西部非洲
(格林尼治时间+1:00)萨格勒布
(格林尼治标准时间+02:00)雅典
(格林尼治标准时间+02:00)布加勒斯特
(格林尼治标准时间+02:00)开罗
(格林尼治标准时间+02:00)哈拉雷
(格林尼治标准时间+02:00)赫尔辛基
(格林尼治时间+02:00)伊斯坦布尔
(格林尼治时间+02:00)耶路撒冷
(格林尼治标准时间+02:00)基辅
(格林尼治标准时间+02:00)比勒陀利亚
(格林尼治标准时间+02:00)里加
(格林尼治标准时间+02:00)索非亚
(格林尼治标准时间+02:00)塔林
(格林尼治标准时间+02:00)维尔纽斯
(格林尼治时间+03:00)巴格达
(格林尼治时间+03:00)科威特
(格林尼治时间+03:00)明斯克
(格林尼治时间+03:00)莫斯科
(格林尼治时间+03:00)内罗毕
(格林尼治时间+03:00)利雅得
(格林尼治标准时间+03:00)圣彼得堡
(格林尼治标准时间+03:00)伏尔加格勒
(格林尼治时间+03:30)德黑兰
(格林尼治时间+04:00)阿布扎比
(格林尼治标准时间+04:00)巴库
(格林尼治标准时间+04:00)马斯喀特
(格林尼治时间+04:00)第比利斯
(格林尼治时间+04:00)埃里温
(格林尼治时间+04:30)喀布尔
(格林尼治标准时间+05:00)叶卡捷琳堡
(格林尼治标准时间+05:00)伊斯兰堡
(格林尼治时间+05:00)卡拉奇
(格林尼治标准时间+05:00)塔什干
(格林尼治时间+05:30)钦奈
(格林尼治时间+05:30)加尔各答
(格林尼治时间+05:30)孟买
(格林尼治时间+05:30)新德里
(格林尼治标准时间+05:30)斯里兰卡贾亚沃登普拉
(格林尼治时间+05:45)加德满都
(格林尼治标准时间+06:00)阿拉木图
(格林尼治时间+06:00)阿斯塔纳
(格林尼治标准时间+06:00)达卡
(格林尼治时间+06:00)新西伯利亚
(格林尼治时间+06:00)乌鲁木齐
(格林尼治时间+06:30)仰光
(格林尼治时间+07:00)曼谷
(格林尼治标准时间+07:00)河内
(格林尼治时间+07:00)雅加达
(格林尼治时间+07:00)克拉斯诺亚尔斯克
(格林尼治时间+08:00)北京
(格林尼治时间+08:00)重庆
(GMT+08:00)香港
(格林尼治时间+08:00)伊尔库茨克
(GMT+08:00)吉隆坡
(格林尼治标准时间+08:00)珀斯
(格林尼治标准时间+08:00)新加坡
(格林尼治标准时间+08:00)台北
(格林尼治时间+08:00)乌兰巴托
(格林尼治时间+09:00)大阪
(格林尼治时间+09:00)札幌
(格林尼治时间+09:00)首尔
(格林尼治标准时间+09:00)东京
(格林尼治时间+09:00)雅库茨克
(格林尼治时间+09:30)阿德莱德
(格林尼治时间+09:30)达尔文
(格林尼治时间+10:00)布里斯班
(格林尼治标准时间+10:00)堪培拉
(格林尼治标准时间+10:00)关岛
(格林尼治标准时间+10:00)霍巴特
(格林尼治时间+10:00)马加丹
(格林尼治时间+10:00)墨尔本
(格林尼治时间+10:00)莫尔兹比港
(格林尼治标准时间+10:00)所罗门是。
(格林尼治标准时间+10:00)悉尼
(格林尼治时间+10:00)海参崴
(格林尼治标准时间+11:00)新喀里多尼亚
(格林尼治时间+12:00)奥克兰
(格林尼治标准时间+12:00)斐济
(格林尼治时间+12:00)堪察加半岛
(格林尼治时间+12:00)马歇尔在。
(格林尼治时间+12:00)惠灵顿
(格林尼治时间+13:00)努库阿洛法
(格林尼治标准时间+13:00)萨摩亚
(格林尼治标准时间+13:00)托克劳是。
问题是如何翻译这些?嗯,我没有任何确凿的证据,但这些时区键似乎都是Windows时区显示名称的一部分。它们在Windows或任何Microsoft技术中都不是不同的标识符。我不明白为什么Yammer会选择它们作为时区ID。但你会这样做具体做法如下:

  • 查看。您将看到以下条目:

    
    
  • 在注释行中搜索Yammer时区键,作为部分子字符串匹配。例如,如果Yammer时区是
    “La Paz”
    ,则它将与注释
    的条目匹配

  • 从注释后面的下一行获取IANA时区ID。它将是标有
    territory=“001”
    的ID。您需要
    类型
    字段。对于