当前位置: 首页 > 知识库问答 >
问题:

在Java自定义区域设置

郎鹤龄
2023-03-14

在Java中,Locale定义了与人们想要如何看待事物相关的事物(比如货币格式、月份名称以及一周开始的时间)。

解析月份名称时(使用DateTimeFormatter)会变得很棘手。

如果使用Locale。美国地区。英语Sep的缩写形式是九月。

如果使用Locale。UKSep在Java11中也有缩写形式Sep。。。但是,当您尝试Java 17时,它有Sept(因为Unicode CLDR端的更改,我问这是否正确)。

结果是,我的测试在尝试使用Java 17构建时开始失败。

我当前代码使用Locale的原因。英国而不是地区。英语是因为在Java语言环境中。英语实际上不仅是英语,而且是非ISO美式的定义周的方式(他们使用星期天作为一周的第一天)。我想用ISO的方式。

简单地说:

  • 威克菲尔德。ISO=周ields.of(区域设置。英国)=周末字段[星期一,4]
  • 周ields.of(Locale.周ields.of(区域设置。美国)=周末字段[周日,1]

所以从Java17开始,我还没有能够找到一个正常工作的内置区域设置。

在我看来,我必须选择语言环境。英语并更改周字段或使用语言环境。UK并将9月份的简称更改为我需要的。

我的问题是如何做到这一点(在Java17中)?

或者有更好的方法来解决这个问题?


共有1个答案

微生俊名
2023-03-14

如果你对周的定义与ISO8601一致,我建议在你的项目中增加三个额外的库来使用它的YearWeek类。

那门课比周末更方便。不管JVM当前的语言环境如何,这个类都是在ISO8601周内固定的。

YearWeek yw = YearWeek.now( ZoneId.of( "Europe/London" ) ) ;
LocalDate weekStart = yw.atDay( DayOfWeek.MONDAY ) ;

至于解决CLDR中的更改,您可能可以使用旧的语言环境定义,而不是CLDR。

据我所知,基于OpenJDK的Java17实现可能会携带遗留的语言环境定义以及CLDR定义。

在Java9中,优先级的顺序从旧的Java特定定义第一,CLDR第二改为相反。您可以通过设置系统属性java.locale.providers来逆转这种情况。参见JEP 252Java讨论。

 类似资料:
  • 我正在用cakephp开发一个用户库,用于我的应用程序中的翻译操作。我想创造。po文件在Lib目录中,这就是为什么我在Lib目录中创建Locale文件夹,并在相应的语言目录中创建po文件。但问题是CakePHP在默认情况下是在其默认区域设置位置搜索po文件的。现在我的语言环境目录在Lib文件夹中。 我怎么能让cakephp搜索po文件在我自己的区域设置目录这是在Lib文件夹? 这是我的翻译课程代码

  • 编辑: 我的理解可能是错误的,但这是一个不同于以编程方式设置语言环境的问题,因为我已经实现了那里建议的答案,我仍然有一些问题。 在这个问题中,我请求帮助解决这些问题(在设置的语言环境中没有参考的问题)。 原始帖子 我试图在我的应用程序中实现自定义语言环境,并遇到几个问题。 在调用setContentView之前,我在所有活动中使用以下代码: 编辑: 我还测试了它与: 我添加到Android中的所有

  • 我正在尝试在Symfony 2.7项目中使用locale。我想将区域设置设置为

  • 更新时间:2019-06-12 10:28:29 默认域名 平台会为您生成该项目下所有服务可用的二级域名,可在顶部菜单“发布”-“域名管理”查看默认域名及自定义域名。默认域名是为了便于您调试API时使用,是http协议。如果您需要使用https协议的域名,或者将服务进行商业化使用,则需要在“域名管理”-“自定义域名”处进行自定义域名绑定及https证书的上传。 请注意,默认域名有限流策略。同一个默

  • 所有在 Gitbook.com 上的书的http地址为 http://{author}.gitbooks.io/{book}/,而书内容的地址是 http://{author}.gitbooks.io/{book}/content/。 但是你也可以使用你自定义的域名(GitBook的免费功能)。域名可以绑定到你的主页或者内容上(或两者都)。 很容易就可以添加一个自定义域名。 GitBool.com