【发布时间】:2023-03-29 06:48:01
【问题描述】:
我有一个使用 AlarmManager 安排提醒的逻辑。我需要实现以下内容:
逻辑1:当用户改变时区时,例如他从英国(UTC+0)到中欧(UTC+1),警报应该跟随时区。 例如,安排在 UTC+0 下午 3 点的提醒应该在 UTC+1 下午 4 点触发
逻辑2:当时间偏移发生时,例如春季时间偏移到夏令时(从UTC+1到UTC+2),警报应该保持原来的时间 例如,安排在 UTC+1 下午 3 点的提醒应该在 UTC+2 下午 3 点触发
我怎样才能做到这一点?到目前为止,我还没有特定的逻辑,所有的警报都遵循 Logic 1。我无法确定何时发生时移。
调度逻辑很简单:
LocalDateTime reminderTime = LocalDateTime.of(...)
ZoneOffset currentOffsetForMyZone = ZoneId.systemDefault().getRules().getOffset(Instant.now());
reminderTime.toInstant(currentOffsetForMyZone).toEpochMilli();
alarmManager.setExact(AlarmManager.RTC_WAKEUP, reminderTime, pendingIntent);
【问题讨论】:
-
为什么不只使用 UTC 而不必担心时区?
-
如何仅使用 UTC 实现上述两个逻辑?
-
UTC 时间不会改变,它没有时区,也没有夏令时。您可以使用
Calendar获取特定日期的UTC 时间戳 -
它不起作用。在您的场景中,所有警报都使用我的问题的逻辑 1 重新安排。当时间切换到 DST 时,所有警报也会重新安排,而我需要保持实际时间(逻辑 2)。
标签: android timezone alarmmanager android-broadcast dst