【问题标题】:Android:Want to add some extra hours and minutes from selected for setting the alarmAndroid:想要从选定的设置闹钟中添加一些额外的小时和分钟
【发布时间】:2025-12-11 06:25:01
【问题描述】:

我想从所选的时间中添加一些额外的小时和分钟,例如如果我被选中的时间是晚上 11.30,那么将添加额外的 5.30,因此警报将设置为 4.30。

我们怎样才能做到这一点?

以下是一些参考代码:-

public class AndroidTimeActivity extends Activity {

     TimePicker myTimePicker;
     Button buttonstartSetDialog;
     Button buttonCancelAlarm;
     TextView textAlarmPrompt;

     TimePickerDialog timePickerDialog;

     final static int RQS_1 = 1;

     public static final long HOUR = 3600*1000; 

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            textAlarmPrompt = (TextView)findViewById(R.id.alarmprompt);

            buttonstartSetDialog = (Button)findViewById(R.id.startSetDialog);
            buttonstartSetDialog.setOnClickListener(new OnClickListener(){

       @Override
       public void onClick(View v) {
        textAlarmPrompt.setText("");
        openTimePickerDialog(false);

       }});

            buttonCancelAlarm = (Button)findViewById(R.id.cancel);
            buttonCancelAlarm.setOnClickListener(new OnClickListener(){

       @Override
       public void onClick(View arg0) {
        cancelAlarm();
       }});

        }

     private void openTimePickerDialog(boolean is24r){
      Calendar calendar = Calendar.getInstance();

      timePickerDialog = new TimePickerDialog(
        AndroidTimeActivity.this, 
        onTimeSetListener, 
        calendar.get(Calendar.HOUR_OF_DAY), 
        calendar.get(Calendar.MINUTE), 
        is24r);
      timePickerDialog.setTitle("Set Alarm Time");  

      timePickerDialog.show();

     }

        OnTimeSetListener onTimeSetListener
        = new OnTimeSetListener(){

      @Override
      public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

       Calendar calNow = Calendar.getInstance();
       Calendar calSet = (Calendar) calNow.clone();

       calSet.set(Calendar.HOUR_OF_DAY, hourOfDay);
       calSet.set(Calendar.MINUTE, minute);
       calSet.set(Calendar.SECOND, 0);
       calSet.set(Calendar.MILLISECOND, 0);

       if(calSet.compareTo(calNow) <= 0){
        //Today Set time passed, count to tomorrow
        calSet.add(Calendar.DATE, 1);
       }

       setAlarm(calSet);
      }};

     private void setAlarm(Calendar targetCal){

      textAlarmPrompt.setText(
        "\n\n***\n"
        + "Alarm is set@ " + targetCal.getTime() + "\n"
        + "***\n");

       System.out.println("Time is minutes:"+targetCal.getTime());

       //DateFormat newDate = new DateFormat(targetCal.getTime() + 2 * HOUR);

      Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
      PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
      AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
      alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);

     }

     private void cancelAlarm(){

      textAlarmPrompt.setText(
        "\n\n***\n"
        + "Alarm Cancelled! \n"
        + "***\n");

      Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
      PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
      AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
      alarmManager.cancel(pendingIntent);

     }
      }

【问题讨论】:

    标签: android alarmmanager android-alarms android-timepicker


    【解决方案1】:

    当您要设置闹钟时间时增加数值。

           calSet.set(Calendar.HOUR_OF_DAY, hourOfDay + <increasedHours>);
           calSet.set(Calendar.MINUTE, minute + <increasedMinutes>);
           calSet.set(Calendar.SECOND, 0);
           calSet.set(Calendar.MILLISECOND, 0);
    

    现在向用户展示它:

    private void setAlarm(Calendar targetCal){
         if(targetCal.get(Calendar.HOUR) > 12) 
              hours = targetCal.get(Calendar.HOUR) -12;
         else
              hours = targetCal.get(Calendar.HOUR);
    
        textAlarmPrompt.setText(
            "\n\n***\n"
            + "Alarm is set@ " + hours +  " : " + targetCal.get(Calendar.MINUTE)+ "\n"
            + "***\n");
    
        // rest of your logic
         }
    

    【讨论】:

    • 如果我在 11.30 中添加 5.00,它将得到 16.30,我希望它设置为下午 4.30。
    • 是的..但我们也需要向用户展示,这就是我们想要的原因。:)
    • 好的,酷!我相信您已经为 AM/PM 编写了逻辑。如果不是,您需要做的就是取小时值,检查它是否大于 12。如果 hoursValue>12,那么它是 PM 并且 hoursValue = hoursValue -12。应该做的工作。 :D
    • 没有得到,请您编辑以上内容,以便我们非常了解。
    • 更新了我的答案。你现在应该能更好地理解它了。 :)