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

有没有一种方法可以用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是否有等效的功能?我一直在尝试使用DateTimeFormatter和较早的SimpleTimeFormat API进行各种形式的操作,但是都没有成功。

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

java大神给出的解决方案

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

您可以尝试通过以下方式修改answer by 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的字符串看起来不像我知道的修改方式。

用Java封装对象? - java

private中的Java提供类级别的封装。可以封装一个对象吗?还是这样做徒劳?例如,如果我们将一个类定义为 public class Person { private String ssn; private ArrayList<Person> friends = new ArrayList<Person>(); public voi…

DataSourceTransactionManager和JndiObjectFactoryBean和JdbcTemplate的用途是什么? - java

以下的用途是什么:org.springframework.jdbc.core.JdbcTemplate org.springframework.jdbc.datasource.DataSourceTransactionManager org.springframework.jndi.JndiObjectFactoryBean <tx:annotatio…

Tomcat找不到直接放置在classes文件夹下的类 - java

我有以下JSP:<%@ page import="foo.*" %> <html> <body> The page count is: <%=Counter.getCount()%> </body> </html> 我在包Counter中有一个foo类,该类存储在: …

Java日期格式解析 - java

我正在尝试通过JSON响应更改日期格式,但我一直在获取java.text.ParseException。这是来自服务器2015-02-03T08:37:38.000Z的日期,我希望它显示为2015/02/03这是yyyy-MM-dd。而我做到了。DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd�…

快速解析来自http://bit.ly链接的方法 - java

给定来自流的一系列URL,其中可能有数百万个bit.ly,google或tinyurl缩短了链接,那么解析这些URL以获得最终URL的最可扩展的方法是什么?一个多线程爬虫在每个短链接上执行HEAD请求,同时缓存已经解决的请求?是否已经有提供此服务的服务?还要考虑到不会被url缩短服务阻止。假设规模是每天缩短2000万个网址。 java大神给出的解决方案 Go…