5

から時間と分、TextViewおよびからAM/PMを取得するアラームを設定していSpinnerます。Calendarオブジェクト を初期化する方法は次のとおりです。

Calendar calen = Calendar.getInstance();
calen.set(Calendar.HOUR_OF_DAY, alarmHour); //alarmHour from TextView
calen.set(Calendar.MINUTE, alarmMinute); //alarmMinute from TextView
calen.set(Calendar.SECOND, 0);
calen.set(Calendar.MILLISECOND, 0);

if(amorpm.equals("PM") //amorpm from Spinner
{
    calen.set(Calendar.AM_PM, Calendar.PM);
}
else
{
    calen.set(Calendar.AM_PM, Calendar.AM);
}

問題は、このオブジェクトの時間Calendar値が正しい場合があることです。つまり、ユーザーが入力する値ですTextView(常に1から12です)。ただし、値が現在の時間と等しい場合もあります。たとえば、現在の時刻が午後11時30分で、アラームを午前9時30分に設定した場合、[時間]フィールドの値は11になります。奇妙なことに、Calendarオブジェクトの名前を別の名前、たとえばcalに変更すると、機能します。しかし、後で動作しません。何が間違っている可能性がありますか?

ご協力いただきありがとうございます!

4

1 に答える 1

12

calen.set(Calendar.HOUR, alarmHour);解決策は代わりに電話することだと思いますcalen.set(Calendar.HOUR_OF_DAY, alarmHour);

問題は、Calendar.HOUR_OF_DAYフィールドを設定してからAM/PMフィールドを設定していることです。「1日の時間」は24時間制の1時間であるため、AM/PMと組み合わせて使用​​しても意味がありません。Javaのドキュメント(http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html)によると、時刻を設定するときに、矛盾する情報が表示された場合は、最新のものセット情報は、以下の組み合わせで使用されます。

HOUR_OF_DAY

AM_PM + HOUR

時間の後にAM/PMフィールドを設定しているため、時間はCalendar.HOURフィールドから取得されます。もちろん、インスタンスを作成するときに現在の時間に初期化されます。

もちろん、変数の名前は赤いニシンです。それはおそらくそれに影響を与えることはできません。

于 2012-09-12T18:36:55.700 に答える