Android 如何以正确的方式将日期添加到日历中

Android 如何以正确的方式将日期添加到日历中,android,datetime,kotlin,calendar,java.util.calendar,Android,Datetime,Kotlin,Calendar,Java.util.calendar,我有一个ArrayList,它包含日期-[1,52020]//天|月|年 我以以下方式将此添加到日历中: calendar.add(Calendar.DAY_OF_MONTH, dateList[0]) calendar.add(Calendar.MONTH, dateList[1]) calendar.add(Calendar.YEAR, dateList[2]) 但当我尝试将此分配给我的日期选择器时,我得到了以下日期: datePicker.maxDate = calendar date

我有一个ArrayList,它包含日期-[1,52020]//天|月|年

我以以下方式将此添加到日历中:

calendar.add(Calendar.DAY_OF_MONTH, dateList[0])
calendar.add(Calendar.MONTH, dateList[1])
calendar.add(Calendar.YEAR, dateList[2])
但当我尝试将此分配给我的日期选择器时,我得到了以下日期:

datePicker.maxDate = calendar
date picker Log: 16/10/4040
我的代码可能有什么问题?

这是因为您将这些值添加到实例化代码的初始日期。相反,您应该使用set

这是因为您将这些值添加到实例化的初始日期。相反,您应该使用set

Calendar.add函数可根据您当前使用的日期进行添加 日历。设置它将设置日期

Calendar.add函数可根据您当前使用的日期进行添加 日历。设置它将设置日期


现代答案。自2014年起在Java中有效,我认为它在几年后出现在Android上

java.time和ThreeTenABP 我喜欢Java,因为这是我能写的

    ArrayList<Integer> dateList = new ArrayList<>(Arrays.asList(1, 5, 2020));

    LocalDate date = LocalDate
            .of(dateList.get(2), dateList.get(1), dateList.get(0));

    System.out.println("Date: " + date);
2020年5月1日星期五00:00:00 CEST

问:java.time不需要Android API级别26吗? time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6

在Java8和更高版本以及API级别为26的较新Android设备上,内置了现代API。只有在这种情况下,不使用DateTimeUtils进行转换,使用稍微简单的GregoriaCalendar.FromStarToDay。 在非Android Java 6和7中,获得了Three Ten Backport,即JSR 310的现代类Three Ten的Backport;请参阅底部的链接。 在较旧的Android上,使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类。 链接 解释如何使用java.time。 ,其中首次描述了java.time。 ,java.time的后端口到JSR-310的Java6和Java7。 ,Android版Three Ten Backport ,解释得非常透彻。
现代答案。自2014年起在Java中有效,我认为它在几年后出现在Android上

java.time和ThreeTenABP 我喜欢Java,因为这是我能写的

    ArrayList<Integer> dateList = new ArrayList<>(Arrays.asList(1, 5, 2020));

    LocalDate date = LocalDate
            .of(dateList.get(2), dateList.get(1), dateList.get(0));

    System.out.println("Date: " + date);
2020年5月1日星期五00:00:00 CEST

问:java.time不需要Android API级别26吗? time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6

在Java8和更高版本以及API级别为26的较新Android设备上,内置了现代API。只有在这种情况下,不使用DateTimeUtils进行转换,使用稍微简单的GregoriaCalendar.FromStarToDay。 在非Android Java 6和7中,获得了Three Ten Backport,即JSR 310的现代类Three Ten的Backport;请参阅底部的链接。 在较旧的Android上,使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类。 链接 解释如何使用java.time。 ,其中首次描述了java.time。 ,java.time的后端口到JSR-310的Java6和Java7。 ,Android版Three Ten Backport ,解释得非常透彻。
Kotlin+过时且麻烦的datetime API=没有好主意。。。为此使用java.time.Kotlin+过时且麻烦的datetime API=没什么好主意。。。为此使用java.time。
    ZonedDateTime startOfDay = date.atStartOfDay(ZoneId.systemDefault());
    Calendar oldfashionedCalendar = DateTimeUtils.toGregorianCalendar(startOfDay);

    System.out.println(oldfashionedCalendar.getTime());