java计算两个时间戳之间的时间

时间:2011-05-30 14:56:31

标签: java android time timestamp date-arithmetic

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

这里的问题是,我需要将其显示为YouTube的视频评论时间戳。也就是说,仅通过最大的衡量标准来显示它。

例如,

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

那么处理这个问题的最佳方法是什么? 我应该使用caseif语句创建一个返回类似内容的方法吗?或者是否有更好的方法(也许是一个已经做过类似工作的库)?

6 个答案:

答案 0 :(得分:40)

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

示例:

String result = DateUtils.getRelativeTimeSpanString(1306767830, 1306767835, 0);
// result = "5 seconds ago"

答案 1 :(得分:4)

 date1.getTime() - date2.getTime() 

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

答案 2 :(得分:3)

答案 3 :(得分:2)

看看PrettyTime

此外,每当您想要在Java中执行与日期/时间相关的操作时,您应该查看Joda Time。现在就做,你以后会感谢我。

答案 4 :(得分:0)

您的需求非常具体,我不知道任何可以解决问题的库。 然而问题并不是很复杂,一个充满“ifs”的小功能应该可以解决问题。 当然,像Joda Time这样的好日期库可以帮助您保持代码清洁。谁想使用GregorianCalendar!?

答案 5 :(得分:-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
 }