DateFormatter将am / pm转换为a。米/页米在西班牙语中

时间:2018-06-29 08:13:19

标签: android date datetime localization datetime-format

我正在使用DateFormatter“ Thu Jun 28 14:25:00 GMT + 03:00 2018”进行解析,它正确地输出了Jun 28,2018 2:25:00 pm。但是,当用户切换到西班牙语语言环境时,格式化程序将输出jun。 28,2018 2:25:00羽米这正常吗?

这是我解析日期的方式

    DateFormatter dateFormatter = new DateFormatter();
    dateFormatter.setDateFormatPattern("MMM dd, yyyy hh:mm:ss a");
    mCalendar = new GregorianCalendar(mTimeZone);
    mCalendar.setTime(date);
    mSimpleDateFormat.applyPattern(pattern);
    mSimpleDateFormat.setTimeZone(mTimeZone);

    mSimpleDateFormat.format(mCalendar.getTime());

2 个答案:

答案 0 :(得分:3)

这是正确的表示形式。例如,比较Spanish AM / PM字符串和Italian AM / PM字符串。您会看到西班牙语是下午,而意大利语是下午。

尽管您可能想参考this Quora答案,该答案指出西班牙语时间始终以24小时格式显示。

答案 1 :(得分:2)

Γειασου。我相信vguzzi’s answer是正确的。我想添加两条消息:

  • 避免使用过时的类GregorianCalendarDateTimeZone和臭名昭著的SimpleDateFormat。而是使用java.time(现代的Java日期和时间API)。
  • 使用内置的本地化格式,而不是滚动自己的格式来更好地满足本地受众的期望。

代码示例:

    DateTimeFormatter originalFormatter
            = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ROOT);
    DateTimeFormatter userFormatter 
            = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
    String originalDateTimeString = "Thu Jun 28 14:25:00 GMT+03:00 2018";
    ZonedDateTime dateTime = ZonedDateTime.parse(originalDateTimeString, originalFormatter);
    String formattedDateTime = dateTime.format(userFormatter);
    System.out.println(formattedDateTime);

在美国语言环境中运行时,它会打印出与您类似的结果:

  

2018年6月28日,下午2:25:00

已经在英国的语言环境有所不同:

  

2018年6月28日,14:25:00

有英文和英文。而且Java知道西班牙语也不会使用AM和PM:

  

6月28日。 2018 14:25:00

得知希腊确实做到了,这真让我感到惊讶:

  

2018年10月28日,2:25:00μ.μ。

输出示例来自Java 9上运行的代码。在某些情况下,Android上的语言环境数据可能会有所不同,但输出会略有不同,但仍非常适合不同的本地受众。

问题:我可以在Android上使用java.time吗?

是的,java.time在较新的Android设备上都能很好地工作。它只需要至少Java 6

  • 在Java 8和更高版本以及较新的Android设备上(我被告知,从API级别26开始),内置了现代API。
  • 在Java 6和7中,获得ThreeTen Backport,即新类的backport(JSR 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类。

链接