Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java将时区列表与moment-Timezone.js同步_Java_Timezone_Momentjs_Iana - Fatal编程技术网

Java将时区列表与moment-Timezone.js同步

Java将时区列表与moment-Timezone.js同步,java,timezone,momentjs,iana,Java,Timezone,Momentjs,Iana,我正在实现一个设置,用户从下拉列表中选择时区,然后我的应用程序使用矩-timezone.js显示所选时区中的当前时间 我正在使用TimeZone.getAvailableIDs()从服务器端检索时区列表以创建下拉列表。但是,矩-timezone.js无法解析列表中的某些时区ID。我检查了列表的大小,并将其与来自moment-timezone.js的moment.tz.names()进行了比较,发现来自moment-timezone.js的列表的ID比来自Java的列表少大约30个。我怀疑这可能与

我正在实现一个设置,用户从下拉列表中选择时区,然后我的应用程序使用矩-timezone.js显示所选时区中的当前时间

我正在使用
TimeZone.getAvailableIDs()
从服务器端检索时区列表以创建下拉列表。但是,矩-timezone.js无法解析列表中的某些时区ID。我检查了列表的大小,并将其与来自moment-timezone.js的
moment.tz.names()
进行了比较,发现来自moment-timezone.js的列表的ID比来自Java的列表少大约30个。我怀疑这可能与时区的版本有关,但我不确定,因为我使用的是Java 7,在
ZoneInfo Mappings
中找到的版本是2014b,而我拥有的用于time-timezone.js的数据文件是2016f


有没有办法让Java和moment-timezone.js都从同一个列表中检索数据,以便同步它们?我仅限于Java 7,无法使用Java 8中的
时间
,我更喜欢使用本机Java库,因此我现在不考虑Joda时间。

列表大小不同,因为您正在有效地比较两个相隔两年编写的列表

如果您想获取最新(2016g)的Java时区列表,甚至想更新Javascript中的内容,可以在这里获取

如果需要,可以修改网站上列出的旧版本(2016f)的URL

获得所需的数据文件后,只需将其加载到应用程序中

你可以在这里看到: 使用任何JDK 6/7/8。您将被限制为版本2016d。

以下几点:

  • Java和矩时区都使用相同的源数据,即from。由于该数据的修订版每年发布多次,您应该确保保持更新,并在双方使用相同的版本

  • 使用更新Java中的时区数据

  • 请注意,Java为遗留用途支持的另外几个三字母标识符不是TZDB标识符。发件人:

    三个字母的时区ID

    为了与JDK1.1.x兼容,还支持其他一些三个字母的时区ID(如“PST”、“CTT”、“AST”)。但是,不推荐使用它们,因为同一缩写通常用于多个时区(例如,“CST”可以是美国的“中央标准时间”和“中国标准时间”),Java平台只能识别其中一个时区

    这里有一个更完整的列表,其中一些是TZDB别名,一些仅存在于Java中

    如果您想将Java遗留标识符添加到矩时区,您可以这样做,然后您的列表在两侧看起来都是相同的。例如:

    moment.tz.link('Asia/Shanghai|CTT');
    
    然而,更好的做法可能是首先不允许服务器端使用非标准标识符


Hi@lukforce,为了改进您的问题,您应该发布您尝试过的代码,因为这将导致更好的答案。如何将较新版本的tz数据加载到我的应用程序中?我是在我用来编译的Java上使用tzupdater,还是为我的应用服务器(本例中是WebLogic)更新tzupdater?我使用tzupdater来更新Java列表(在编译器和应用服务器上),现在列表比以前更大(从前是620,现在是629),而瞬间列表是588。我检查了版本,它是2016f,与我在矩时区数据文件中找到的版本相匹配。还有其他方法来同步列表吗?是的,我注意到现在缺少的是你提到的3个字母的列表。不允许它们,你的意思是唯一的方法是在服务器端Java上删除它们以使两个列表匹配吗?听起来不错。我会从
getAvailableIDs
返回列表,并对其进行过滤。这就是我现在所做的,但我仍然希望找到一种解决方案,在这种解决方案中,我可以只拥有两个匹配的列表,而不必这样做。多次从这个中等长度的列表中删除条目在性能方面看起来并不太好。