如何在Android上使用本地化时间单位格式化字符串的持续时间?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Android上使用本地化时间单位格式化字符串的持续时间?相关的知识,希望对你有一定的参考价值。

我想格式化一个字符串中的持续时间(例如以秒为单位),该字符串将包含时间单位的本地化名称。例如,对于输入8692,我将得到字符串“2小时24分52秒”,其中时间单位正确地针对每种语言进行了本地化。 android中是否有一些类可以做到这一点?有没有人知道一些外部开源库?谢谢。

答案

我不知道任何开源库,但如果我正确理解了这个问题,那么手工制作它应该不会太难:

public static String foo(int duration) {
    int hours = duration/3600;
    int minutes = (duration%3600)/60;
    int seconds = duration%60;
    return hours + getResources().getString(R.string.hours) +
           minutes + getResources().getString(R.string.minutes) +
           seconds + getResources().getString(R.string.seconds);
}

然后在strings.xml中定义这些字符串并像往常一样对它们进行本地化。 (见http://developer.android.com/guide/topics/resources/localization.html

至于Android,你可以使用Duration类(http://developer.android.com/reference/javax/xml/datatype/Duration.html),但它的toString()方法并不完全符合你的要求。

编辑只是为了完整性:我现在更好地理解您的问题,您不希望手动本地化所有时间单位。 Unicode公共区域设置数据存储库提供了一些(很多,很多)有趣的数据。它们提供了几乎任何你想要本地化的XML数据,例如: de.xml(德国):

<unit type="duration-hour">
    <displayName>Stunden</displayName>
    <unitPattern count="one">{0} Stunde</unitPattern>
    <unitPattern count="other">{0} Stunden</unitPattern>
    <perUnitPattern>{0} pro Stunde</perUnitPattern>
</unit>

我认为这是矫枉过正,但正如我所说:为了完整性。

另一答案

我这样做了。

val minuteString = systemResources.getString(systemResources.getIdentifier("minute", "string", "android"))
val secondString = systemResources.getString(systemResources.getIdentifier("second", "string", "android"))
val hourString = systemResources.getString(systemResources.getIdentifier("hour", "string", "android"))
val dayString = systemResources.getString(systemResources.getIdentifier("day", "string", "android")

在此文件中,您可以查找其他时间单位资源https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/strings.xml

以上是关于如何在Android上使用本地化时间单位格式化字符串的持续时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中将格式化字符串与占位符一起使用?

如何在java(android)中以posix格式打印本地时区?

如何将html字符串传递给android上的webview

如何在本地时区将 java.time.Instant 格式化为字符串?

如何查找每行的 android TextView 字符数?

Java/Android - 将 GMT 时间字符串转换为本地时间