語言

DateIntervalFormat 類別

定義

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

[Android.Runtime.Register("android/icu/text/DateIntervalFormat", ApiSince=24, DoNotGenerateAcw=true)]
public class DateIntervalFormat : Android.Icu.Text.UFormat
[<Android.Runtime.Register("android/icu/text/DateIntervalFormat", ApiSince=24, DoNotGenerateAcw=true)>]
type DateIntervalFormat = class
    inherit UFormat
繼承
DateIntervalFormat
屬性

備註

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。 只支援格式化。 不支援解析。

日期間隔指的是從一個日期到另一個日期,例如從「2008年1月11日」到「2008年1月18日」。 我們引入了 class DateInterval 來表示它。 DateInterval 是一對 UDate,自 1970 年 1 月 1 日 24:00 GMT 起,為標準毫秒。

DateIntervalFormat 將 DateInterval 格式化成盡可能簡潔的文字。 例如,從「2008年1月11日」到「1月18日」的日期區間格式。 英文版的「2008年1月11-18日」。 它會將文字解析成 DateInterval,雖然一開始不支援解析。

在日期時間模式中沒有結構性資訊。 對於任何標點符號和字串文字,出現在日期時間模式中,我們不知道它只是分隔符、前綴還是後綴。 因此,若沒有這些資訊,就很難用演算法產生子模式(或超級模式)。 所以,格式化 DateInterval 是以模式為驅動的。 它與 SimpleDateFormat 的格式非常相似。 我們引入了 DateIntervalInfo 類別來儲存日期間隔模式,類似 SimpleDateFormat 中的日期時間模式。

邏輯上,區間模式是從(骨架,the_largest_different_calendar_field)到(date_interval_pattern)的映射。

骨架 <ol><li> 只保留場面圖案字母,忽略圖案中其他部分,如空格、標點符號和字串文字。 <李> 藏起了田的順序。 <李> 可能會隱藏田地的花紋字母長度。

對於非數字日曆欄位,字母長度很重要,例如 MMM、MMMM 和 MMMMM;EEE 和 EEEE,並且尊重該領域的字母長度。

對於數字日曆欄位,如 M 或 MM、d 或 dd、yy 或 yyyy,欄位模式長度會被忽略,最佳匹配(以日期時間模式定義)會不尊重欄位模式字母長度(骨架)。 </ol>

我們支援的區間格式化日曆欄位包括:年、月、日期、星期、am-pm、時、小時、分鐘和秒(但目前尚無針對秒數骨架的具體 intervalFormat 資料)。 這些日曆欄位可依以下順序定義:年份 >月份 >日期 >小時(以一天計)超過;分鐘 >第二

兩個曆法之間最大的不同曆法欄位,依上述順序是第一個不同的曆法欄位。

例如:「2007年1月10日」與「2008年2月20日」之間最大的日曆欄位是年份。

對於其他日曆欄位,則不支援緊湊區間格式。 而間隔格式則會退回到備用模式,主要是「{date0} - {date1}」。

DateFormat 中有一組預先定義的靜態骨架字串,在各區域的資源檔案中,這些預定義骨架也有預先定義的區間模式。 例如,對於骨架YEAR_ABBR_MONTH_DAY,即「yMMMd」,在en_US中,如果date1與date2之間最大的不同日曆欄位是「year」,則日期間隔模式為「MMM d, yyyy - MMM d, yyyy」,例如「Jan 10, 2007 - January 10, 2008」。 如果 date1 與 date2 之間最大的不同日曆欄位是「month」,則日期間隔模式為「MMM d - MMM d, yyyy」,例如「January 10 - Feb 10, 2007」。 如果 date1 與 date2 之間最大的不同日曆欄位是「day」,則日期間隔模式為「MMM d-d, yyyy」,例如「January 10-20, 2007」。

對於日期骨架,當年份、月份或日期不同時,區間模式會在資源檔案中定義。 對於時間骨架,當上午/下午、整點或分鐘不同時,間隔模式會在資源檔案中定義。

如果在某個地點的 DateIntervalInfo 中找不到骨架,也就是說該骨架的區間模式在資源檔案中沒有定義,那麼該區間模式會退回到資源檔案中定義的區間「備回」模式。 若未定義區間「回備」模式,預設回退為「{date0} - {data1}」。

對於日期與時間的組合,genearte 區間模式的規則是:<ol><li> 當年份、月份或日期不同時,會回落回 fallback interval 模式,這通常是將兩個原始表達式以分隔符連接起來。例如,從「2007年1月10日上午10:10」到「2007年1月11日上午10:10」的間隔模式為「Jan 10, 2007 年 10:10 am - 2007 年 1 月 11 日 10:10am」 <> 否則,請先列出日期,接著是時間範圍表達式。 例如,從「2007年1月10日 10:10 am」到「2007年1月10日 11:10am」的間隔模式為「2007年1月10日 10:10 am - 11:10am」 </ol>

