【问题标题】:How to force minutes in DateUtils#getRelativeTimeSpanString(long, long, long)?如何在 DateUtils#getRelativeTimeSpanString(long, long, long) 中强制分钟?
【发布时间】:2018-03-28 01:26:54
【问题描述】:

我的应用有一个 0 - 120 分钟的选择器。我想这样显示时间:“In ... minutes”。

我找到了DateUtils#getRelativeTimeSpanString(long, long, long) 方法,它适用于 60 分钟以下的值。但是,如果该值是 60 分钟或更高,则将其显示为“1 小时内”而不是“120 分钟内”。

这是我正在使用的代码:

int minutes = 70;
long millis = minutes * 60 * 1000;
String text = DateUtils.getRelativeTimeSpanString(millis, 0L, DateUtils.MINUTE_IN_MILLIS);
myTextView.setText(text); // Displays "In 1 hour" instead of "In 70 minutes".

如何强制输出以分钟为单位?

【问题讨论】:

  • 你也可以尝试使用字符串资源,计算分钟来达到你想要的效果。
  • 好吧,也许有一种方法可以用 java 做到这一点,但是为什么在你已经有几分钟的时候使用 getRelativeTimeSpanString 呢?
  • @GabrielCosta 我想尽可能使用默认的 Android 字符串,因为它们已经被翻译了。
  • @Ibrahim 如果可能,我想使用默认的 Android 字符串,因为它们已经被翻译了。
  • @Ibrahim 对不起,但我不明白这有什么关系。您展示的方法将毫秒转换为分钟。我需要一个字符串来显示,例如一个文本视图。您是否测试了我问题中的代码?请参阅文档:developer.android.com/reference/android/text/format/…

标签: java android date android-date android-dateutils


【解决方案1】:

基于 cmets,您可以使用字符串资源。首先,创建一个复数资源,同时支持“In 1 minute”和“In 2 minutes”:

<plurals name="time_remaining_in_minutes">
        <item quantity="one">In %1$d minute</item>
        <item quantity="other">In %1$d minutes</item>
</plurals>

然后,在你的代码中调用它:

int minutes = 70;
long millis = minutes * 60 * 1000;
String text = getResources.getQuantityString(R.plurals.time_remaining_in_minutes, minutes, minutes);
myTextView.setText(text);

【讨论】:

  • 我知道这是可能的,但是当我回复您的评论时,我想使用默认的 Android 字符串。 (它们已经被翻译成多种语言)。
  • 对不起,我误解了你的回答。我以为您的意思是使用 Android 字符串插入的字符串资源。好吧,如果值得的话,您可以(手动)为其他语言创建 strings.xml 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
相关资源
最近更新 更多