2011-05-30 219 views
12

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

这里的问题在于,我需要将它显示为YouTube的视频评论时间戳。也就是说,要用最大的尺度来展示它。

例如,

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

那么,什么是处理的最佳方式这个? 我应该用case还是if声明来返回类似这样的语句?还是有更好的方法(也许是一个图书馆已经做了这样的事情)?

回答

35

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

例子:

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

这完美谢谢。 – DArkO 2011-05-30 19:13:18

+3

完美的答案,但返回类型是** CharSequence **,而不是** String **。因此,要么将**结果**类型更改为** CharSequence **,要么对其进行类型转换。 – Touhid 2014-10-03 08:37:36

+0

我如何获得两个时间戳之间的天数? – 2017-11-03 11:46:08

4
date1.getTime() - date2.getTime() 

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

+0

好吧,我知道该怎么做......这让我在毫秒级的时间,而不是在我想创建它的格式...我的问题是关于如何继续得到我的问题中描述的结果。什么是正确/最简单的方法来做到这一点... – DArkO 2011-05-30 15:01:49

2

看一看PrettyTime

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

-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 
} 
0

您的需要是非常具体的,我不知道这将解决这个问题为你出任何LIB盒子。 然而,问题并不十分复杂,一个充满“ifs”的小函数应该可以做到这一点。 当然,像Joda Time这样不错的日期库会帮助你保持代码清洁。谁想要使用GregorianCalendar!?