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.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 GMT(格里曆)的偏移量。
該類別也提供額外的欄位與方法,用於套件外實作具體的曆法系統。 這些欄位和方法定義為 protected。
與其他區域敏感類別一樣,提供 Calendar 一個類別方法, getInstance用於取得此類物件的一般有用物件。
Calendar的方法 getInstance 回傳 Calendar 一個物件,其日曆欄位已以當前日期和時間 <初始化:blockquote>
Calendar rightNow = Calendar.getInstance();
</區塊引用>
物件 Calendar 可以產生實現特定語言及日曆格式所需的所有日曆欄位值(例如日曆-格里曆、Japanese-Traditional)。
Calendar 定義某些日曆欄位回傳的值範圍及其意義。 例如,曆法系統的第一個月份對所有曆法都有值 MONTH == JANUARY 。 其他數值則由具體子類定義,例如 ERA。 詳情請參閱個別現場文件及子類別文件。
<h2>取得與設定日曆欄位值</h2>
日曆欄位的值可以透過呼叫這些 set 方法來設定。 任何欄位值在 a Calendar 中設定時,直到需要計算其時間值(從紀元起的毫秒)或曆法欄位的值時,才會被解讀。 呼叫 get、 getTimeInMillis、 getTime和 addroll 需要這樣的計算。
<h3>寬容</h3>
Calendar有兩種解讀日曆欄位的模式,分別為 EM 寬鬆/EM< 與 >EM<非寬鬆>/EM<。><> 當 a Calendar 處於寬鬆模式時,它接受的日曆欄位值範圍比產生的範圍更廣。 當 重新 Calendar 計算回傳 get()的日曆欄位值時,所有日曆欄位都會被正規化。 例如,寬鬆者GregorianCalendar將 MONTH == JANUARYDAY_OF_MONTH == 32 解讀為 2月1日。
當 a Calendar 處於非寬鬆模式時,若其日曆欄位有任何不一致,會拋出例外。 例如,a GregorianCalendar 總是產生 DAY_OF_MONTH 介於 1 與月份長度之間的值。 若設定了超出範圍的欄位值,非寬鬆 GregorianCalendar 者在計算其時間或日曆欄位值時會拋出例外。
<h3>“first_week”>第一週</h3”>
Calendar 以兩個參數定義區域特定的七天週:一週的第一天及第一週的最低天數(從1到7)。 這些數字取自區域資源資料,或在構造 a Calendar 時的區域本身。 若指定地點包含「fw」Unicode 延伸,則依據這些延伸來取得週的第一天。 它們也可以透過設定值的方法明確指定。
在設定或取得 WEEK_OF_MONTH or WEEK_OF_YEAR 欄位時, Calendar 必須以每月或一年的第一週作為參考點。 一個月或一年的第一週定義為最早的七天期間,從該月或該年開始 getFirstDayOfWeek() 且至少包含 getMinimalDaysInFirstWeek() 該月份或年份的天數。 第一週之前的週數為......, -1, 0;週數為2、3,...跟著它走。 請注意,回傳的 get() 正規化編號可能有所不同。 例如,某個子 Calendar 職業可能會將一年第一週前的一週指定為前一年度的週 <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
</區塊引用>
「time_resolution」>關於時間欄位: <blockquote>
HOUR_OF_DAY
AM_PM + HOUR
</區塊引用>
如果有任何行事曆欄位的值未被設定在所選欄位組合中,則 Calendar 使用其預設值。 每個欄位的預設值可能會因具體的曆法系統而異。 例如,在 GregorianCalendar中,一個欄位的預設值與該紀元的起始點相同:即 YEAR = 1970, , MONTH = JANUARY, DAY_OF_MONTH = 1, 等等。
<強>註:</強> 某些奇數時間的解釋可能存在某些歧義,解決方式如下: <ol><li> 23:59 是一天的最後一分鐘,00:00 是隔天的第一分鐘。 因此,1999年12月31日23:59 &;2000年1月1日00:00 &;2000年1月1日00:01。
<李> 雖然歷史上不精確,午夜也屬於「上午」,中午屬於「下午」,因此同一天中午夜12:00(午夜)與12:01,中午12:00(中午)及中午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 set 。 具體細節由具體曆法類別決定。
<em>範例/em<:假設一個>原本設定在1999年8月31GregorianCalendar日的事件。 《Calling set(Calendar.MONTH, Calendar.SEPTEMBER) 》將日期定為1999年9月31日。 這是一個臨時的內部表示,若呼叫時 getTime() 會解決至 1999 年 10 月 1 日。 然而,在 呼叫 之前,set(Calendar.DAY_OF_MONTH, 30)getTime()日期會設定為 1999 年 9 月 30 日,因為之後set()不會有重新計算。
<強/>add(f, delta)<強力> 會 delta 加成場面 f。 這等同於經過兩個調整後的呼叫 set(f, get(f) + delta) :
<引用>
<強壯>加入規則1</強。> 呼叫後的欄位 f 值減去呼叫前欄位的 f 值為 delta,模以欄位中發生 f的溢位。 溢位發生於場值超過其範圍,導致下一個較大場被增減,場值又調整回其範圍。
<強壯>加入規則2</強。> 如果預期較小的欄位是不變的,但由於欄位改變後 f 最小值或最大值的變化,或其他限制(如時區偏移變化),無法使其先驗值等於先前值,則其值會被調整至盡可能接近其期望值。 較小的場代表較小的時間單位。
HOUR 是比 更小的域 DAY_OF_MONTH。 對於預期不變的較小場,則不做任何調整。 曆法系統決定哪些欄位預期是不變的。
</區塊引用>
此外,與 set()不同, add() 必須立即重新計算曆法的毫秒及所有欄位。
<em>範例/em<:假設一個>原本設定在1999年8月31GregorianCalendar日的事件。 《Calling add(Calendar.MONTH, 13) 》將日曆設定為2000年9月30日。
<強加>法規則1</強> 則將參賽名單設 MONTH 於九月,因為將13個月加到八月後,隔年九月。 由於DAY_OF_MONTH在 9GregorianCalendar< 月時 不可能是 31>,強加法規則 2</strong> 將 設DAY_OF_MONTH為 30,這是最接近的值。 雖然欄位較小,但 DAY_OF_WEEK 不依規則2調整,因為當月份在某個 GregorianCalendar區域變化時,預期會改變。
<強>roll(f, delta)</強>能delta在不改變較大場的情況下增加場。f 這等同於經過以下調整後的呼叫 add(f, delta) :
<引用>
<強力>擲骰規則</強力>。 較大欄位在通話後保持不變。 較大的場代表較大的時間單位。
DAY_OF_MONTH 是比 更大的域 HOUR。
</區塊引用>
<em>範例/em<:參見>java.util.GregorianCalendar#roll(int, int)。
<強力>使用模型</強。> 為了激勵 和 add()的行為roll(),考慮一個包含月份、日、年增減按鈕的使用者介面元件,以及底層GregorianCalendar的 。 如果介面顯示 1999 年 1 月 31 日,使用者按下月份增量按鈕,應該顯示什麼? 若底層實作使用 set(),則可能為 1999 年 3 月 3 日。 更好的結果是1999年2月28日。 此外,如果使用者再次按下月份增量按鈕,應該會顯示為 1999 年 3 月 31 日,而非 1999 年 3 月 28 日。 透過儲存原始日期並根據add()roll()是否應影響較大欄位使用或 ,使用者介面可依大多數使用者直覺預期的行為呈現。
在 1.1 版本中加入。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
建構函式
| 名稱 | Description |
|---|---|
| Calendar() |
建立一個包含預設時區和預設 |
| Calendar(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。 |
| Calendar(TimeZone, Locale) |
建立包含指定時區與地點的日曆。 |
欄位
| 名稱 | Description |
|---|---|
| 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 |
已淘汰.
欄位編號 |
屬性
| 名稱 | Description |
|---|---|
| AreFieldsSet |
如果 |
| AvailableCalendarTypes |
回傳一個不可修改的可修改 |
| CalendarType |
回傳此 |
| Class |
回傳此 |
| Fields |
此日曆欄位為目前設定的時間值。 |
| FirstDayOfWeek |
知道一週的第一天是什麼;e. |
| Handle |
底層 Android 實例的帳號。 (繼承來源 Object) |
| Instance |
會用預設的時區和地區來設定行事曆。 |
| IsTimeSet |
若 則 為真,則 的 |
| IsWeekDateSupported |
回傳是否 |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
該 |
| JniPeerMembers |
該 |
| Lenient |
說明日期/時間的解釋是否應該寬鬆。 |
| MinimalDaysInFirstWeek |
了解學年第一週所需的最低天數;e. |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| ThresholdClass |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
| ThresholdType |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
| Time |
回傳 |
| TimeInMillis |
以毫秒為單位回傳此日曆的時間值。 |
| TimeZone |
會知道時區。 -或- 設定時區值為指定時區。 |
| WeeksInWeekYear |
回傳該週的週數,該年由 |
| WeekYear |
回傳由此 |
方法
| 名稱 | Description |
|---|---|
| Add(CalendarField, Int32) |
根據日曆規則,為指定日曆欄位加減指定時間。 |
| After(Object) |
回傳此是否 |
| Before(Object) |
回傳此 |
| Clear() |
設定所有日曆欄位值及時間值(與「#Epoch」>紀元相差的毫秒),該時間值為 |
| Clear(CalendarField) |
設定給定的曆法欄位值及時間>值(與「#Epoch」 |
| Clone() |
建立並回傳此物件的副本。 |
| CompareTo(Calendar) |
比較兩個>物件所代表的時間值(與「#Epoch」 |
| Complete() |
填補日曆欄位中未設定的欄位。 |
| ComputeFields() |
將當前毫秒時間值 |
| ComputeTime() |
將目前的日曆欄位值 |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
該 |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
該 |
| Equals(Object) |
該 |
| 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, Locale) |
會拿到一份標示指定時區和地點的行事曆。 |
| GetInstance(TimeZone) |
會用指定的時區和預設地點取得行事曆。 |
| 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, Int32, Int32, Int32) |
設定欄位 |
| Set(Int32, Int32, Int32, Int32, Int32) |
設定日曆欄位 |
| Set(Int32, Int32, Int32) |
設定日曆欄位 |
| SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
該 |
| SetWeekDate(Int32, Int32, Int32) |
用給定的日期指定符來設定日期 |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToInstant() |
該 |
| ToString() |
回傳物件的字串表示。 (繼承來源 Object) |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| Wait() |
導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。 (繼承來源 Object) |
| Wait(Int64, Int32) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wait(Int64) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
明確介面實作
| 名稱 | Description |
|---|---|
| IComparable.CompareTo(Object) |
該 |
| IJavaPeerable.Disposed() |
該 |
| IJavaPeerable.Finalized() |
該 |
| IJavaPeerable.JniObjectReferenceControlBlock |
該 |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
該 |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
該 |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
該 |
| IJavaPeerable.UnregisterFromRuntime() |
該 |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
該 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |