Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java LocalDateTime设置AlarmManager与使用Calander_Java_Android_Datetime_Calendar_Android Calendar - Fatal编程技术网

使用Java LocalDateTime设置AlarmManager与使用Calander

使用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

我正在写一个警报调度类。我以前编写的课程使用日历设置警报

我已经使用三个十端口切换到新的Java DateTime api

我之前通过获取日历中的时间(以毫秒为单位)设置单次触发报警,如下所示:

    // 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,然后使用它生成一个不需要区域偏移的瞬间:


区域偏移似乎不是我的坏选择。我会仔细研究的。谢谢。我会试试的