首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 將「HH:mm」字串解析並設定 Android AlarmManager 鬧鐘

     編輯:程式設計綜合問答

需求

從 CSV 讀取時間字串(格式 hh:mm,如 02:13),在該時刻觸發鬧鐘通知。

關鍵步驟

  1. 使用 SimpleDateFormat 解析字串為 Date 物件。
  2. 取得當前日期,替換時、分為解析出的值。
  3. 將最終 Date 轉為毫秒時間戳,傳給 AlarmManager.set()。

完整程式碼

public void setAlarmFromString(Context context, String timeStr, PendingIntent pendingIntent) {
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); // 24小時制
    try {
        Date parsedTime = sdf.parse(timeStr); // 如 02:13
        Calendar cal = Calendar.getInstance();
        cal.setTime(parsedTime);
        // 保留年月日為今天,僅替換時分
        Calendar now = Calendar.getInstance();
        now.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY));
        now.set(Calendar.MINUTE, cal.get(Calendar.MINUTE));
        now.set(Calendar.SECOND, 0);
        now.set(Calendar.MILLISECOND, 0);

        // 若該時間已過,改為明天
        if (now.before(Calendar.getInstance())) {
            now.add(Calendar.DAY_OF_YEAR, 1);
        }

        am.setExact(AlarmManager.RTC_WAKEUP, now.getTimeInMillis(), pendingIntent);
    } catch (ParseException e) {
        e.printStackTrace();
    }
}

注意事項

  • 格式模式建議用 HH:mm(24小時制),避免 hh:mm(12小時制)造成上午/下午混淆。
  • Android 6.0+ (API 23) 需申請 android.permission.SCHEDULE_EXACT_ALARM 或使用 setAndAllowWhileIdle。
  • PendingIntent 需設定 FLAG_UPDATE_CURRENT 或 FLAG_IMMUTABLE (API 31+)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved