16

我需要计算两个日期之间经过的时间。

这里要注意的是,我需要像 YouTube 那样用它的视频评论时间戳来展示它。也就是说,仅通过最大的度量来显示它。

例如,

  • 如果时间是 50 秒前,它应该说 50 秒前。
  • 如果时间超过一分钟,它应该说一分钟前/十分钟前等等。
  • 如果时差为 1 小时 30 分钟,则应显示:一小时前。
  • 如果时间是一周半,则应该说是一周前。
  • 如果时间超过一个月,它应该说一个月前/两个月前等等......
  • 等等等等..

那么处理这个问题的最佳方法是什么?我应该用caseorif语句创建一个方法来返回这样的东西吗?还是有更好的方法(也许是一个已经做了类似事情的库)?

4

6 回答 6

42

使用DateUtils.getRelativeTimeSpanString(long time, long now, long minResolution)time是开始时间,now是结束时间(以毫秒为单位)。要报告“秒前”,请将 minResolution 设置为零。

例子:

String result = DateUtils.getRelativeTimeSpanString(1306767830, 1306767835, 0);
// result = "5 seconds ago"
于 2011-05-30T15:02:08.907 回答
5
 date1.getTime() - date2.getTime() 

这将返回两个日期之间的时间(以毫秒为单位)。只需将其转换为您想要显示的内容(例如小时分钟秒)

于 2011-05-30T14:59:18.443 回答
3

在 Android 上,使用这个:http: //developer.android.com/reference/android/text/format/DateUtils.html#getRelativeTimeSpanString%28android.content.Context,%20long,%20boolean%29

于 2011-05-30T15:02:52.467 回答
2

看看漂亮时间

此外,每次你想在 Java 中做一些与日期/时间相关的事情时,你应该看看Joda Time。现在就去做,你以后会感谢我的。

于 2011-05-30T15:01:06.810 回答
0

您的需求非常具体,而且我不知道有什么库可以开箱即用地为您解决问题。然而,这个问题并不是很复杂,一个充满“ifs”的小函数应该可以解决问题。当然,像 Joda Time 这样的好日期库将帮助您保持代码整洁。谁想使用公历!?

于 2011-05-30T15:05:29.220 回答
-1

看起来您有一组自定义规则,并且选择规则的算法基于两个时间戳之间的时间(以秒为单位)。最简单的方法是在一系列 if/else if 语句中处理规则:

 private String getTimeAsString(int seconds) {
   if (seconds < 60) {     // rule 1
      return String.format("%s seconds ago", seconds);
   } else if (seconds < 3600) {  // rule 2
      return String.format("%s minutes ago", seconds/60);
   } // ... and so on
 }
于 2011-05-30T15:03:26.513 回答