首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Java中按地区正确的顺序格式化日和月?

如何在Java中按地区正确的顺序格式化日和月?
EN

Stack Overflow用户
提问于 2019-06-28 06:49:36
回答 3查看 2.2K关注 0票数 8

是否有一种方法可以按照Java/Kotlin中的区域设置正确的顺序格式化一天和一个月(以紧凑的形式),而不是按年份编排?所以对于英语来说,应该是“9月20日”,而瑞典语则是“9月20日”。

作为比较,在Cocoa平台上,我可以做以下工作(在Swift中):

代码语言:javascript
复制
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "sv_SE")
formatter.setLocalizedDateFormatFromTemplate("MMM d")
print(formatter.string(from: Date()))

这将正确地扭转局面。与Java有类似的关系吗?我一直在用DateTimeFormatter和旧的SimpleTimeFormat API尝试各种形式,但都没有成功。

注释:这个问题不同,我不想要包含年份的完整的中等格式。我也不想要DateTimeFormatter.ofPattern("MMM d"),因为这给出了瑞典语的不正确结果,或者DateTimeFormatter.ofPattern("d MMM"),因为这在英语中给出了错误的结果。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-28 07:18:49

不,对不起。我知道没有任何Java库会自动将"MMM d"转换为20 sep.,因为区域设置更喜欢月份缩写前的月份。

您可以尝试以这种方式修改按行回答

代码语言:javascript
复制
DateTimeFormatter ft = 
    DateTimeFormatter
    .ofLocalizedDate(FormatStyle.MEDIUM)
    .withLocale(Locale.forLanguageTag("sv-SE"))
;

然而,其结果是:

9月20日2019

包括你没有要求的那一年。

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

代码语言:javascript
复制
DateTimeFormatterBuilder
.getLocalizedDateTimePattern(
    FormatStyle.MEDIUM, 
    null, 
    IsoChronology.INSTANCE, 
    Locale.forLanguageTag("sv-SE")
)

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

可能很不稳定。即使您查看了所有可用区域设置的格式模式字符串,下一个版本的CLDR (字符串的来源)仍然可能包含一个惊喜。但我认为这是我们所能做的最好的了。如果是我,我会考虑抛出一个异常,以防检测到来自getLocalizedDateTimePattern的字符串看起来不像我知道如何修改的字符串。

票数 8
EN

Stack Overflow用户

发布于 2019-06-28 06:55:30

您可以使用LocalDate在Java中完成此操作:

代码语言:javascript
复制
LocalDate dt = LocalDate.parse("2019-09-20"); 
System.out.println(dt);   
DateTimeFormatter ft = DateTimeFormatter.ofPattern("dd MMM", new Locale("sv","SE")); 
System.out.println(ft.format(dt));
票数 1
EN

Stack Overflow用户

发布于 2022-05-24 10:32:12

您可以获得DateFormat的模式并删除该年:

代码语言:javascript
复制
val locale: Locale
val datePattern = (DateFormat.getDateInstance(DateFormat.MEDIUM, locale) as SimpleDateFormat).toPattern()
    .replace("y", "").trim { it < 'A' || it > 'z' }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56802168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档