当前位置: 首页 > 面试题库 >

如何在Java中以语言环境正确的顺序格式化日期和月份?

邵弘伟
2023-03-14
问题内容

有没有一种方法可以用Java / Kotlin中的区域设置正确的格式格式化日期和月份(紧凑格式),而不格式化年份?因此,对于英语,应为“
9月20日”,而对于瑞典语为“ 9月20日”。

为了进行比较,在Cocoa平台上,我可以执行以下操作(在Swift中):

let formatter = DateFormatter()
formatter.locale = Locale(identifier: "sv_SE")
formatter.setLocalizedDateFormatFromTemplate("MMM d")
print(formatter.string(from: Date()))

这将正确地扭转局面。Java
SDK是否有等效的功能?我一直在尝试使用DateTimeFormatterSimpleTimeFormatAPI的各种形式,但都没有成功。

注意: 与这个问题不同,我不希望包含年份的完整媒介格式。我也不想要DateTimeFormatter.ofPattern("MMMd"),因为这会在瑞典语中给出错误的结果,或者DateTimeFormatter.ofPattern("d MMM"),因为那会在英语中给出错误的结果。


问题答案:

不,对不起 我知道没有Java库会自动将其"MMM d"转换20 sep.为偏爱月份缩写前的月份的语言环境。

您可以尝试通过以下方式修改Rowi的答案:

DateTimeFormatter ft = 
    DateTimeFormatter
    .ofLocalizedDate(FormatStyle.MEDIUM)
    .withLocale(Locale.forLanguageTag("sv-SE"))
;

但是结果是:

9月20日 2019年

它包括您不要求的年份。

高级解决方案将使用DateTimeFormatterBuilder该类来构建DateTimeFormatter对象。

DateTimeFormatterBuilder
.getLocalizedDateTimePattern(
    FormatStyle.MEDIUM, 
    null, 
    IsoChronology.INSTANCE, 
    Locale.forLanguageTag("sv-SE")
)

这返回d MMM y。修改此字符串以删除y和之前的空格。注意,在其他语言中y可能是yyyyyyu与字符串中最后可能不来。将修改后的格式模式字符串传递给DateTimeFormatter.ofPattern

可能有些不稳定。即使您查看所有可用语言环境的格式模式字符串,CLDR的下一版本(字符串来自何处)也可能会令人吃惊。但我认为这是我们能做的最好的事情。如果是我,我会考虑引发异常,以防万一我可以检测到来自的字符串getLocalizedDateTimePattern看起来不像我知道如何修改的字符串。



 类似资料:
  • 我在我的应用程序中使用日期格式化程序来显示一些日期。但我希望这个日期以阿拉伯语显示。所以我试图像这样改变格式化程序的区域设置: 但它不起作用。。 如果我改成这样: 会工作正常...但我希望日期显示在阿拉伯语... 如何做到这一点?我希望日期是例如١١ يناير ٢٠١٨..怎么办?

  • 问题内容: 我有来自服务器的日期,格式为“ 2013-01-20T16:48:43”,我的应用程序同时支持阿拉伯语和英语语言环境。但是,当我将语言环境更改为阿拉伯语时,日期无法解析,因此无法解析。到现在为止我写的是 问题答案: 不要将您的日期解析为阿拉伯语,除了按如下方式尝试通过仅设置“英语区域设置”之外,它还会给您带来错误提示。

  • 问题内容: 有什么帮助,如何从这样的字符串中获取正确的日期,例如“ 2014-01-10T09:41:16.000 + 0000”,我的代码是: 结果中,我给出了这样的结果:“ 10-0-2014”,我想要这样的结果:“ 10-01-2014” 提前致谢 :) 问题答案: 该文档指出: java.util.Calendar.MONTH MONTH public static final int M

  • 问题内容: 我是Java和Android开发的新手,所以这可能是一个愚蠢的问题,但是我已经搜寻了好几天,却找不到解决方案: 我尝试根据用户的语言环境输出a 。 在StackOverflow上搜索使我想到了这一点: 输出: 在我的法语本地电话上。差不多了 我如何也输出 小时,分钟和秒部分 的,使用用户的语言环境?我一直在寻找android文档,但找不到任何东西。 非常感谢。 问题答案: 用 参考:h

  • 问题内容: 可以使用特定格式在Java 8中格式化: 假设这将导致: 如您所见,Java决定使用哪个定界符(“-”,“。”,“ /”,“”等)以及如何对日期元素进行排序(例如,在某些语言环境中是月日,反之亦然,等等)可能是那一年来的第一,等等。 我的问题是: 如何格式化和取决于上面的示例? 根据示例,我希望得到这样的结果… …用于: …用于: 当然,可能还有其他使用完全不同的定界符和顺序的。 谢谢

  • 问题内容: 在我的应用中,我需要以对语言环境敏感的方式显示日期。因此,“ 2018年5月10日星期四”应按原样显示在en_US中,但应显示为“ 2018年5月10日星期四”在en_GB中(英国英文)。 在大多数情况下,我可以将以下样式的代码与java.time API类一起使用: 在这种情况下,我没有指定明确的日期模式,而是指定了符号格式。 我不确定在没有满足我需求的标准FormatStyle的情