【发布时间】:2015-04-21 07:31:57
【问题描述】:
是的,我是 java 新手,这个问题在 stackoverflow 的其他一些链接中被问到(Java equivalent of Invariant Culture)。但仍然没有结论表明,
- java 中没有类似的方法可以做到这一点
- 还有一个选择
下面的语句在java中会做什么。
Locale invariant = new Locale("","","");
我对上面的语句很感兴趣,因为在 C# 中,下面的代码会带来 Invariant 文化设置。
CultureInfo Invc = New CultureInfo("");
我想知道这是否可能在 java 中具有不变的文化设置,是否有可能通过任何解决方法或如何在具有独立文化设置的 Java 中编写代码。下面的 MSDN 引用说明了独立文化设置的必要性。
以与文化无关的格式存储数据可确保已知格式 这不会改变。当来自不同文化的用户访问 数据,可以根据特定用户进行适当的格式化。为了 例如,如果您的应用程序将 DateTime 类型存储在文本文件中, 为不变的文化格式化,应用程序应该使用 调用 ToString 存储字符串时的 InvariantCulture 属性 和 Parse 方法来检索字符串。该技术确保 DateTime 类型的基础值不会改变 数据由来自不同文化背景的用户读取或写入。
【问题讨论】:
-
语言环境涵盖了许多与 C# 中的 CultureInfo 相同的功能。据我所知,它没有“不变”版本。数据以默认格式存储(例如自 1970 年以来以毫秒为单位的时间,或以固定区域性/区域设置形式存储,例如 YYYY-mm-dd hh:mm:ss 在使用特定区域设置读取和写入时解析) .我怀疑 c# 的“不变”文化秘密地将其写为 locale US_en,因此您可以根据需要使用该语言环境。
-
据我所知,C# 中的“en-US”文化和 Invariant 文化之间存在一些差异。代码
double value = 12345.6789;Console.WriteLine(value.ToString("C", CultureInfo.CreateSpecificCulture("en-US")));Console.WriteLine(value.ToString("C", CultureInfo.InvariantCulture));产生不同的结果