我正在StubbyDB写我的存根。并在功能测试中断言数据。这是我在功能测试中所做的事情,用于计算断言的日期(使用joda datetime库)
DateTime now = DateTime.now();
DateTime future = now.plusMonths(6);
这是我在存根中做的事情;
{{TODAY+6m}}
但是我得到了几天的差异。这是错误还是我做错了什么?
今天考虑是" 2016年9月30日",然后我再添加5个月
now.plusMonths(5) => 2017-02-28
{{TODAY+5m}} => 2017-03-02
答案 0 :(得分:2)
<强>原因强>
根据joda-time文档,
2007-03-31加上一个月不能导致2007-04-31,所以当天 月份调整为2007-04-30。
然而,StubbyDB使用基于javascript的日期计算,将日期调整为2007-04-31至2007-05-01。
所以这不是错误,但这就是这些API的工作原理。
<强>解决方案强>
中找到使用{{JODA_TODAY + 6m}}代替{{TODAY + 6m}}
答案 1 :(得分:1)
如果你从2016年9月30日开始,再加上五个月就会得到30/02/2017。
但二月只有28天。
看起来Jodatime已经&#34;四舍五入&#34;给你这个月的最长有效日期(即2月28日),而另一个图书馆/代码正在处理&#34; 2月30日&#34;截至3月2日(从技术上讲,这是28日过去的两天,也就是30日也是如此)。
两者都是处理日期恕我直言的有效假设,并且是一个很好的教训,为什么日期处理很难。您需要明确指出要遵循的约定,并且您可能必须编写断言以遵循Jodatime的惯例。
答案 2 :(得分:1)
返回此日期时间的副本加上指定的月数。
计算将尽力只更改月份字段 保留当月的同一天。但是,在某些情况下,它 可能有必要改变较小的领域。例如,2007-03-31加 一个月不能导致2007-04-31,所以每月调整一天 到2007-04-30。
所以, 2016年9月30日 + 5个月= 2017年2月28日(根据Joda的逻辑)并且它不是错误
答案 3 :(得分:-1)
以下是将月份添加到指定日历日期的示例代码
public class Demo {
// create a calendar
Calendar cal = Calendar.getInstance()
// print current date
System.out.println("The current date is : " + cal.getTime());
// add 1 months from the calendar
cal.add(Calendar.MONTH, 1);
}