如何使用Joda-Time计算从现在开始的经过时间?
我需要计算从一个特定日期到现在经过的时间,并以与StackOverflow问题相同的格式显示它,即:
15s ago
2min ago
2hours ago
2days ago
25th Dec 08
你知道如何使用Java Joda-Time库来实现它吗?有没有一个已经实现它的帮助器方法,或者我应该自己编写算法?
我需要计算从一个特定日期到现在经过的时间,并以与StackOverflow问题相同的格式显示它,即:
15s ago
2min ago
2hours ago
2days ago
25th Dec 08
你知道如何使用Java Joda-Time库来实现它吗?有没有一个已经实现它的帮助器方法,或者我应该自己编写算法?
要使用 JodaTime 计算经过的时间,请使用 Period
。要以所需的人工表示形式格式化经过的时间,请使用可以通过 PeriodFormatterBuilder
构建的 PeriodFormatter
。
下面是一个启动示例:
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 seconds ago 51 minutes ago 7 hours ago 6 days ago 10 months ago 31 years ago
(咳嗽,老,咳嗽)您会看到我也考虑了数月和数年,并将其配置为在值为零时省略这些值。
我尝试了HumanTime,因为@sfussenegger回答并使用JodaTime的周期
,但我发现的人类可读时间的最简单,最干净的方法就是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"
谨慎:我尝试过使用库更精确的功能,但它会产生一些奇怪的结果,因此请谨慎使用它,并在不危及生命的项目中使用它。
太平绅士