android - 如何在 Android 上将持续时间格式化为具有本地化时间单位的字符串?

我想在一个字符串中格式化一个持续时间(例如以秒为单位),该字符串将包含时间单位的本地化名称。例如,对于输入 8692,我会得到字符串“2 h 24 min 52 sec”,其中时间单位已为每种语言正确本地化。 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 Common Locale Data Repository 提供了一些(嗯,很多)有趣的数据。它们提供几乎所有您可能想要本地化的 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>

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

https://stackoverflow.com/questions/31182821/

相关文章:

formatting - 在 Redmine wiki 页面中插入特殊字符

wpf - 使用小数分隔符格式化 XAML 中的值?

iphone - 时间跨度的智能格式化

latex - 如何在 LaTeX 中的空格后设置制表位?

python - 避免在字符串中指定相同值的最pythonic方法是什么

string - 如何在 Haskell 中填充整数的字符串表示形式?

c# - 使用 .NET 格式化大数

c# - 为什么只有一个语句的方法需要大括号?

java - 格式字符串变为 xxx1、xx10 或 1###、10## 等

php - 正则表达式 - 去除非数字并删除美分(如果有)