我只是想知道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中实现,但我还没有发现。
答案 0 :(得分:29)
使用SDK中的JDK 8日期时间库已经过丰富,您可以使用
来自JodaTime的 Interval
会做..
时间间隔代表一段时间 两个时间之间的时间。间隔 包括起始瞬间和 不包括结束。结束时刻 总是大于或等于 立即开始。
间隔有一个固定的毫秒 持续时间。这是不同的 在开始和结束时刻之间。 持续时间单独表示 通过ReadableDuration。结果是, 间隔不具有可比性。至 比较两个区间的长度, 你应该比较他们的持续时间。
间隔也可以转换为 ReadablePeriod。这代表了 开始和结束之间的差异 在诸如的领域方面的要点 年和日。
Interval是线程安全且不可变的。
答案 1 :(得分:25)
在Java 8中,标准API中添加了一个适当的时间库(这主要基于JodaTime)。
在其中有两个类可用于表示句点:
答案 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类非常相似。此外,还有一些单元测试包含许多如何使用它的示例。