Android日历始终保持相同的日期

时间:2011-01-30 10:52:03

标签: android calendar

当用户签入复选框时,我希望闹钟响起。这是我的代码:

if (cb1.isChecked()) 
    {
      Calendar calA = Calendar.getInstance();
      //calA.set(Calendar.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();
    }

其他代码工作正常,如果我将小时和分钟设置为特定的代码,例如

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

它正在工作,但是使用此代码我总是得到这个toast消息: 星期六05:15 11:12或星期六05:12:13 (日期和时间都不好)

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:1)

Calendar.HOUR_OF_DAY是一个常量,恰好是一个整数。

当你

calA.set(Calendar.HOUR_OF_DAY, Calendar.HOUR_OF_DAY);
事实上,你实际上将一天中的小时数设置为为此常数选择的任何数字。该值对于一天中的小时没有实际意义,因此它会产生垃圾结果。

当你获得日历时,它默认设置为当前时间,所以如果这是你想要的,那就不要设置时间:

  

与其他区域设置敏感的类一样,Calendar提供了一个类方法getInstance,用于获取此类型的通用对象。 Calendar的getInstance方法返回一个Calendar对象,其日历字段已使用当前日期和时间初始化

Calendar rightNow = Calendar.getInstance();

如果您想设置“未来5分钟”之类的时间,请执行以下操作:

calA.add(Calendar.MINUTE, 5);

如果仍然得到错误的时间,请确认系统时间设置正确。

来源:

答案 1 :(得分:0)

Calendar calA = Calendar.getInstance();返回一个日历对象,其区域设置基于系统设置,其时间字段已使用当前日期和时间进行初始化。

Sebastian P是正确的,Calendar.HOUR_OF_DAY是一个常量,一个用于引用实际小时值的键/索引。

请参阅http://developer.android.com/reference/java/util/Calendar.html