[英]When i modified the selected date of the CalendarView I got a negative month and 31+ days in month
我尝试获取用户选择的自定义日期的前一个日期,但我找不到这样做的方法,这是代码
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)
考虑使用 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);
Output:
2020-01-06
我相信您的 Android 日期选择器从一月的 0 到十二月的 11 月份编号,因此我们需要添加 1 以转换为人类和LocalDate
编号月份的自然方式。 当我们从 3 月 30 日开始时,我们减去 3 个月得到 12 月 30 日,然后加上 7 天得到 1 月 6 日。 我们也可能以相反的顺序完成了数学运算:
LocalDate finalDate = selectedDate.plusDays(7).minusMonths(3);
在这种情况下,它给出了相同的结果,但由于月份的长度不相等,因此并不总是如此。
不是因为您将天数加 7 并从月数中减去 3 吗? 尝试删除它,它应该会更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.