Different/Incorrect 结果出现在日历字段中

Different/Incorrect results in calendar field

我正在尝试添加活动,但显示的日期与我尝试添加的日期和我收到的日期不同。

eventButton.setOnClickListener(
        new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                Calendar calendarEvent = Calendar.getInstance();
                Intent calendarIntent = new Intent(Intent.ACTION_EDIT);
                calendarIntent.setType("vnd.android.cursor.item/event");

                Calendar time = Calendar.getInstance();
                time.clear();
                time.set(2018, 05, 23);

                calendarIntent.putExtra(CalendarContract.Events.TITLE, "Whatever");
                calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,time.getTimeInMillis());
                calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME,time.getTimeInMillis());
                calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY,true);
                calendarIntent.putExtra(CalendarContract.Events.RRULE, "FREQ=YEARLY");
                startActivity(calendarIntent);

            }
        }
);

我将在 6 月 22 日而不是 5 月 23 日收到: screenshot

JavaCalendar.set()方法计算月份就像编程中的数组一样,从0开始表示一月。因此,5 月的月份应为 4,因为 1 月为 0,2 月为 1,3 月为 2,依此类推。我认为这就是导致您出现问题的原因。

您也可以使用 Month 枚举。也就是说,而不是使用你的行

time.set(2018, 05, 23);

使用

time.set(2018, Calendar.May, 23);

希望对您有所帮助。

    long eventTimeInMillis = LocalDate.of(2018, Month.MAY, 23)
            .atStartOfDay(ZoneOffset.UTC)
            .toInstant()
            .toEpochMilli();

正如 Jamie Corkhill 在 中所说,您需要 UTC 中一天开始时 (00:00) 的时间。上面的代码不仅为您提供了 00:00 的 UTC 时间,而且非常清楚这就是它给您的时间。

我正在使用 java.time,现代 Java 日期和时间 API。我发现它比早已过时的 Calendar class.

更好用

问题:我可以在 Android 上使用 java.time 吗?

是的,java.time 在新旧 Android 设备上都能很好地工作。它只需要至少 Java 6.

  • 在 Java 8 和更高版本以及较新的 Android 设备上(据我所知,来自 API 级别 26)现代 API 是内置的。
  • 在 Java 6 和 7 中获取 ThreeTen Backport,新 classes 的 backport(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 使用 ThreeTen Backport 的 Android 版本。它叫做 ThreeTenABP。并确保使用子包从 org.threeten.bp 导入日期和时间 classes。

链接