0

我有一个日期选择器,用户可以在其中选择一个日期,然后选择一个复选框,说明他想要从中获取日期的时间类型。例如:

用户选择 11 月的 1. 并选中“月份”复选框,在这种情况下,结束日期将增加 1,即使这听起来很简单,但它慢慢开始让我很恼火!

问题是Java没有一个很好的日期对象来处理这种事情,所以我认为我会使用日历,但增加日历日期并不容易,例如以下示例:

endDate.set(startDate.YEAR, startDate.MONTH+1, startDate.DATE);

从理论上讲,这将使月份比开始日期大一。这适用于从 12 月开始的大约 90% 的月份,如果您在 12 月将月份增加 1,那么整数月份返回 13 会发生同样的事情,startDate.DATE;并且startDate.Year;

我的问题是没有更简单的方法可以做到这一点吗?我可以写很多 If 句子,但我真的认为这有点多余。

4

3 回答 3

2

的使用add方法java.util.Calendar

endDate.set(startDate.YEAR, startDate.MONTH, startDate.DATE);
if(some_condition) {
   endDate.add(Calendar.MONTH, 1);
}
于 2012-11-23T12:35:56.800 回答
1

这里的标准建议是查看Joda-Time(有关更多信息,请参见此处)。这是一个更加一致/功能更强大的 API,没有困扰标准 Java 日期/格式 API 的线程问题,因此被广泛使用和接受。

就你想要的上面而言,我建议如下:

LocalDate d = ...
LocalDate nd = d.plusMonths(1);

以上将正确处理月/年翻转。

于 2012-11-23T12:34:24.763 回答
1

您可以使用Calendar.add()将值添加到日历值,例如,Calendar.add(Calendar.MONTH, 1)这会增加一个月,并考虑到 1 月在 12 月之后。

于 2012-11-23T12:35:44.943 回答