当我修改 CalendarView 的选定日期时,我得到了一个负数月份和 31 天以上的月份
When i modified the selected date of the CalendarView I got a negative month and 31+ days in month
我尝试获取用户 select 编辑的自定义日期的前一个日期,但我找不到方法来做到这一点
这是代码
calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange( @NonNull CalendarView view, int year, int month, int dayOfMonth ) {
finalDate = (dayOfMonth + 7) + "/" + (month - 3) + "/" + year;
try {
Date date = new SimpleDateFormat("dd/MM/yyyy").parse(finalDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
});
所以如果我 select 30/2/2020 结果是:(37/-1/2020)
这不是因为您要将天数加 7 并从月数中减去 3 吗?尝试删除它,它应该会更好。
java.time 和 ThreeTenABP
考虑使用 java.time,现代 Java 日期和时间 API,作为你的约会工作。尤其是当你需要计算日期时。坦率地说,我发现它比旧的和过时的 Calendar
class 更适合,更不用说 Date
和 SimpleDateFormat
.
int year = 2020;
int month = Calendar.MARCH; // For demonstration only, don’t use Calendar in your code
int dayOfMonth = 30;
LocalDate selectedDate = LocalDate.of(year, month + 1, dayOfMonth);
LocalDate finalDate = selectedDate.minusMonths(3).plusDays(7);
System.out.println(finalDate);
输出:
2020-01-06
我相信您的 Android 日期选择器从 1 月的 0 到 12 月的 11 数字月份,因此我们需要加 1 以转换为人类和 LocalDate
数字月份的自然方式。当我们从 3 月 30 日开始时,我们减去 3 个月得到 12 月 30 日,然后加上 7 天得到 1 月 6 日。我们也可能以相反的顺序进行数学运算:
LocalDate finalDate = selectedDate.plusDays(7).minusMonths(3);
在这种情况下,它给出了相同的结果,但由于月份的长度不等,所以不会总是这样。
我尝试获取用户 select 编辑的自定义日期的前一个日期,但我找不到方法来做到这一点 这是代码
calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange( @NonNull CalendarView view, int year, int month, int dayOfMonth ) {
finalDate = (dayOfMonth + 7) + "/" + (month - 3) + "/" + year;
try {
Date date = new SimpleDateFormat("dd/MM/yyyy").parse(finalDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
});
所以如果我 select 30/2/2020 结果是:(37/-1/2020)
这不是因为您要将天数加 7 并从月数中减去 3 吗?尝试删除它,它应该会更好。
java.time 和 ThreeTenABP
考虑使用 java.time,现代 Java 日期和时间 API,作为你的约会工作。尤其是当你需要计算日期时。坦率地说,我发现它比旧的和过时的 Calendar
class 更适合,更不用说 Date
和 SimpleDateFormat
.
int year = 2020;
int month = Calendar.MARCH; // For demonstration only, don’t use Calendar in your code
int dayOfMonth = 30;
LocalDate selectedDate = LocalDate.of(year, month + 1, dayOfMonth);
LocalDate finalDate = selectedDate.minusMonths(3).plusDays(7);
System.out.println(finalDate);
输出:
2020-01-06
我相信您的 Android 日期选择器从 1 月的 0 到 12 月的 11 数字月份,因此我们需要加 1 以转换为人类和 LocalDate
数字月份的自然方式。当我们从 3 月 30 日开始时,我们减去 3 个月得到 12 月 30 日,然后加上 7 天得到 1 月 6 日。我们也可能以相反的顺序进行数学运算:
LocalDate finalDate = selectedDate.plusDays(7).minusMonths(3);
在这种情况下,它给出了相同的结果,但由于月份的长度不等,所以不会总是这样。