Java 如何在Alarmmanger上设置日期?
我试过这个代码在三月一号报警。 但它不起作用。 我怎样才能解决这个问题 应用程序内容Java 如何在Alarmmanger上设置日期?,java,android,date,calendar,alarmmanager,Java,Android,Date,Calendar,Alarmmanager,我试过这个代码在三月一号报警。 但它不起作用。 我怎样才能解决这个问题 应用程序内容 当我们按下按钮(单击1)时,如果是在三月一日,Alarmmanger会调用intent。 所以这个应用程序打印新的活动 错误 当我们按下按钮(单击1)时,AlarmManager随时调用intent 我怎样才能解决它 -对不起,我的英语不好。。ㅠㅠ public class MainActivity extends Activity { private AlarmManager alarm; pri
当我们按下按钮(单击1)时,如果是在三月一日,Alarmmanger会调用intent。 所以这个应用程序打印新的活动
错误
当我们按下按钮(单击1)时,AlarmManager随时调用intent
我怎样才能解决它 -对不起,我的英语不好。。ㅠㅠ
public class MainActivity extends Activity {
private AlarmManager alarm;
private NotificationManager notification;
Calendar calendar = Calendar.getInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);}
public void click1(View v) {
notification = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Calendar cal = new GregorianCalendar();
cal.setTimeInMillis(System.currentTimeMillis());
calendar.clear();
calendar.set(cal.YEAR,3,1);
setAlarm();
}
private void setAlarm(){
alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent());
}
private PendingIntent pendingIntent() {
// TODO Auto-generated method stub
Intent i = new Intent(getApplicationContext(), MainActivity.class);
PendingIntent p = PendingIntent.getActivity(this, 0, i, 0);
return p;
}
您无需创建另一个日历即可获得实际年份。
当您请求一个新的日历实例时,它将用实际的日期和时间初始化 试试这个:
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
calendar.set(year,Calendar.MARCH,1);
还有一件事,如果您将闹钟设置为过去时间,闹钟总是会响。tl;博士
避免旧的日期时间类
您正在使用旧的遗留日期时间类。现在被java.time类取代
LocalDate
该类表示一个仅限日期的值,不包含一天中的时间和时区
LocalDate ld = LocalDate.of( 2016 , Month.MARCH , 1 );
您可以传递一个数字,而不是一月到十二月编号为1-12的Month
enum对象
时区
为了报警,我们需要一天中的某个时间。你可以得到一天中的第一刻。这通常是时间00:00:00
,但并不总是由于夏令时(DST)或其他异常。让java.time确定时间
时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,法国巴黎午夜过后几分钟是新的一天,而魁北克山仍然是“昨天”
ZoneDateTime
应用一个ZoneId
,以获得一个
如果报警库要求将该时刻表示为自1970 UTC开始以来的毫秒计数,则从提取的对象中查询long
整数
关于java.time
该框架内置于Java8及更高版本中。这些类取代了旧的麻烦的日期时间类,如java.util.date
,.Calendar
,&java.text.SimpleDateFormat
该项目现已启动,建议迁移到java.time
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释
大部分java.time功能都在中向后移植到java 6和7,并进一步适应于中(请参阅)
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如
Interval
、YearWeek
、YearQuarter
,等等。这可能不是您的问题,但三月值是2。为避免此类错误,请使用日历常量,在本例中为Calendar.MARCH
什么不起作用?编辑你的问题,试着更好地解释问题哦!我错过了最后一句话!很高兴帮助你。如果你的问题得到解决,你必须接受这一点作为答案。
LocalDate ld = LocalDate.of( 2016 , Month.MARCH , 1 );
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ld.atStartOfDay( z ) ;
long millisecondsSinceEpoch = zdt.toInstant().toEpochMilli() ;