如何在 time4j 库中使用 PrettyTime?

How to use PrettyTime in time4j library?

我收到的短信以秒为单位(例如 7261)。我需要将其转换为这种格式: 2 小时、1 米、1 秒

我正在使用 time4j 库。根据他们的 Github page,我正在做这样的事情:

val duration = Duration.of(7261, ClockUnit.SECONDS).with(Duration.STD_CLOCK_PERIOD)
val prettifiedDuration = PrettyTime.of(Locale.ENGLISH).print(duration)

但是,我得到这个错误:

06-22 11:50:52.133 12161 12244 E AndroidRuntime: java.lang.ExceptionInInitializerError
06-22 11:50:52.133 12161 12244 E AndroidRuntime:    at net.time4j.base.ResourceLoader.getInstance(ResourceLoader.java:167)
06-22 11:50:52.133 12161 12244 E AndroidRuntime:    at net.time4j.PrettyTime.<clinit>(PrettyTime.java:95)
06-22 11:50:52.133 12161 12244 E AndroidRuntime:    at net.time4j.PrettyTime.of(PrettyTime.java:198)

有什么想法吗?甚至更好的解决方案?

您是否缺少一些依赖项?

    <dependency>
        <groupId>net.time4j</groupId>
        <artifactId>time4j-base</artifactId>
        <version>5.6</version>
    </dependency>
    <dependency>
        <groupId>net.time4j</groupId>
        <artifactId>time4j-sqlxml</artifactId>
        <version>5.6</version>
    </dependency>
    <dependency>
        <groupId>net.time4j</groupId>
        <artifactId>time4j-tzdata</artifactId>
        <version>5.0-2020a</version>
    </dependency>

在我的测试中,您的代码工作正常。

val duration = Duration.of(7261, ClockUnit.SECONDS).with(Duration.STD_CLOCK_PERIOD)
val prettifiedDuration = PrettyTime.of(Locale.ENGLISH).print(duration)

println(prettifiedDuration)

输出:

2 hours, 1 minute, and 1 second

所以,我意识到 Android 项目有一个单独的库: https://github.com/MenoData/Time4A

对于 Gradle,添加此依赖项:

implementation("net.time4j:time4j-android:4.6-2020a")

然后在您的应用程序 class 中初始化库:

class MyApplication : DaggerApplication() {

    override fun onCreate() {
        super.onCreate()
        ApplicationStarter.initialize(this, true)
    }
}

然后就可以按照问题中的描述使用了