Date.toLocaleString()返回无效的语言标签:en_GB,但Java.util.Locale类返回英国的en_GB语言环境

时间:2019-03-07 10:09:24

标签: javascript java

Java.util.Locale返回英国的“ en_GB”语言环境格式。当我在此Date.toLocaleString()函数中使用相同的语言环境时,返回的语言标签无效:en_GB。我只想知道为什么Java和javascript表现不同,什么是最好的解决方案

1 个答案:

答案 0 :(得分:1)

  

我只想知道为什么Java和javascript表现不同

因为它们是不同的语言,每种语言都有自己的决定。

诚然,有标准的BCP 47来识别语言,可惜Java选择不使用它。

但是,java.util.Locale是一个类,因此它不会自行“返回”任何东西。您正在观察的结果是让某些东西自动将java.util.Locale类的对象转换为String的结果。这是通过调用类的toString()方法完成的,该方法给出结果en_GB。

同样,遗憾的是,toString()方法将被实现以产生除BCP 47标准之外的任何东西,但BCP 47于2009年发布,Java的java.util.Locale于1997年发布。自从它存在以来就一直使用它,没有人希望这些程序通过任意改变方法的行为来破坏。

总而言之,尽管期望尽最大努力实现最小惊喜原则是有价值的,但是当期望使用特定格式时,盲目依赖默认的自动选择的转换仍然是一个相当糟糕的做法。 (毕竟,此讨论是关于指定一种语言,以便使用该语言正确格式化日期。)

  

什么是最佳解决方案

致电toLanguageTag()