55

我只是想知道是否需要 TimeSpanjava.util以便我可以定义这两次之间有多少小时、分钟和秒。

由此TimeSpan我们可以得到两次之间的时间间隔。像

TimeSpan getTimeSpan( Date before, Date after ){...}

或者

long timeSpan = System.currentTimeMillis();
// ... long job
timeSpan = System.currentTimeMillis() - timeSpan;

TimeSpan ts = new TimeSpan(timeSpan);

有了这个TimeSpan,我们可以在SimpleDateFormat.

SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
format.format( timsSpan );

我不确定这是否已经在 J​​ava 中实现但我还没有发现。

4

4 回答 4

37

SDK 中的 JDK 8 日期时间库已经丰富,您可以使用

Duration或者Period

Interval来自 JodaTime 会做..

时间间隔表示两个瞬间之间的时间段。间隔包括开始时刻,不包括结束时刻。结束时刻总是大于或等于开始时刻。

间隔具有固定的毫秒持续时间。这是开始时刻和结束时刻之间的差异。持续时间由 ReadableDuration 单独表示。因此,间隔是不可比的。要比较两个间隔的长度,您应该比较它们的持续时间。

间隔也可以转换为 ReadablePeriod。这表示在诸如年和日等字段方面的起点和终点之间的差异。

间隔是线程安全且不可变的。

于 2011-07-05T11:04:04.323 回答
30

在 Java 8 中,标准 API 中添加了一个适当的时间库(这在很大程度上基于 JodaTime)。

其中有两个类可用于指示句点:

  1. Duration它表示时间跨度的秒或纳秒长度。
  2. Period这表示对用户更友好的差异,存储为“x 年和 y 月等”。

它们之间的区别的详细解释可以在Java教程中找到

于 2015-06-22T11:23:38.423 回答
3

如果您使用的是 Java 8(或更高版本)或者只是不想导入 JodaTime(JodaTime 的作者本人建议迁移到 java.time):Java 8 通过Periods提供该功能,请参阅此处获取教程:https ://docs.oracle.com/javase/tutorial/datetime/iso/period.html

让我在这里引用 Oracle 教程:

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);

Period p = Period.between(birthday, today);
long p2 = ChronoUnit.DAYS.between(birthday, today);
System.out.println("You are " + p.getYears() + " years, " + p.getMonths() +
                   " months, and " + p.getDays() +
                   " days old. (" + p2 + " days total)");

该代码产生类似于以下内容的输出:

You are 53 years, 4 months, and 29 days old. (19508 days total)
于 2015-04-26T16:08:59.477 回答
0

如果您正在寻找替代的更轻版本,请查看我编写的用于我自己的 Android 应用程序的这个库。https://github.com/ashokgelal/samaya

抱歉,我没有关于它的使用的任何文档,但它与对应的 .net Timespan 类非常相似。此外,还有一些单元测试包含许多关于如何使用它的示例。

于 2011-08-10T21:15:33.450 回答