Java 不能';t将日期翻译为西班牙语,并使用语言环境(“es”)
我正在尝试做一个简单的日期格式,它确实非常有效,非常简单,但问题是语言。我使用区域设置“es_es”来获取“Miércoles”,而不是“星期三”之类的内容,但我失败了 这是我的密码: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字符串
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);