41

我知道这不是“它应该工作的方式”,但仍然:如果你有两个 DateTime 对象,那么减去它们的好方法是什么?将它们转换为 Date 对象?

DateTime start = new DateTime();
System.out.println(start + " - doing some stuff");

// do stuff

DateTime end = new DateTime();
Period diff = // end - start ???
System.out.println(end + " - doing some stuff took diff seconds");
4

5 回答 5

56

Period 有一个构造函数,它接受两个ReadableInstant实例

Period diff = new Period(start, end);

ReadableInstant是由DateTime以及其他类实现的接口。)

于 2013-04-04T15:10:10.310 回答
22

从您的示例中,您似乎想要以秒为单位的差异,因此这应该会有所帮助

Seconds diff = Seconds.secondsBetween(start, end);
于 2013-04-04T16:37:41.583 回答
7

这有帮助吗?http://joda-time.sourceforge.net/key_period.html 它显示了以下示例

DateTime start = new DateTime(2004, 12, 25, 0, 0, 0, 0);
DateTime end = new DateTime(2006, 1, 1, 0, 0, 0, 0);

// period of 1 year and 7 days
Period period = new Period(start, end);

// calc will equal end
DateTime calc = start.plus(period);

// able to calculate whole days between two dates easily
Days days = Days.daysBetween(start, end);
于 2013-04-04T15:14:53.740 回答
3

取决于您想要获得的精度。您应该检查org.joda.time包并检查 Helper 类,例如Hours,Days等。

于 2013-04-04T15:13:11.417 回答
1

我认为您可以Period使用构造函数创建一个带有两个DateTime对象的构造函数。

于 2013-04-04T15:10:14.933 回答