我们是否在Java中使用TimeSpan类

时间:2011-07-05 11:02:35

标签: java timespan java.util.date

我只是想知道java.util中是否需要TimeSpan,以便我可以定义这两次之间的小时数,分钟数和秒数。

从这个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 );

我不确定这是否已经在Java中实现,但我还没有发现。

4 个答案:

答案 0 :(得分:29)

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

DurationPeriod

来自JodaTime的

Interval会做..

  

时间间隔代表一段时间   两个时间之间的时间。间隔   包括起始瞬间和   不包括结束。结束时刻   总是大于或等于   立即开始。

     

间隔有一个固定的毫秒   持续时间。这是不同的   在开始和结束时刻之间。   持续时间单独表示   通过ReadableDuration。结果是,   间隔不具有可比性。至   比较两个区间的长度,   你应该比较他们的持续时间。

     

间隔也可以转换为   ReadablePeriod。这代表了   开始和结束之间的差异   在诸如的领域方面的要点   年和日。

     

Interval是线程安全且不可变的。

答案 1 :(得分:25)

在Java 8中,标准API中添加了一个适当的时间库(这主要基于JodaTime)。

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

  1. Duration表示时间跨度的秒或纳秒长度。
  2. Period表示更加用户友好的差异,存储为“x年和y个月等”。
  3. 可以在Java tutorial

    中找到它们之间差异的详细说明

答案 2 :(得分:3)

如果您使用的是Java 8(或更高版本),或者根本不想将JodaTime(JodaTime自己的作者suggest migrating导入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)

答案 3 :(得分:2)

如果您正在寻找替代的较轻版本,请查看我在我自己的Android应用中使用的这个库。 https://github.com/ashokgelal/samaya

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