Calendar 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
類別Calendar
是一種抽象類,提供在特定時間點與一組#fields calendar fields
YEAR
例如 、MONTH
、DAY_OF_MONTH
、 HOUR
等等之間轉換的方法,以及操作行事曆字段的方法,例如取得下一周的日期。
[Android.Runtime.Register("java/util/Calendar", DoNotGenerateAcw=true)]
public abstract class Calendar : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ISerializable, Java.Lang.ICloneable, Java.Lang.IComparable
[<Android.Runtime.Register("java/util/Calendar", DoNotGenerateAcw=true)>]
type Calendar = class
inherit Object
interface ISerializable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface ICloneable
interface IComparable
- 繼承
- 衍生
- 屬性
- 實作
備註
類別Calendar
是一種抽象類,提供在特定時間點與一組#fields calendar fields
YEAR
例如 、MONTH
、DAY_OF_MONTH
、 HOUR
等等之間轉換的方法,以及操作行事曆字段的方法,例如取得下一周的日期。 時間的瞬間可以透過毫秒值來表示,該值是從 “Epoch”><em Epoch</em,1970>> 年 1 月 1 日 00:00:00:00.000 GMT (公曆) 。
類別也提供額外的欄位和方法來實作封裝外部的具體行事歷系統。 這些欄位與方法會定義為 protected
。
如同其他區分地區設定的類別, Calendar
提供類別方法 , getInstance
以取得此類型的一般實用物件。 Calendar
getInstance
的 方法會傳Calendar
回物件,其行事曆字段已使用目前的日期和時間初始化:<blockquote>
Calendar rightNow = Calendar.getInstance();
</blockquote>
Calendar
物件可以產生實作特定語言和行事歷樣式之日期時間格式設定所需的所有行事曆域值 (,例如日文公曆、日文-傳統) 。 Calendar
定義特定行事曆欄位所傳回的值範圍,以及其意義。 例如,行事曆系統的第一個月具有所有行事曆的值 MONTH == JANUARY
。 其他值是由具體子類別所定義,例如 ERA
。 如需詳細資訊,請參閱個別欄位檔和子類別檔。
<h2>取得和設定行事曆域值</h2>
您可以藉由呼叫 set
方法來設定行事曆域值。 在 中 Calendar
設定的任何域值都必須從 Epoch) 或行事曆欄位的值計算其時間值 (毫秒,才會解譯。 get
呼叫、 getTimeInMillis
、 和 roll
getTime
add
牽涉到這類計算。
<h3>Leniency</h3>
Calendar
有兩種用於解譯行事曆字段的模式:em lenient</em>> 和 <em>non-lenient</em。 <> Calendar
當 處於 lenient 模式時,它會接受比它產生的更廣泛的行事歷域值。 Calendar
當 重新計算 所傳get()
回的行事曆域值時,所有行事曆字段都會正規化。 例如,lenient GregorianCalendar
會將 MONTH == JANUARY
DAY_OF_MONTH == 32
解譯為 2 月 1 日。
Calendar
當 處於非寬鬆模式時,如果行事曆字段中有任何不一致的情況,則會擲回例外狀況。 例如,一 GregorianCalendar
律會產生 DAY_OF_MONTH
介於 1 到月份長度之間的值。 如果已設定超出範圍域值,則非lenient GregorianCalendar
會在計算其時間或行事歷域值時擲回例外狀況。
<h3>“first_week”>First Week</h3>
Calendar
使用兩個參數來定義地區設定特定的七天周:一周的第一天,以及第一周中的最小天數 (從 1 到 7) 。 建構 時 Calendar
,這些數位會取自地區設定資源數據或地區設定本身。 如果指定的地區設定包含 「fw」 Unicode 擴充功能,則會根據這些延伸模組取得一周的第一天。 您也可以透過方法來明確指定它們來設定其值。
設定或取得 WEEK_OF_MONTH
或 WEEK_OF_YEAR
欄位時, Calendar
必須判斷當月或年份的第一周做為參考點。 月份或年份的第一周定義為最早的七天期間,從 開始 getFirstDayOfWeek()
,且至少包含 getMinimalDaysInFirstWeek()
該月份或年份的天數。 周數 ..., -1, 0 在第一周之前;周數為 2,3,...遵循它。 請注意,所 get()
傳回的標準化編號可能不同。 例如,特定 Calendar
子類別可能會將一年第 1 週之前的一周指定為去年的一周 <i>n</i>
。
<h3>行事曆欄位解析</h3>
從行事曆欄位計算日期和時間時,計算 (的資訊可能不足,例如只有沒有月) 日的年份和月份,或可能不一致的資訊 (,例如 1996 年 7 月 15 日 (公曆) -- 1996 年 7 月 15 日實際上是星期一) 。 Calendar
會解析行事曆域值,以下列方式判斷日期和時間。
「解決」>如果行事曆域值有任何衝突, <c>Calendar</c> 會將優先順序授與最近設定的行事曆字段。 以下是行事曆欄位的預設組合。 將會使用最近設定的單一欄位所決定的最新組合。
“date_resolution”>針對日期字段: <blockquote>
YEAR + MONTH + DAY_OF_MONTH
YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK
YEAR + DAY_OF_YEAR
YEAR + DAY_OF_WEEK + WEEK_OF_YEAR
</blockquote>
“time_resolution”>針對日期時間字段: <blockquote>
HOUR_OF_DAY
AM_PM + HOUR
</blockquote>
如果有任何行事曆欄位的值尚未在選取的欄位組合中設定, Calendar
請使用其預設值。 每個欄位的預設值可能會因具體行事曆系統而異。 例如,在 中 GregorianCalendar
,欄位的預設值與 Epoch 開頭的預設值相同:例如、 YEAR = 1970
、 MONTH = JANUARY
、 DAY_OF_MONTH = 1
等。
<strong>Note:</strong> 在某些單一時間的解譯中,有一些可能模棱兩可的情況,以下列方式解決: <ol><li> 23:59 是當天的最後一分鐘,而 00:00 是下一天的第一分鐘。 因此,1999 年 12 月 31 日 23:59 <2000 年 1 月 1 日 00:00 <2000 年 1 月 1 日 00:01。
<li> 雖然過去並不精確,但午夜也屬於 “am”,而 noon 屬於 “pm”,因此在同一天,上午 12:00 (午夜) <上午 12:01,下午 12:00,下午 12:00 (noon) <下午 12:01 </ol>
日期或時間格式字串不是行事曆定義的一部分,因為使用者必須在運行時間修改或覆寫這些字串。 使用 DateFormat
來格式化日期。
<h3>欄位操作</h3>
您可以使用三種方法來變更行事曆字位: set()
、 add()
和 roll()
。
<強>set(f, value)
</強式> 會將行事曆欄位 f
變更為 value
。 此外,它會設定內部成員變數,以指出行事曆欄位 f
已變更。 雖然行事曆欄位f
會立即變更,但在下一次呼叫 get()
、getTime()
、、 getTimeInMillis()
add()
或 roll()
之前,不會重新計算行事歷的時間值,以毫秒為單位。 因此,對 set()
的多個呼叫不會觸發多個不必要的計算。 由於使用 set()
變更行事曆欄位,其他行事曆欄位也可能會根據行事曆欄位、行事曆域值和行事曆系統而變更。 此外,在重新計算行事曆字段之後, get(f)
呼叫 方法不一定會傳回 value
set
。 細節是由具體行事歷類別所決定。
<em>Example</em>:請考慮最初設定為 GregorianCalendar
1999 年 8 月 31 日。 呼叫 set(Calendar.MONTH, Calendar.SEPTEMBER)
會將日期設定為 1999 年 9 月 31 日。 這是暫時的內部表示法,如果 getTime()
接著呼叫,則會解析為 1999 年 10 月 1 日。 不過,在呼叫getTime()
之前呼叫 set(Calendar.DAY_OF_MONTH, 30)
,將日期設定為 1999 年 9 月 30 日,因為本身之後set()
不會重新計算。
<強>add(f, delta)
</強> 新增 delta
至欄位 f
。 這相當於使用兩個調整呼叫 set(f, get(f) + delta)
:
<blockquote>
<strong>Add rule 1</strong>. 呼叫之後的域 f
值減去呼叫前的域 f
值是 delta
,將欄位中發生的任何溢位模數 f
設為 。 當域值超過其範圍時,就會發生溢位,因此,下一個較大的欄位會遞增或遞減,並將域值調整回其範圍。
<強>式新增規則 2</強>。 如果較小的欄位必須是不因欄位變更或其他條件約束而無法等於其先前的值,因為變更欄位 f
之後的最小值或最大值或其他條件約束,例如時區位移變更,則其值會調整為盡可能接近其預期值。 較小的欄位代表較小的時間單位。 HOUR
是小於 的 DAY_OF_MONTH
欄位。 不會對不可變的較小欄位進行調整。 行事曆系統會決定哪些欄位必須是不可變的。
</blockquote>
此外,不同於 set()
, add()
會強制立即重新計算行事曆的毫秒和所有字段。
<em>Example</em>:請考慮最初設定為 GregorianCalendar
1999 年 8 月 31 日。 通話 add(Calendar.MONTH, 13)
會將行事曆設定為 2000 年 9 月 30 日。 <強>式新增規則 1</強> 式會將 MONTH
字段設定為 9 月,因為將 13 個月新增至 8 月會提供下一年 9 月。 由於 DAY_OF_MONTH
無法在 9 月為 GregorianCalendar
31, <因此強>式新增規則 2</強> 式會將 DAY_OF_MONTH
設定為 30,這是最接近的可能值。 雖然它是較小的欄位, DAY_OF_WEEK
但不會由規則 2 調整,因為它預期會在中的 GregorianCalendar
月份變更時變更。
<強式>roll(f, delta)
</強> 式新增 delta
至字段 f
,而不會變更較大的欄位。 這相當於使用下列調整呼叫 add(f, delta)
:
<blockquote>
<強>式變換規則</強式>。 呼叫之後,較大的欄位不會變更。 較大的欄位代表較大的時間單位。 DAY_OF_MONTH
是大於的 HOUR
欄位。
</blockquote>
<em>Example</em>:請參閱 java.util.GregorianCalendar#roll(int, int)
。
<強>式使用模型</強式>。 若要鼓勵 和 roll()
的行為add()
,請考慮使用者介面元件,其中包含月份、日和年份的遞增和遞減按鈕,以及基礎 GregorianCalendar
。 如果介面讀取 1999 年 1 月 31 日,且使用者按下月份遞增按鈕,應該讀取什麼? 如果基礎實作使用 set()
,它可能會讀取 1999 年 3 月 3 日。 更好的結果是 1999 年 2 月 28 日。 此外,如果使用者再次按下月份遞增按鈕,則應該閱讀 1999 年 3 月 31 日,而不是 1999 年 3 月 28 日。 藉由儲存原始日期並使用 add()
或 roll()
,視較大的欄位是否應該受到影響而定,使用者介面的行為可能會如大部分使用者直覺預期般運作。
已在1.1中新增。
此頁面的部分是根據 所建立和共用的工作進行修改,並根據 2.5 屬性授權中所述的詞彙來使用。
建構函式
Calendar() |
使用預設時區和預設 |
Calendar(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。 |
Calendar(TimeZone, Locale) |
使用指定的時區和地區設定來建構行事曆。 |
欄位
AllStyles |
已淘汰.
表示所有樣式中名稱的樣式規範 |
Am |
|
AmPm |
已淘汰.
的欄位編號 |
April |
欄位的值, |
August |
欄位的值, |
Date |
已淘汰.
和 |
DayOfMonth |
已淘汰.
和 |
DayOfWeek |
已淘汰.
和 |
DayOfWeekInMonth |
已淘汰.
的欄位編號 |
DayOfYear |
已淘汰.
和 |
December |
|
DstOffset |
已淘汰.
和 |
Era |
已淘汰.
和 |
February |
|
FieldCount |
和 |
Friday |
指出星期五的 |
Hour |
已淘汰.
的欄位編號 |
HourOfDay |
已淘汰.
和 |
January |
|
July |
|
June |
|
Long |
已淘汰.
和 |
LongFormat |
和 |
LongStandalone |
和 |
March |
|
May |
|
Millisecond |
已淘汰.
的欄位編號 |
Minute |
已淘汰.
的欄位編號 |
Monday |
指出星期一的 |
Month |
已淘汰.
和 |
NarrowFormat |
和 |
NarrowStandalone |
和 |
November |
|
October |
|
Pm |
欄位的值, |
Saturday |
指出星期六的 |
Second |
已淘汰.
的欄位編號 |
September |
|
Short |
已淘汰.
和 |
ShortFormat |
和 |
ShortStandalone |
和 |
Sunday |
指出星期日的 |
Thursday |
表示星期四的 |
Tuesday |
指出星期二的 |
Undecimber |
|
Wednesday |
指出星期三的 |
WeekOfMonth |
已淘汰.
的欄位編號 |
WeekOfYear |
已淘汰.
和 |
Year |
已淘汰.
和 |
ZoneOffset |
已淘汰.
和 的欄位編號 |
屬性
AreFieldsSet |
如果 |
AvailableCalendarTypes |
傳回不可修改的 , |
CalendarType |
傳回這個 |
Class |
傳回這個 |
Fields |
此行事曆目前設定時間的行事曆域值。 |
FirstDayOfWeek |
取得一周的第一天是什麼;e. |
Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
Instance |
使用預設時區和地區設定取得行事曆。 |
IsTimeSet |
如果 的值為有效, |
IsWeekDateSupported |
傳回這個 |
JniIdentityHashCode |
類別 |
JniPeerMembers |
類別 |
Lenient |
告知日期/時間解譯是否為寬鬆。 |
MinimalDaysInFirstWeek |
取得年份第一周所需的最小天數;e. |
PeerReference |
類別 |
ThresholdClass |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
ThresholdType |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
Time |
|
TimeInMillis |
以毫秒為單位傳回此行事歷的時間值。 |
TimeZone |
取得時區。 -或- 使用指定的時區值來設定時區。 |
WeeksInWeekYear |
傳回這個 |
WeekYear |
傳回這個 |
方法
Add(CalendarField, Int32) |
根據行事曆的規則,將指定的時間量加入或減去指定的行事曆字段。 |
After(Object) |
傳回這個 |
Before(Object) |
傳回這個 |
Clear() |
設定此未定義的 「#Epoch」>Epoch |
Clear(CalendarField) |
設定指定的行事曆域值,以及此未定義的 「#Epoch」>Epoch |
Clone() |
建立並傳回這個 對象的複本。 |
CompareTo(Calendar) |
比較時間值 (毫秒與兩 |
Complete() |
在行事曆欄位中填入任何未設定的欄位。 |
ComputeFields() |
將目前的毫秒時間值 |
ComputeTime() |
將目前 |
Dispose() |
類別 |
Dispose(Boolean) |
類別 |
Equals(Object) |
指出其他物件是否「等於」這個物件。 (繼承來源 Object) |
Get(CalendarField) |
傳回指定行事曆欄位的值。 |
GetActualMaximum(CalendarField) |
傳回指定的行事曆字段可能具有的最大值,指定這個 |
GetActualMinimum(CalendarField) |
傳回指定的行事曆字段可能具有的最小值,指定這個 |
GetAvailableLocales() |
傳回所有地區設定的陣列,這個 |
GetDisplayName(Int32, Int32, Locale) |
傳回指定 |
GetDisplayNames(Int32, Int32, Locale) |
傳回 , |
GetGreatestMinimum(CalendarField) |
傳回這個 |
GetHashCode() |
傳回此物件的雜湊碼值。 (繼承來源 Object) |
GetInstance(Locale) |
使用預設時區和指定的地區設定取得行事曆。 |
GetInstance(TimeZone) |
使用指定的時區和預設地區設定取得行事曆。 |
GetInstance(TimeZone, Locale) |
取得具有指定時區和地區設定的行事曆。 |
GetLeastMaximum(CalendarField) |
傳回這個 |
GetMaximum(CalendarField) |
傳回這個 |
GetMinimum(CalendarField) |
傳回這個 |
InternalGet(Int32) |
傳回指定行事曆欄位的值。 |
IsSet(CalendarField) |
判斷指定的行事曆欄位是否已設定值,包括方法呼叫所 |
JavaFinalize() |
當垃圾收集判斷物件不再參考物件時,垃圾收集行程會在物件上呼叫。 (繼承來源 Object) |
Notify() |
喚醒正在等候此物件監視器的單一線程。 (繼承來源 Object) |
NotifyAll() |
喚醒正在等候此物件監視器的所有線程。 (繼承來源 Object) |
Roll(CalendarField, Boolean) |
新增或減去 () 指定時間欄位的單一時間單位,而不變更較大的欄位。 |
Roll(CalendarField, Int32) |
將指定的 (帶正負號) 金額新增至指定的行事曆欄位,而不變更較大的欄位。 |
Set(CalendarField, Int32) |
將指定的行事曆欄位設定為指定的值。 |
Set(Int32, Int32, Int32) |
設定行事曆欄位 |
Set(Int32, Int32, Int32, Int32, Int32) |
設定行事曆欄位 |
Set(Int32, Int32, Int32, Int32, Int32, Int32) |
設定、 |
SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
SetWeekDate(Int32, Int32, Int32) |
使用指定的日期規範來設定這個 |
ToArray<T>() |
類別 |
ToInstant() |
類別 |
ToString() |
傳回物件的字串表示。 (繼承來源 Object) |
UnregisterFromRuntime() |
類別 |
Wait() |
讓目前的線程等到喚醒為止,通常是em <notified/em>或<em>interrupted</em>。>< (繼承來源 Object) |
Wait(Int64) |
讓目前的線程等到喚醒為止,通常是em <notified/em>或<em>interrupted</em>,或直到經過一定數量的實時為止。<> (繼承來源 Object) |
Wait(Int64, Int32) |
讓目前的線程等到喚醒為止,通常是em <notified/em>或<em>interrupted</em>,或直到經過一定數量的實時為止。<> (繼承來源 Object) |
明確介面實作
IComparable.CompareTo(Object) |
類別 |
IJavaPeerable.Disposed() |
類別 |
IJavaPeerable.DisposeUnlessReferenced() |
類別 |
IJavaPeerable.Finalized() |
類別 |
IJavaPeerable.JniManagedPeerState |
類別 |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
類別 |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
類別 |
IJavaPeerable.SetPeerReference(JniObjectReference) |
類別 |
擴充方法
JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
JavaCast<TResult>(IJavaObject) |
類別 |
GetJniTypeName(IJavaPeerable) |
類別 |