从现在开始,如何计算Joda的流逝时间

我需要计算从一个特定日期到现在的时间,并以与StackOverflow问题相同的格式显示它,即:

15s ago
2min ago
2hours ago
2days ago
25th Dec 08

你知道如何用Java Joda-Time库实现它吗? 有没有已经实现它的辅助方法,还是我应该自己编写算法?


要使用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 agon")
    .appendMinutes().appendSuffix(" minutes agon")
    .appendHours().appendSuffix(" hours agon")
    .appendDays().appendSuffix(" days agon")
    .appendWeeks().appendSuffix(" weeks agon")
    .appendMonths().appendSuffix(" months agon")
    .appendYears().appendSuffix(" years agon")
    .printZeroNever()
    .toFormatter();

String elapsed = formatter.print(period);
System.out.println(elapsed);

现在打印

3 seconds ago
51 minutes ago
7 hours ago
6 days ago
10 months ago
31 years ago

(咳嗽,老,咳嗽)你看我已经考虑了几个月和几年,并配置它,当它们为零时忽略这些值。


使用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"

小心:我尝试过使用库的更精确的功能,但它会产生一些奇怪的结果,请小心使用它。

J.P


您可以使用PeriodFormatter来做到这一点,但您不必像在其他答案中那样努力制作您自己的PeriodFormatBuilder。 如果它适合你的情况,你可以使用默认的格式化程序:

Period period = new Period(startDate, endDate);
System.out.println(PeriodFormat.getDefault().print(period))

(在类似的问题上给出这个答案的帽子提示,我为可发现性交叉发布)

链接地址: http://www.djcxy.com/p/18595.html

上一篇: How to calculate elapsed time from now with Joda

下一篇: How do you subtract Dates in Java?