若兩個日期相同,則區間模式即為單一日期模式。 例如,從「Jan 10, 2007」到「Jan 10, 2007」的區間模式為「Jan 10, 2007」。

或者如果兩個日期之間的呈現欄位值完全相同,則區間模式即為單一日期模式。 例如,若使用者只請求年份與月份,從「2007年1月10日」到「2007年1月20日」的區間模式為「2007年1月」。

DateIntervalFormat 需要以下資訊以正確格式化:時區、日曆類型、模式、日期格式符號及日期間隔模式。 它可以用多種方式實例化: <ol><li> 用預設或指定地點加上給定的骨架來建立實例。 鼓勵使用者以此方式建立日期區間格式化器,並使用預先定義的骨架巨集,如YEAR_NUM_MONTH,包含行事曆欄位與格式樣式。 </li><li> 用預設或指定地點加上給定的骨架和給定的 DateIntervalInfo 建立一個實例。 這種工廠方法適合想要提供自己音程模式的強大用戶。 地點提供時區、行事曆及格式符號資訊。 局部加骨架提供完整的模式資訊。 DateIntervalInfo 提供日期間隔的模式。 </li></ol>

對於日曆田地模式字母,如 G、Y、M、D、A、H、H、M、S 等。DateIntervalFormat 使用與 DateTime 格式相同的語法。

程式碼範例:一般用法

// the date interval object which the DateIntervalFormat formats on
              // and parses into
              DateInterval dtInterval = new DateInterval(1000*3600*24L, 1000*3600*24*2L);
              DateIntervalFormat dtIntervalFmt = DateIntervalFormat.getInstance(
                      DateFormat.YEAR_MONTH_DAY, new Locale("en", "GB", ""));
              StringBuffer result = new StringBuffer("");
              FieldPosition pos = new FieldPosition(-1);
              // formatting
              dtIntervalFmt.format(dtInterval, result, pos);
              assertEquals("interval", "1–2 January 1970", result.toString());

程式碼範例:給想要使用自己音程模式的強大使用者

import android.icu.text.DateIntervalInfo;
                import android.icu.text.DateIntervalFormat;
                ....................

                // Get DateIntervalFormat instance using default locale
                DateIntervalFormat dtitvfmt = DateIntervalFormat.getInstance(YEAR_MONTH_DAY);

                // Create an empty DateIntervalInfo object, which does not have any interval patterns inside.
                dtitvinf = new DateIntervalInfo();

                // a series of set interval patterns.
                // Only ERA, YEAR, MONTH, DATE,  DAY_OF_MONTH, DAY_OF_WEEK, AM_PM,  HOUR, HOUR_OF_DAY,
                MINUTE, SECOND and MILLISECOND are supported.
                dtitvinf.setIntervalPattern("yMMMd", Calendar.YEAR, "'y ~ y'");
                dtitvinf.setIntervalPattern("yMMMd", Calendar.MONTH, "yyyy 'diff' MMM d - MMM d");
                dtitvinf.setIntervalPattern("yMMMd", Calendar.DATE, "yyyy MMM d ~ d");
                dtitvinf.setIntervalPattern("yMMMd", Calendar.HOUR_OF_DAY, "yyyy MMM d HH:mm ~ HH:mm");

                // Set fallback interval pattern. Fallback pattern is used when interval pattern is not found.
                // If the fall-back pattern is not set,  falls back to {date0} - {date1} if interval pattern is not found.
                dtitvinf.setFallbackIntervalPattern("{0} - {1}");

                // Set above DateIntervalInfo object as the interval patterns of date interval formatter
                dtitvfmt.setDateIntervalInfo(dtitvinf);

                // Prepare to format
                pos = new FieldPosition(0);
                str = new StringBuffer("");

                // The 2 calendars should be equivalent, otherwise,  IllegalArgumentException will be thrown by format()
                Calendar fromCalendar = (Calendar) dtfmt.getCalendar().clone();
                Calendar toCalendar = (Calendar) dtfmt.getCalendar().clone();
                fromCalendar.setTimeInMillis(....);
                toCalendar.setTimeInMillis(...);

                //Formatting given 2 calendars
                dtitvfmt.format(fromCalendar, toCalendar, str, pos);


<h3>同步</h3>

DateIntervalFormat 的格式方法可同時從多個執行緒使用。 改變 DateIntervalFormat 物件狀態的函式(設定器)不得與其他函式同時使用。

