我正在尝试做一个简单的日期格式,它确实很好用,很容易,但问题是语言。我使用语言环境“es_ES”来获取“Miércoles”而不是“Wednesday”并对此进行排序,但我失败了。
这是我的代码:
SimpleDateFormat formato =
new SimpleDateFormat("EEEE d 'de' MMMM 'de' yyyy", new Locale("es_ES"));
String fecha = formato.format(new Date());
fecha
字符串的EXPECTED值为:
Miércoles4de Abril de 2012
但我还是得到了:
2012年4月4日星期三
我做错了什么?
答案 0 :(得分:63)
“es_ES”是一种语言+国家/地区。您必须单独指定每个部分。
Locale
的构造函数是:
您希望new Locale("es", "ES");
获取与es_ES一起使用的区域设置。
但是,最好使用格式正确的IETF BCP 47语言标记es-ES
(-
代替_
)来使用Locale.forLanguageTag("es-ES")
,因为方法可以返回缓存的Locale
,而不是始终创建新的。{/ p>
答案 1 :(得分:4)
LocalDate today = LocalDate.now();
String day = today.getDayOfWeek().getDisplayName(TextStyle.FULL, new Locale("es","ES")));
也适用于月份。
答案 2 :(得分:3)
String output =
ZonedDateTime.now ( ZoneId.of ( "Europe/Madrid" ) )
.format (
DateTimeFormatter.ofLocalizedDate ( FormatStyle.FULL )
.withLocale ( new Locale ( "es" , "ES" ) )
)
;
martes 12 de julio de 2016
Affe的accepted Answer是正确的。您错误地构造了Locale
对象。
问题和答案都使用现在由Java 8及更高版本内置的java.time框架取代的旧的过时类。这些类取代了旧的麻烦的日期时间类,如java.util.Date
。见Oracle Tutorial。许多java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。
这些类包括DateTimeFormatter
,用于在从日期时间值生成字符串时控制文本格式。您可以指定显式格式设置模式。但为什么要这么麻烦?让课程自动将格式本地化为特定Locale
的人类语言和文化规范。
例如,获取Madrid regional time zone中的当前时刻。
ZoneId zoneId = ZoneId.of( "Europe/Madrid" );
ZonedDateTime zdt = ZonedDateTime.now( zoneId );
// example: 2016-07-12T01:43:09.231+02:00[Europe/Madrid]
实例化格式化程序以生成表示该日期时间值的String。通过FormatStyle
(完整,长,中,短)指定文本的长度。
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.FULL );
将Locale
应用于substitute for分配给格式化程序的JVM current default Locale
。
Locale locale = new Locale ( "es" , "ES" );
formatter = formatter.withLocale ( locale );
使用格式化程序生成String对象。
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
答案 3 :(得分:1)
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
答案 4 :(得分:1)
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);