多语言展示
当前在线:1090今日阅读:167今日分享:16

在Joda time中,持续时间和期间之间有什么区别?

在Joda时间中,持续时间和期间之间有什么区别?
工具/原料
1

joda-time

2

IntelliJ IDEA

方法/步骤
1

时间量的表示不是Java的Date和Calendar类的一部分,正是在Joda-Time中使用这些特性的简单性使这个库如此受欢迎。

2

DateTime实例表示一个瞬间;也就是说,精确到毫秒的时间度量。Joda Time还为处理两个瞬间之间的时间量提供了api。

3

持续时间是以毫秒为单位的时间量。如果将持续时间添加到DateTime,将得到一个新的DateTime实例。

4

下图显示了这是如何工作的。

5

Duration实例计算为两个DateTime实例之间的差值;这里是2010年1月1日午夜和2010年2月1日午夜。在内部,这表示为毫秒数,在本例中,它将等于31天内的毫秒数。

6

然后,将这个持续时间添加到另一个DateTime(表示2010年9月1日午夜),并返回一个新的DateTime。因为9月有30天,所以返回的DateTime表示2010年10月2日。

7

由于日历的不规则性——月长甚至年长不同——您可能仍然希望执行诸如“月的同一天、两个月的时间”或“明年的同一日期”之类的操作。“你不能简单地在两个月里增加60天左右,然后在明年得到相同的日期。您需要检查现在和那时之间是否有一个2月29日,如果有,请添加一个。

8

Period类为您消除了所有这些麻烦。周期是时间的数量;它相对于开始日期,并且只能在知道开始日期之后才能解析。

9

下图显示了这是如何工作的。

10

上面的示例中的时间段计算为2011年2月1日到2011年3月1日之间的时间间隔。然后,这段时间被应用到2012年2月1日,给出了2012年3月1日的新日期时间。Period检查两个DateTime实例之间每个字段的差异,即月、日、小时等方面的差异。虽然前两个日期之间的天数是28天,但它被表示为“一个月”。当这段时间用于闰年时,这额外的一天仍然是“一个月”的一部分,所以2012年3月1日又回来了。如果这个间隔是持续时间而不是周期,那么返回的DateTime实例应该是2月。

推荐信息