Calendar 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
该Calendar类是一个抽象类,它提供用于在特定时间实例和一组#fields calendar fields(如YEAR、MONTH、DAY_OF_MONTHHOUR等)之间进行转换的方法,以及用于操作日历字段的方法,例如获取下周的日期。
[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_MONTHHOUR等)之间进行转换的方法,以及用于操作日历字段的方法,例如获取下周的日期。 时间的即时值可以表示为与“Epoch”><em>Epoch</em> 的偏移量,1970 年 1 月 1 日 00:00:00.000 GMT(公历)。
该类还提供用于在包外部实现具体日历系统的其他字段和方法。 这些字段和方法被定义为 protected。
与其他区分区域设置的类一样, Calendar 提供类方法, getInstance用于获取此类型的一般有用对象。
Calendar's getInstance 方法返回一个 Calendar 对象,其日历字段已使用当前日期和时间进行初始化: <blockquote>
Calendar rightNow = Calendar.getInstance();
</blockquote>
对象 Calendar 可以生成实现特定语言和日历样式的日期/时间格式所需的所有日历字段值(例如日语-公历,Japanese-Traditional)。
Calendar 定义某些日历字段返回的值范围及其含义。 例如,日历系统的第一个月具有所有日历的值 MONTH == JANUARY 。 其他值由具体子类定义,例如 ERA。 有关详细信息,请参阅单个字段文档和子类文档。
<h2>获取和设置日历字段值</h2>
可以通过调用 set 方法来设置日历字段值。 在需要计算其时间值(从 Epoch 开始的毫秒)或日历字段的值之前,将不会解释在一个 Calendar 字段中设置的任何字段值。
get调用 、getTimeInMillis调用getTimeadd和roll涉及此类计算。
<h3>宽大</h3>
Calendar 有两种用于解释日历字段的模式: <em>lenient</em> 和 <em>non-lenient</em>。 当处于 Calendar 宽松模式时,它接受的日历字段值范围比它生成的范围更广。
Calendar当重新计算日历字段值以供返回时get(),所有日历字段都会规范化。 例如,宽大解释GregorianCalendarMONTH == JANUARY为 DAY_OF_MONTH == 32 2 月 1 日。
当处于 Calendar 非宽松模式时,如果日历字段中存在任何不一致,则会引发异常。 例如,始终 GregorianCalendar 生成 DAY_OF_MONTH 介于 1 和月份长度之间的值。
GregorianCalendar如果未设置任何超出范围字段值,则计算其时间或日历字段值时引发异常。
<h3>“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 日)-- 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”>日期字段的时间: <块块>
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。
日期或时间格式字符串不是日历定义的一部分,因为这些字符串必须在运行时由用户修改或重写。 用于 DateFormat 设置日期的格式。
<h3>字段操作</h3>
可以使用三种方法更改日历字段:set()和add()roll()。
<强>set(f, value)</强>更改日历字段f。value 此外,它还设置一个内部成员变量,以指示日历字段 f 已更改。 虽然日历字段f会立即更改,但在下次调用、get()、getTime()getTimeInMillis()或add()进行调用roll()之前,不会重新计算日历的时间值(以毫秒为单位)。 因此,多个调用 set() 不会触发多个不必要的计算。 由于使用 set()更改日历字段,其他日历字段也可能更改,具体取决于日历字段、日历字段值和日历系统。 此外,get(f)在重新计算日历字段后,调用方法不一定返回设置valueset。 具体细节由具体日历类确定。
<em>示例</em>:请考虑 GregorianCalendar 最初设置为 1999 年 8 月 31 日。 调用 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) :
<blockquote>
<strong Add rule 1>/strong.<> 调用后的字段f值减去调用f之前的字段delta值,将修改字段中f发生的任何溢出。 当字段值超出其范围时发生溢出,因此,下一个较大的字段递增或递减,并将字段值调整回其范围。
<strong Add rule 2>/strong.<> 如果较小的字段预期为固定字段,但由于更改字段 f 后其最小值或最大值的变化或其他约束(如时区偏移更改),则其值将调整为尽可能接近其预期值,因此无法将其值相等。 较小的字段表示较小的时间单位。
HOUR 是一个比 DAY_OF_MONTH. 不会对预计不变的较小字段进行调整。 日历系统确定哪些字段应为固定字段。
</blockquote>
此外,与不同 set(), add() 强制立即重新计算日历的毫秒和所有字段。
<em>示例</em>:请考虑 GregorianCalendar 最初设置为 1999 年 8 月 31 日。 呼叫 add(Calendar.MONTH, 13) 将日历设置为 2000 年 9 月 30 日。
<强>添加规则 1</强> 将字段设置为 MONTH 9 月,自明年 8 月添加 13 个月以来,该字段将设置为 9 月。 由于 DAY_OF_MONTH 9 月不能为 GregorianCalendar31, <因此强>添加规则 2</strong> 将设置为 DAY_OF_MONTH 30(最接近的可能值)。 虽然它是一个较小的字段, DAY_OF_WEEK 但规则 2 不会进行调整,因为预计当月份在月份 GregorianCalendar更改时会更改。
<强>roll(f, delta)</强> 添加到 delta 字段 f ,而无需更改更大的字段。 这相当于使用以下调整进行调用 add(f, delta) :
<blockquote>
<强>滚动规则</强>。 调用后,较大的字段保持不变。 较大的字段表示更大的时间单位。
DAY_OF_MONTH 是一个大于 HOUR.
</blockquote>
<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 中添加。
本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。
构造函数
| 名称 | 说明 |
|---|---|
| Calendar() |
使用默认时区和默认 |
| Calendar(IntPtr, JniHandleOwnership) |
创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。 |
| 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 |
获取互操作运行时分配给此Java对等的标识哈希代码。 (继承自 Object) |
| JniManagedPeerState |
该 |
| JniPeerMembers |
该 |
| Lenient |
告知日期/时间解释是否宽松。 |
| MinimalDaysInFirstWeek |
获取一年中第一周所需的最短天数;e. |
| PeerReference |
获取此Java对等方的 JNI 对象引用。 (继承自 Object) |
| ThresholdClass |
此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。 |
| ThresholdType |
此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。 |
| Time |
返回一个 |
| TimeInMillis |
返回此日历的时间值(以毫秒为单位)。 |
| TimeZone |
获取时区。 - 或 - 使用给定时区值设置时区。 |
| WeeksInWeekYear |
返回此 |
| WeekYear |
返回由此 |
方法
| 名称 | 说明 |
|---|---|
| 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) |
将指定的 (signed) 金额添加到指定的日历字段,而不更改较大的字段。 |
| 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<interrupted>/em<。><> (继承自 Object) |
| Wait(Int64, Int32) |
使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted>/em<>,或直到经过一定数量的实时。 (继承自 Object) |
| Wait(Int64) |
使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted>/em<>,或直到经过一定数量的实时。 (继承自 Object) |
显式接口实现
| 名称 | 说明 |
|---|---|
| IComparable.CompareTo(Object) |
该 |
| IJavaPeerable.Disposed() |
该 |
| IJavaPeerable.Finalized() |
该 |
| IJavaPeerable.JniObjectReferenceControlBlock |
该 |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
该 |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
该 |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
该 |
| IJavaPeerable.UnregisterFromRuntime() |
该 |
扩展方法
| 名称 | 说明 |
|---|---|
| GetJniTypeName(IJavaPeerable) |
获取实例 |
| JavaAs<TResult>(IJavaPeerable) |
尝试强制 |
| JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
| JavaCast<TResult>(IJavaObject) |
该 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
尝试强制 |