问题描述
英语时间格式“ 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。
硬解决方案:明确指定文本AM
和PM
。
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
导入日期和时间类。
链接
- Oracle tutorial: Date Time解释如何使用java.time。
- Java Specification Request (JSR) 310,其中首先描述了
java.time
。 - ThreeTen Backport project,即
java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。 - Java 8+ APIs available through desugaring
- ThreeTenABP,Android版本的ThreeTen Backport
- Question: How to use ThreeTenABP in Android Project,其中有非常详尽的解释。