DateTimeFormatter 中的 Locale 有何意义?

问题描述 投票:0回答:1

给出以下代码


LocalDate localDateEpoch = LocalDate.parse(
        "01-Jan-2017", DateTimeFormatter.ofPattern("d-MMM-yyyy", Locale.FRENCH));

System.out.println("localDateEpoch: " + localDateEpoch);

我选择法语的原因是 - 法语数字是拉丁数字,所以理论上它应该只是解释这一点(与“Jan”中的字母相同)。尽管如此,我还是收到了这个错误

Exception in thread "main" java.time.format.DateTimeParseException: 
                             Text '01-Jan-2017' could not be parsed at index 3

我的问题

  • First:(与语言环境相关)缺少国家/语言是怎么回事?他们的数量非常有限
  • 2nd:(区域设置相关)为什么有语言/国家的区域设置(如
    French
    France
    )?
  • 3rd:这到底有什么作用?

现在我已经做了一些研究。 似乎可以解决上面提到的缺乏语言的问题,你可以做

Locale.forLanguageTag("fa");
,但为什么不做
Locale.Iran/Persian
。看到一篇文章提到如何在这种情况下将数值转换为波斯语,所以我尝试做相反的事情。

    LocalDate localDateEpoch = LocalDate.parse(
        "۰۱-Jan-۲۰۱۷", DateTimeFormatter.ofPattern("d-MMM-yyyy", Locale.forLanguageTag("fa")));

我再次遇到错误。

Exception in thread "main" java.time.format.DateTimeParseException: 
                             Text '۰۱-Jan-۲۰۱۷' could not be parsed at index 0

如果你好奇的话,我在没有

MMM
的情况下尝试过,但仍然遇到同样的错误。

java date locale localdate
1个回答
0
投票

我只是要快速总结一下 @sotirios-delimanolis 和 @user85421 在评论中所说的内容。

问题/解答

  • 第一:(语言环境相关)缺少国家/语言是怎么回事?它们非常有限 不完全确定为什么不是所有语言都可以作为
    Locale
    类变量访问。但是您可以使用
    Locale.forLanguageTag("fa")
    绕过此限制(例如。
  • 第二:(与区域设置相关)为什么有语言/国家的区域设置(如法语和法国)? 这里提到 但是 TLDR:像法语和德国这样的语言有子公司,因此您可以使用法语作为 fr-CA(加拿大法语) )这基本上和法国的 France 不完全一样。
  • 第三:这有什么作用?提供另一种存储日期的方法。现在,根据我的测试,这会改变月份参数,您可以使用
    localizedBy
    作为数字字母。现在,至少在波斯语中,此对话是英语表示,而不是日历指定的月份名称。
© www.soinside.com 2019 - 2024. All rights reserved.