在Joda time中,持续时间和期间之间有什么区别?
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月。