给定以下基于ThreeTenBp的DateFormatter
:
class DateFormatter private constructor() {
private val dateShortTimeShortFormatter =
org.threeten.bp.format.DateTimeFormatter.ofLocalizedDateTime(
FormatStyle.SHORT, FormatStyle.SHORT)
fun getFormattedDateTimeShort(time: Long): String {
return dateShortTimeShortFormatter.withZone(ZoneId.systemDefault())
.format(Instant.ofEpochMilli(time))
}
/* ... */
}
我在 GNOME 终端 shell ( LANG=en_US.UTF-8
) 中的 Ubuntu 20.04 上运行以下测试:
class DateFormatterTest {
private val systemTimezone = TimeZone.getDefault()
private val systemLocale = Locale.getDefault()
@Before
fun resetTimeZone() {
TimeZone.setDefault(TimeZone.getTimeZone("GMT+1"))
}
@After
fun resetSystemDefaults() {
Locale.setDefault(systemLocale)
TimeZone.setDefault(systemTimezone)
}
@Test
fun getFormattedDateTimeShort() {
Locale.setDefault(Locale.US)
assertThat(DateFormatter.newInstance().getFormattedDateTimeShort(1548115200000L))
.isEqualTo("1/22/19 1:00 AM")
}
}
它成功了。
当我在 Android Studio 4.2 Beta 3 或 Android Studio 2020.3.1 Canary 4 中运行它时,它失败并出现以下错误:
org.junit.ComparisonFailure:
预期:“1/22/19 1:00 AM”
实际:“1/22/19,1:00 AM”
截至 2021 年 1 月 16 日的 Java 新闻
基于 Ole VV 的评论和回答,我发现测试在 shell 中的行为因 Java 版本而异。Gradle 拿起JAVA_HOME
- 因此我需要更新环境变量。请注意,将符号链接更改为java
可执行文件 viasudo update-alternatives --config java
无效。
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
-> Test succeeds
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
-> Test fails
export JAVA_HOME=/usr/lib/jvm/java-14-openjdk-amd64
-> Process 'Gradle Test Executor 1' finished with non-zero exit value 134
Java/JRE 9 不适用于此 Ubuntu 版本。
解决方案:Android Studio 中的 Java/JDK
在 IDE 中,我还可以通过以下方式更改JDK location
项目的File > Project Structure ... > SDK location
:
一旦我从预配置的 JDK 11(在 IDE 的安装文件夹中)更改为 JDK 8 - 然后测试成功!