您可以格式化西班牙时间字符串Java以强制使用大写的AM / PM吗?

问题描述

英语时间格式“ h:mm a”为​​“ 8:32 AM”。在西班牙语中,同一时间格式“ h:mm a”为​​我“上午8:32”。有没有一种简单的方法可以将西班牙语格式化为英语?您可以在Android / Java中以大写形式将格式强制为AM / PM吗?

解决方法

简单的解决方案:指定使用大写AM和PM的语言环境。例如:

    DateTimeFormatter formatter = DateTimeFormatter
            .ofLocalizedTime(FormatStyle.SHORT)
            .withLocale(Locale.US);
    
    LocalTime time = LocalTime.of(8,32);
    
    String withUpperCaseAmPm = time.format(formatter);
    System.out.println(withUpperCaseAmPm);

输出为:

8:32 AM

我当然使用的是现代Java日期和时间API java.time。

硬解决方案:明确指定文本AMPM

    Map<Long,String> amPmTexts = new HashMap<>();
    amPmTexts.put(0L,"AM");
    amPmTexts.put(1L,"PM");
    DateTimeFormatter formatter = new DateTimeFormatterBuilder()
            .appendPattern("h:mm ")
            .appendText(ChronoField.AMPM_OF_DAY,amPmTexts)
            .toFormatter();

使用此格式化程序时,输出与以前相同。

问题:java.time是否不需要Android API级别26?

java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在非Android Java 6和7中,获得ThreeTen Backport,这是现代类的backport(JSR 310的ThreeTen;请参见底部的链接)。
  • 在较旧的Android上,请使用废除旧书或Android版本的ThreeTen Backport。称为ThreeTenABP。在后一种情况下,请确保使用子包从org.threeten.bp导入日期和时间类。

链接