Java 不能';t将日期翻译为西班牙语,并使用语言环境(“es”)

Java 不能';t将日期翻译为西班牙语,并使用语言环境(“es”),java,date,locale,Java,Date,Locale,我正在尝试做一个简单的日期格式,它确实非常有效,非常简单,但问题是语言。我使用区域设置“es_es”来获取“Miércoles”,而不是“星期三”之类的内容,但我失败了 这是我的密码: SimpleDateFormat formato = new SimpleDateFormat("EEEE d 'de' MMMM 'de' yyyy", new Locale("es_ES")); String fecha = formato.format(new Date()); fecha字符串

我正在尝试做一个简单的日期格式,它确实非常有效,非常简单,但问题是语言。我使用区域设置“es_es”来获取“Miércoles”,而不是“星期三”之类的内容,但我失败了

这是我的密码:

SimpleDateFormat formato = 
    new SimpleDateFormat("EEEE d 'de' MMMM 'de' yyyy", new Locale("es_ES"));
String fecha = formato.format(new Date());
fecha
字符串的预期值为:

2012年4月4日

但我仍然得到:

2012年4月4日星期三

我做错了什么?

“英语”是一种语言+国家。必须分别指定每个零件

其施工人员为:


  • 从语言代码构造区域设置

  • 从语言、国家/地区构建区域设置

  • 根据语言、国家或变体构建区域设置
您需要
新的区域设置(“es”、“es”)
以获取与es_es匹配的区域设置

但是,最好使用格式良好的IETF BCP 47语言标记
es
(使用
-
而不是
\uuu
),因为该方法可以返回缓存的
区域设置,而不是总是创建一个新的;博士
martes 12 de julio de 2016

细节 阿菲的回答是正确的。您错误地构造了
区域设置
对象

java.time 问题和答案都使用了过时的类,现在已被内置于Java8和更高版本中的框架所取代。这些类取代了旧的麻烦的日期时间类,如
java.util.date
。看见大部分java.time功能都在中向后移植到Java6和Java7,并在中进一步适应Android

这些类包括用于在从日期时间值生成字符串时控制文本格式的。可以指定显式格式模式。但是为什么要麻烦呢?让类自动将格式本地化为特定
地区的人类语言和文化规范

例如,获取中的当前时刻

实例化格式化程序以生成表示该日期时间值的字符串。通过(完整、长、中、短)指定文本的长度

将a应用于分配给格式化程序的JVM的
区域设置

Locale locale = new Locale ( "es" , "ES" );
formatter = formatter.withLocale ( locale );
使用格式化程序生成字符串对象

String output = zdt.format ( formatter );
// example: martes 12 de julio de 2016
转储到控制台

System.out.println ( "zdt: " + zdt + " with locale: " + locale + " | output: " + output );
zdt:2016-07-12T01:43:09.231+02:00[欧洲/马德里],地点:es|es |输出:martes 12 de julio de 2016

爪哇8
也适用于一个月。

西班牙语区域设置在
locale.getAvailableCales()中可用吗?
记住这是一个很好的提示,谢谢,太好了,非常感谢,我一定已经看过了构造器。变体的具体用途是什么?@JoseSerodio使用变体的区域设置只有5个:
en_US\u POSIX:English(美国,计算机)
no\u-no\u-NY:Norwegian(挪威,尼诺尔斯克)
th\u-nu-thai:thai(泰国,th)
ja\u-JP\u-ca-japanese:japanese(日本,JP)
ca\u-ES\u-VALENCIA:Catalan(西班牙,巴伦西亚)
它没有给出要求的输出。无论如何,投票支持使用java.time这个现代java日期和时间API的演示(作为第三个答案)。用空格填充每个括号看起来很糟糕。@Andrewallis现在是2020年,有4K、5K、6K屏幕。我们不再需要像1978年那样编写代码,塞满了一个。@BasilBourque我够不着我的口袋,从2020 xD开始,我的手机有4k屏幕
Locale spanishLocale=new Locale("es", "ES");
    String dateInSpanish=localDate.format(DateTimeFormatter.ofPattern("EEEE, dd MMMM, yyyy",spanishLocale));
    System.out.println("'2016-01-01' in Spanish: "+dateInSpanish);
String output = zdt.format ( formatter );
// example: martes 12 de julio de 2016
System.out.println ( "zdt: " + zdt + " with locale: " + locale + " | output: " + output );
    Locale esLocale = new Locale("es", "ES");//para trabajar en español
    SimpleDateFormat formatter = new SimpleDateFormat(strFormatoEntrada, esLocale);//El formato con que llega mi strFecha más el lenguaje
LocalDate today = LocalDate.now();
String day = today.getDayOfWeek().getDisplayName(TextStyle.FULL, new Locale("es","ES")));
Locale spanishLocale=new Locale("es", "ES");
    String dateInSpanish=localDate.format(DateTimeFormatter.ofPattern("EEEE, dd MMMM, yyyy",spanishLocale));
    System.out.println("'2016-01-01' in Spanish: "+dateInSpanish);