无法日期以西班牙文语言环境翻译(“es_ES”)(Couldn't translate Da

2019-06-23 10:07发布

我试图做一个简单的日期格式,它不工作的伟大,这是很容易的,但问题是语言。 我使用的语言环境“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年四月

我究竟做错了什么?

Answer 1:

“es_ES”是一种语言+国家。 您必须分别指定每个部分。

对于构造Locale有:

  • 区域设置(String语言)
    构建从语言代码的语言环境。
  • 语言环境(语言的字符串,字符串国)
    从语言构造一个语言环境,国家。
  • 语言环境(语言的字符串,字符串的国家,字符串变量)
    从语言,国家和变量构造一个语言环境。

你想new Locale("es", "ES"); 得到与es_ES去的地点。

然而,这将是更好地使用Locale.forLanguageTag("es-ES")采用合式IETF BCP 47语言标记es-ES (带-而不是_ ),因为该方法可以返回一个缓存的Locale ,而不是总是创建一个新的。



Answer 2:

Java的8

LocalDate today = LocalDate.now();
String day = today.getDayOfWeek().getDisplayName(TextStyle.FULL, new Locale("es","ES")));

也适用于一个月。



Answer 3:

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日



Answer 4:

    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


文章来源: Couldn't translate Date to spanish with Locale(“es_ES”)
标签: java date locale