将日历设置为特定日期?

use*_*019 9 java android calendar date

我想在特定日期设置带有通知的提醒。然后我目前正在将 AlarmManager 与 NotificationManager 一起使用。当我从 dateDialog 设置选定的日期时,提醒正在工作。如何将日历值放在固定时间的闹钟设置上?我从中获取当前日期和时间:

Calendar calendar =  Calendar.getInstance();
Run Code Online (Sandbox Code Playgroud)

然后我可以像下面一样手动设置日历并且它正在工作:

calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 13);
calendar.set(Calendar.HOUR, 7);
calendar.set(Calendar.AM_PM, Calendar.AM);
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DAY_OF_MONTH, 8);
calendar.set(Calendar.YEAR,2015);
long when = calendar.getTimeInMillis();
Run Code Online (Sandbox Code Playgroud)

但我的问题是如何将日历设置为明天和上午 9:00,或者如何将日历设置为当前日期之后的特定月份(或年份)?我的意思是这样的:

calendar.add(Calendar.DAY_OF_MONTH, 1);
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

tri*_*gel 5

对我来说,这在桌面上运行得很好,但无法在 Android 上测试它
更新:刚刚使用 AIDE 在我的 Android 手机上进行了测试,得到了完全相同的结果。

import java.util.Calendar;

public class CalendarTest {

    public static void main(String[] args) {

        Calendar calendar = Calendar.getInstance();

        System.out.println(calendar.getTimeInMillis() + " -> " + calendar.getTime());

        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 13);
        calendar.set(Calendar.HOUR, 7);
        calendar.set(Calendar.AM_PM, Calendar.AM);
        calendar.set(Calendar.MONTH, Calendar.JANUARY);
        calendar.set(Calendar.DAY_OF_MONTH, 9);
        calendar.set(Calendar.YEAR, 2015);

        System.out.println(calendar.getTimeInMillis() + " -> " + calendar.getTime());

        calendar.add(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.YEAR, 1);

        System.out.println(calendar.getTimeInMillis() + " -> " + calendar.getTime());
    }
Run Code Online (Sandbox Code Playgroud)

对于此测试,我的输出正是您所期望的:

1420705649927 -> Thu Jan 08 09:27:29 CET 2015
1420783980927 -> Fri Jan 09 07:13:00 CET 2015
1452406380927 -> Sun Jan 10 07:13:00 CET 2016
Run Code Online (Sandbox Code Playgroud)


Bas*_*que 2

乔达时间

更新: Joda -Time项目现在处于维护模式,团队建议迁移到java.time类。请参阅Oracle 的教程

尝试使用更好的日期时间库,例如 Joda-Time。

在 Joda-Time 中,您可以更改日期,同时保留一天中的时间。或者,反之亦然,在保留日期的同时保留一天中的时间。

DateTime now = DateTime.now( DateTimeZone.forID( "America/Montreal" ) ) ;
DateTime todayNoon = now.withTime( 12, 0, 0, 0 ) ;
DateTime midMarchSameYearSameTimeAsNow = now.withDate(  now.getYear(), DateTimeConstants.MARCH, 15 );
DateTime tomorrowSameTime = now.plusDays( 1 );
Run Code Online (Sandbox Code Playgroud)