Joda Time .isAfter() 产生不正确的结果

Joda Time .isAfter() producing incorrect result

我从 Joda Time 得到了一些奇怪的结果,我不确定是什么原因造成的。

我正在比较两个日期时间(闹钟结束时间和停止时间),以确保用户不会将闹钟设置为在开始之前结束。

我使用了 is.isAfter() 但它似乎给了我一个错误的结果。

这是 if 语句:

if (MainActivity.alarmStartDateTime.isAfter(MainActivity.alarmEndDateTime)) {
                nextReminderTextView1.setText("WARNING THE ALARM END DATE & TIME IS BEFORE THE ALARM DATE & TIME");
                alarmSetToEndBeforeItStarts = true;

            }

这是开始和结束日期时间:

MainActivity.alarmStartDateTime = 2016-11-21T00:26:45.183+10:00
MainActivity.alarmEndDateTime = 2016-11-21T00:30:00.000+10:00

结果是这样的:

alarmSetToEndBeforeItStarts = true

在此先感谢您的帮助

我无法重现你的问题:

DateTime alarmStart = DateTime.parse("2016-11-21T00:26:45.183+10:00");
DateTime alarmEnd = DateTime.parse("2016-11-21T00:30:00.000+10:00");
System.out.println(alarmStart.isAfter(alarmEnd));

具有以下输出:

false

如果您认为 isAfter() 中存在错误,则需要 post 最低限度的测试来重现问题。这是极不可能,因为 Joda 是一个具有高度测试覆盖率的纯正库,在世界各地的许多项目中使用。

我建议改为:也许 alarmSetToEndBeforeItStarts 是一个 class 字段,并且已由先前调用您引用的 if 语句设置。如果您不注意 Android.

中的生命周期,这很容易发生