При использовании AlarmManager у вас есть два варианта установки будильника - первый - это время в мс с момента перезагрузки устройства (не понимаю эту опцию) или, если вы хотите «абсолютное» время, вам нужно указать UTCвремя в мс.
Я думаю, что это должно работать - я делал что-то подобное в прошлом ...
public long getUtcTimeInMillis(String datetime) {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date date = sdf.parse(datetime);
// getInstance() provides TZ info which can be used to adjust to UTC
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// Get timezone offset then use it to adjust the return value
int offset = cal.getTimeZone().getOffset(cal.getTimeInMillis());
return cal.getTimeInMillis() + offset;
}
Лично я бы рекомендовал использовать нелокализованный форматнапример, yyyy-MM-dd HH:mm:ss
для любой строки даты / времени, которую вы используете, если хотите обслуживать пользователей по всему миру.
Международный стандарт ISO 8601 - yyyy-MM-dd HH:mm:ss.SSSZ
, но я обычно не захожу так далеко.