使用Java LocalDateTime设置AlarmManager与使用Calander
我正在写一个警报调度类。我以前编写的课程使用日历设置警报 我已经使用三个十端口切换到新的Java DateTime api 我之前通过获取日历中的时间(以毫秒为单位)设置单次触发报警,如下所示:使用Java LocalDateTime设置AlarmManager与使用Calander,java,android,datetime,calendar,android-calendar,Java,Android,Datetime,Calendar,Android Calendar,我正在写一个警报调度类。我以前编写的课程使用日历设置警报 我已经使用三个十端口切换到新的Java DateTime api 我之前通过获取日历中的时间(以毫秒为单位)设置单次触发报警,如下所示: // For the different versions of operating system set off a single shot alarm if(Build.VERSION.SDK_INT >= 23) { mAlarmManager.setExac
// For the different versions of operating system set off a single shot alarm
if(Build.VERSION.SDK_INT >= 23) {
mAlarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
alarmCalander.getTimeInMillis(), pIntent);
} else if(Build.VERSION.SDK_INT >= 19) {
mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmCalander.getTimeInMillis(), pIntent);
} else {
mAlarmManager.set(AlarmManager.RTC_WAKEUP, alarmCalander.getTimeInMillis(), pIntent);
}
alarmCalander.getTimeInMillis()
您可以看到我在日历上使用了以毫秒为单位的get time,如下所示:
// For the different versions of operating system set off a single shot alarm
if(Build.VERSION.SDK_INT >= 23) {
mAlarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
alarmCalander.getTimeInMillis(), pIntent);
} else if(Build.VERSION.SDK_INT >= 19) {
mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmCalander.getTimeInMillis(), pIntent);
} else {
mAlarmManager.set(AlarmManager.RTC_WAKEUP, alarmCalander.getTimeInMillis(), pIntent);
}
alarmCalander.getTimeInMillis()
现在,我使用的不是日历而是LocalDateTime
但是我没有看到任何方法可以获得LocalDateTime的毫秒时间,只有纳秒
你会把它转换回毫秒还是有更好的方法
谢谢您必须先将LocalDateTime LDT转换为瞬间,然后才能从中读取与时间戳相关的信息。实现这一点有多种方法: 调用LDT实例中的instantZoneOffset。请注意,您必须根据您的LDT传递匹配的区域偏移,否则您可能会得到错误的瞬间 例如,假设您的LDT是在UTC计算的:
LocalDateTime ldt = /* ... */
Instant i = ldt.toInstant(ZoneOffset.UTC);
Long millis = i.toEpochMilli();
将您的LDT实例转换为ZoneDateTime,传入正确的区域ID,然后使用它生成一个不需要区域偏移的瞬间:
区域偏移似乎不是我的坏选择。我会仔细研究的。谢谢。我会试试的