2011-04-28 45 views
3

我有一個項目日曆的isSet方法是非常有用的,但在清理一個字段和讀取該字段的isSet標誌之間,我需要調用受此問題影響的另一種日曆方法。

下面就來演示一下是怎麼回事樣本:爲什麼在調用其他許多方法時calendar.isSet(field)變爲true?

Calendar cal = Calendar.getInstance(); 
Log.d(TAG, Boolean.toString(cal.isSet(Calendar.SECOND))); // true 
cal.clear(Calendar.SECOND); 
Log.d(TAG, Boolean.toString(cal.isSet(Calendar.SECOND))); // false 
cal.getTimeInMillis(); 
// These other methods I've tried, and I'm sure many more, have the same affect on isSet: 
// before(calendar), compareTo(calendar), get(field), add(field, int), set(field, int) 
// Note: 'field' in above comment line refers to a field other than Calendar.SECOND 
Log.d(TAG, Boolean.toString(cal.isSet(Calendar.SECOND))); // true 

我已經看過了源Calendar類,我不明白是什麼導致這一點。有誰知道爲什麼會發生這種情況?我是否需要分別跟蹤設置的字段?

更新:
看起來這個問題可能是Android特定的或可能是特定版本的Java,因爲一些答覆者說它在標準Java中適用於他們。只是要清楚,我正在使用的類仍然是java.util.Calendar。如果信息可能有幫助,我正在構建Android 2.2平臺(API 8)。

更新2:
據有人在Freenode上#Android的開發和我在維基百科上隨後的研究中,這可能是因爲使用了Dalvik的和諧爲它的類庫,而不是Java的一個子集(Java實現)。然而,那讓我想知道爲什麼Harmony會改變isSet行爲。不用說,這個問題聽起來像是上游的方式,因爲我們很快就會在Android SDK中進行修復,所以我需要解決一個解決方法。

由於尚未得到正確回答,因此我將此問題保留爲開放狀態。 和諧是我懷疑還是有意設計的缺陷?如果有意,有什麼目的,有沒有辦法使用它,因爲我想要使用它?

更新3:
我已將此問題發佈到Android問題跟蹤器,現在要等待,看看是否有任何事情發生。如果這個問題對你來說也是一個問題,請爲它加註星標。我希望Android有自己的和諧分叉,並且不需要等待上游的修復。
https://code.google.com/p/android/issues/detail?id=16826

也刪除了java標記,因爲這顯然不是Java問題。

回答

0

按預期工作對我來說..

這裏是我曾經用過

import java.util.Calendar; 

公共類的測試{

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    Calendar cal = Calendar.getInstance(); 
    System.out.println(Boolean.toString(cal.isSet(Calendar.SECOND))); 
    cal.clear(Calendar.SECOND); 
    System.out.println(Boolean.toString(cal.isSet(Calendar.SECOND))); 
    cal.getTimeInMillis(); 
    System.out.println(Boolean.toString(cal.isSet(Calendar.SECOND))); 
} 

}

代碼

這裏是這裏是控制檯輸出

真正

謝謝,

相關問題