我试图做一个简单的日期格式,它不工作的伟大,这是很容易的,但问题是语言。 我使用的语言环境“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日
但我仍然得到:
周三4 2012年四月
我究竟做错了什么?
“es_ES”是一种语言+国家。 您必须分别指定每个部分。
对于构造Locale
有:
- 区域设置(String语言)
构建从语言代码的语言环境。 - 语言环境(语言的字符串,字符串国)
从语言构造一个语言环境,国家。 - 语言环境(语言的字符串,字符串的国家,字符串变量)
从语言,国家和变量构造一个语言环境。
你想new Locale("es", "ES");
得到与es_ES去的地点。
然而,这将是更好地使用Locale.forLanguageTag("es-ES")
采用合式IETF BCP 47语言标记es-ES
(带-
而不是_
),因为该方法可以返回一个缓存的Locale
,而不是总是创建一个新的。
Java的8
LocalDate today = LocalDate.now();
String day = today.getDayOfWeek().getDisplayName(TextStyle.FULL, new Locale("es","ES")));
也适用于一个月。
TL;博士
String output =
ZonedDateTime.now ( ZoneId.of ( "Europe/Madrid" ) )
.format (
DateTimeFormatter.ofLocalizedDate ( FormatStyle.FULL )
.withLocale ( new Locale ( "es" , "ES" ) )
)
;
星期二2016年7月12日
细节
该接受的答案是Affe是正确的。 你被错误地构建一个Locale
对象。
java.time
问题和答案都使用旧的过时的类现在被取代java.time内置到Java 8和更高版本的框架。 这些类取代旧的麻烦日期时间类,如java.util.Date
。 见甲骨文教程 。 多的java.time功能后移植到Java 6和7在ThreeTen-反向移植并且还适于在到Android ThreeTenABP 。
这些类包括DateTimeFormatter
以产生从日期时间值字符串时控制文本的格式。 您可以指定一个明确的格式设置模式。 但是,何必呢? 让类自动定位格式的人类语言和特定的文化规范Locale
。
例如,获得当前时刻马德里地区的时区 。
ZoneId zoneId = ZoneId.of( "Europe/Madrid" );
ZonedDateTime zdt = ZonedDateTime.now( zoneId );
// example: 2016-07-12T01:43:09.231+02:00[Europe/Madrid]
实例化一个格式生成一个字符串来表示日期时间值。 指定通过的文本的长度FormatStyle
(完全,长,中,短的)。
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.FULL );
套用一个Locale
,以代替 JVM的当前默认 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:09231 + 02:00 [欧洲/马德里随着区域设置:es_ES | 输出:周三2016年7月12日
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