3

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
4

4 に答える 4

2

理由

joda -time のドキュメントによると、

2007-03-31 に 1 か月を加えた結果が 2007-04-31 になることはありません。そのため、月の日は 2007-04-30 に調整されます。

ただし、StubbyDB は、日付 2007-04-31 を 2007-05-01 に調整する JavaScript ベースの日付計算を使用します。

これはバグではありませんが、これがこれらの API の仕組みです。

解決

サンプル アプリケーションで見つかりました

{{TODAY+6m}} の代わりに {{JODA_TODAY+6m}} を使用

于 2016-09-08T13:29:23.540 に答える
1

2016 年 9 月 30 日から始めて 5 か月追加すると、2017 年 2 月 30 日になります。

しかし、2月は28日しかありません。

Jodatime は月の最大有効日 (つまり 2 月 28 日) を「切り捨て」ているようですが、他のライブラリ/コードは「2 月 30 日」を 3 月 2 日として扱っています (技術的には 28 日から 2 日過ぎているため、 30日もそうです)。

どちらも私見の日付を処理するための有効な仮定であり、日付の処理が難しい理由についての良い教訓です。従うべき規則について明示する必要があり、Jodatime の規則に従うようにアサーションをコーディングする必要がある場合があります。

于 2016-09-08T06:33:35.577 に答える