当前位置: 首页 > 面试题库 >

Java如何使用Joda-Time计算从现在开始经过的时间?

冯驰
2023-03-14
问题内容

我需要计算从一个特定日期到现在的时间,并以与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 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

你会发现我也考虑了几个月和几年,并将其配置为在零值时忽略这些值。



 类似资料:
  • 问题内容: 我有准备好的陈述 其中时间是类型的时间戳在的PostgreSQL数据库。 我要插入一个Joda-Time DateTime对象,或者应该说我正在尝试。我找不到将DateTime对象转换为java.sql.Timestamp的方法。我已经阅读了Joda- Time文档,看不到对此的任何引用。 谢谢。 问题答案: 您可以先将Joda DateTime转换为长(自纪元以来的毫秒),然后从中创

  • 我使用下面的代码计算两个日期之间的年、月和天的数目,使用 以上代码的预期输出是(使用此站点并使用google play store中的一个应用程序进行勾选) null 如果需要更多的信息请告诉我。提前道谢。你的努力将会受到赞赏。

  • 问题内容: 在Ruby on Rails中,有一项功能允许你获取任何Date并打印出它的“很久以前”。 例如: 有没有简单的方法可以在Java中做到这一点? 问题答案: 看一下PrettyTime库。 使用起来非常简单: 你还可以传递国际化消息的语言环境: 如评论中所述,Android在类中内置了此功能。

  • 问题内容: 使用Java访问系统时钟的简便方法是什么,以便我可以计算事件的经过时间? 问题答案: 我会避免使用它来测量经过时间。返回“壁钟”时间,该时间可能会更改(例如:夏时制,管理员用户更改时钟)并会使您的间隔测量值偏斜。 另一方面,返回自“某个参考点”(例如,JVM启动)以来的纳秒数,因此不会受到系统时钟变化的影响。

  • 问题内容: 您如何使用Joda-Time根据给定的语言环境确定星期几被认为是“开始” ? 要点:大多数国家/地区将星期一作为国际标准(!)。其他人则使用星期日(特别是美国)。其他人显然是星期六。显然是星期三吗? 维基百科“七天工作周” #Week_number 问题答案: Joda-Time在周一至周日使用ISO标准。 它没有能力获得星期几的第一天,也没有基于标准星期一以外的任何一天返回星期几索引

  • 问题内容: 此代码段始终将日期解析为当前时区,而不是解析为字符串中的时区。 它输出: 而我期望: 有什么想法我做错了吗? 问题答案: 好吧,进一步Google搜索给了我自己的问题的答案:use ,如下所示: 这有效。