DateIntervalFormat 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
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 是一個用於以語言無關方式格式化與解析日期區間的類別。 只支援格式化。 不支援解析。
日期間隔指的是從一個日期到另一個日期,例如從「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 |
回傳此 |
| 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) |
格式化兩個 |
| Format(Object, StringBuffer, FieldPosition) |
格式化物件以產生字串。 |
| Format(Object) |
格式化物件以產生字串。 (繼承來源 _Format) |
| FormatToCharacterIterator(Object) |
格式化物件產生 |
| FormatToValue(Calendar, Calendar) |
格式化 2 個行事曆以產生格式化日期間隔。 |
| FormatToValue(DateInterval) |
將 DateInterval 格式化為 FormattedDateInterval。 |
| FormatToValue(ITemporal, ITemporal) |
格式化兩個時序以產生格式化日期區間。 |
| GetContext(DisplayContext+Type) |
[加護病房]取得格式化器的 DisplayContext 值,針對指定的 DisplayContext.Type,例如 CAPITALIZATION。 |
| GetHashCode() |
回傳物件的雜湊碼值。 (繼承來源 Object) |
| GetInstance(String, DateIntervalInfo) |
從骨架 DateIntervalInfo 和預設 |
| GetInstance(String, Locale, DateIntervalInfo) |
從骨架、DateIntervalInfo 和給定的位置建立一個 DateIntervalFormat。 |
| GetInstance(String, Locale) |
從骨架和指定地點構建一個DateIntervalFormat。 |
| GetInstance(String, ULocale, DateIntervalInfo) |
從骨架、DateIntervalInfo 和給定的位置建立一個 DateIntervalFormat。 |
| GetInstance(String, ULocale) |
從骨架和指定地點構建一個DateIntervalFormat。 |
| GetInstance(String) |
從骨架和預設 |
| 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) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
DateIntervalFormat 是一個用於以語言無關方式格式化與解析日期區間的類別。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |