如何用Joda-Time计算从现在开始的经过时间?我需要计算从特定日期到现在所用的时间,并以与StackOverflow问题相同的格式显示它,即:15s ago2min ago2hours ago2days ago25th Dec 08您知道如何使用Java Joda-Time库实现它吗?是否有一个已经实现它的辅助方法,或者我应该自己编写算法?
3 回答
慕侠2389804
TA贡献1719条经验 获得超6个赞
要使用JodaTime计算经过的时间,请使用Period
。要格式化所需人类表示中的已用时间,请使用PeriodFormatter
您可以构建的表达式PeriodFormatterBuilder
。
这是一个启动示例:
DateTime myBirthDate = new DateTime(1978, 3, 26, 12, 35, 0, 0);DateTime now = new DateTime();Period period = new Period(myBirthDate, now);PeriodFormatter formatter = new PeriodFormatterBuilder() .appendSeconds().appendSuffix(" seconds ago\n") .appendMinutes().appendSuffix(" minutes ago\n") .appendHours().appendSuffix(" hours ago\n") .appendDays().appendSuffix(" days ago\n") .appendWeeks().appendSuffix(" weeks ago\n") .appendMonths().appendSuffix(" months ago\n") .appendYears().appendSuffix(" years ago\n") .printZeroNever() .toFormatter();String elapsed = formatter.print(period);System.out.println(elapsed);
这打印到现在
3秒前51分钟前7小时前6天前10个月前31年前
(咳嗽,老了,咳嗽)你看我已经考虑了数月和数年,并将其配置为在零值时省略值。
幕布斯6054654
TA贡献1876条经验 获得超7个赞
使用PrettyTime进行简单的经过时间。
我尝试了HumanTime,因为@sfussenegger回答并使用了JodaTime,Period
但是我发现人类可读时间最简单,最干净的方法是PrettyTime库。
这里有一些带输入和输出的简单示例:
五分钟前
DateTime fiveMinutesAgo = DateTime.now().minusMinutes( 5 );new PrettyTime().format( fiveMinutesAgo.toDate() );// Outputs: "5 minutes ago"
不久前
DateTime birthday = new DateTime(1978, 3, 26, 12, 35, 0, 0);new PrettyTime().format( birthday.toDate() );// Outputs: "4 decades ago"
小心:我已经尝试过使用图书馆更精确的功能,但它会产生一些奇怪的结果,所以要小心使用它,并在非危及生命的项目中使用它。
DIEA
TA贡献1820条经验 获得超2个赞
您可以使用PeriodFormatter执行此操作,但您不必像在其他答案中那样努力创建自己的PeriodFormatBuilder 。如果它适合您的情况,您可以使用默认格式化程序:
Period period = new Period(startDate, endDate);System.out.println(PeriodFormat.getDefault().print(period))
(就类似的问题给出了这个答案的提示,我为了发现而交叉发布)
添加回答
举报
0/150
提交
取消