繁体   English   中英

当我修改 CalendarView 的选定日期时,我得到了一个负月和 31 天以上的月

[英]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 和 ThreeTenABP

考虑使用 java.time,即现代 Java 日期和时间 API 来进行日期工作。 尤其是当您需要计算日期时。 坦率地说,我发现它比旧的和过时的Calendar class 更适合,更不用说DateSimpleDateFormat了。

    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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM