开发者

Android Calendar has always the same date

开发者 https://www.devze.com 2023-02-07 18:01 出处:网络
i want an alarm to go off when user checks in a checkbox. Here is my code: if (cb1.isChecked()) { Calendar calA = Calendar.getInstance();

i want an alarm to go off when user checks in a checkbox. Here is my code:

if (cb1.isChecked()) 
    {
      Calendar calA = Calendar.getInstance();
      //calA.set(Calend开发者_开发百科ar.YEAR, Calendar.YEAR);
      //calA.set(Calendar.MONTH, Calendar.MONTH);
      //calA.set(Calendar.DAY_OF_MONTH, Calendar.DAY_OF_MONTH);
      calA.set(Calendar.HOUR_OF_DAY, Calendar.HOUR_OF_DAY);
      calA.set(Calendar.MINUTE, Calendar.MINUTE);
      calA.set(Calendar.SECOND, Calendar.SECOND);
      calA.set(Calendar.MILLISECOND, Calendar.MILLISECOND);
      alarmManager.set(AlarmManager.RTC_WAKEUP, calA.getTimeInMillis(), pendingIntentA);
      Toast.makeText(main.this, "Set time: " + String.valueOf(calA.getTime()), Toast.LENGTH_SHORT).show();
    }

Other codes are working fine, and if i set the hour and minute to specific ones, like

calA.set(Calendar.HOUR_OF_DAY, 15);
calA.set(Calendar.MINUTE, 24);

it's working, but with this code i always get this toast message: Sat Mar 05 11:12:00 or Sat Mar 05 11:12:13 (neither the date nor the time is good)

What is wrong with my code?


Calendar.HOUR_OF_DAY is a constant, which just so happens to be an integer.

When you

calA.set(Calendar.HOUR_OF_DAY, Calendar.HOUR_OF_DAY);

you are in fact setting the hour of day to whatever number happens to have been chosen for this constant. This value has no real meaning in relation to the hour of day, so it'll produce a garbage result.

When you get the calendar, it's by default set to the current time, so if that's what you're going for, simply don't set the time:

Like other locale-sensitive classes, Calendar provides a class method, getInstance, for getting a generally useful object of this type. Calendar's getInstance method returns a Calendar object whose calendar fields have been initialized with the current date and time:

Calendar rightNow = Calendar.getInstance();

If you then want to set a time like "5 minutes into the future", do something like:

calA.add(Calendar.MINUTE, 5);

If you still get an incorrect time, verify that the system time is set correctly.

Source:

  • Calendar documentation


Calendar calA = Calendar.getInstance(); returns a calendar object whose locale is based on system settings and whose time fields have been initialized with the current date and time.

Sebastian P is right that Calendar.HOUR_OF_DAY is a constant, a key/index used for referencing the actual hour value.

See http://developer.android.com/reference/java/util/Calendar.html

0

精彩评论

暂无评论...
验证码 换一张
取 消