Java 文件 android.icu.text.DateIntervalFormat。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

建構函式

名稱 Description
DateIntervalFormat(IntPtr, JniHandleOwnership)

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

屬性

名稱 Description
Class

回傳此 Object的執行時類別。

(繼承來源 Object)
DateFormat

取得日期格式化器

DateIntervalInfo

取得日期、時間間隔的模式。 -或- 設定日期、時間間隔、模式。

Handle

底層 Android 實例的帳號。

(繼承來源 Object)
JniIdentityHashCode

取得由互通執行時指派給此 Java 對等端的身份雜湊碼。

(繼承來源 Object)
JniManagedPeerState

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

(繼承來源 JavaObject)
JniPeerMembers

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

PeerReference

取得這個 Java 節點的 JNI 物件參考。

(繼承來源 Object)
ThresholdClass

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

ThresholdType

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

TimeZone

取得 TimeZone -或- 設定這個 DateIntervalFormat 物件所用日曆的 TimeZone。

方法

名稱 Description
Clone()

建立並回傳此物件的副本。

(繼承來源 _Format)
Construct(JniObjectReference, JniObjectReferenceOptions)

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

(繼承來源 JavaObject)
Dispose()

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
Dispose(Boolean)

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
DisposeUnlessReferenced()

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

(繼承來源 JavaObject)
Equals(Object)

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

(繼承來源 JavaObject)
Equals(Object)

表示是否有其他物體「等同」於此物。

(繼承來源 Object)
Format(Calendar, Calendar, StringBuffer, FieldPosition)

格式化 2 日曆以產生字串。

Format(DateInterval, StringBuffer, FieldPosition)

格式化 DateInterval 以產生字串。

Format(ITemporal, ITemporal, StringBuffer, FieldPosition)

格式化兩個 Temporals 以產生一個字串。

Format(Object, StringBuffer, FieldPosition)

格式化物件以產生字串。

Format(Object)

格式化物件以產生字串。

(繼承來源 _Format)
FormatToCharacterIterator(Object)

格式化物件產生 AttributedCharacterIterator。

(繼承來源 _Format)
FormatToValue(Calendar, Calendar)

格式化 2 個行事曆以產生格式化日期間隔。

FormatToValue(DateInterval)

將 DateInterval 格式化為 FormattedDateInterval。

FormatToValue(ITemporal, ITemporal)

格式化兩個時序以產生格式化日期區間。

GetContext(DisplayContext+Type)

[加護病房]取得格式化器的 DisplayContext 值,針對指定的 DisplayContext.Type,例如 CAPITALIZATION。

GetHashCode()

回傳物件的雜湊碼值。

(繼承來源 Object)
GetInstance(String, DateIntervalInfo)

從骨架 DateIntervalInfo 和預設 FORMAT 位置建立一個 DateIntervalFormat。

GetInstance(String, Locale, DateIntervalInfo)

從骨架、DateIntervalInfo 和給定的位置建立一個 DateIntervalFormat。

GetInstance(String, Locale)

從骨架和指定地點構建一個DateIntervalFormat。

GetInstance(String, ULocale, DateIntervalInfo)

從骨架、DateIntervalInfo 和給定的位置建立一個 DateIntervalFormat。

GetInstance(String, ULocale)

從骨架和指定地點構建一個DateIntervalFormat。

GetInstance(String)

從骨架和預設 FORMAT 地點構建一個 DateIntervalFormat。

JavaFinalize()
已淘汰.

當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。

(繼承來源 Object)
Notify()

喚醒一個正在該物件監視器上等待的執行緒。

(繼承來源 Object)
NotifyAll()

喚醒所有等待該物件監視器的執行緒。

(繼承來源 Object)
ParseObject(String, ParsePosition)
已淘汰.

不支援日期間隔解析。

ParseObject(String)

解析給定字串開頭的文字以產生物件。

(繼承來源 _Format)
SetContext(DisplayContext)

<strong>[icu]</strong> 在格式化器中設定特定的 DisplayContext 值,例如 CAPITALIZATION_FOR_STANDALONE。

SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

(繼承來源 JavaObject)
ToArray<T>()

從這個 Java 陣列包裝器建立一個受管理陣列。

(繼承來源 Object)
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
IJavaPeerable.Disposed()

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

(繼承來源 JavaObject)
IJavaPeerable.Finalized()

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

(繼承來源 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

(繼承來源 JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

(繼承來源 JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

(繼承來源 JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

(繼承來源 JavaObject)
IJavaPeerable.UnregisterFromRuntime()

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

(繼承來源 _Format)

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於