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 格林尼治时间 (>公历) 。
类还提供用于在包外部实现具体日历系统的其他字段和方法。 这些字段和方法定义为 protected
。
与其他区域设置相关的类一样, Calendar
提供类方法 getInstance
,用于获取此类型通常有用的对象。 Calendar
的 getInstance
方法返回一个 Calendar
对象,其日历字段已使用当前日期和时间初始化: <blockquote>
Calendar rightNow = Calendar.getInstance();
</blockquote>
对象 Calendar
可以生成实现特定语言和日历样式的日期时间格式所需的所有日历字段值, (例如日语-公历、日语-传统) 。 Calendar
定义由某些日历字段返回的值范围及其含义。 例如,日历系统的第一个月具有所有日历的值 MONTH == JANUARY
。 其他值由具体子类定义,例如 ERA
。 有关详细信息,请参阅各个字段文档和子类文档。
<h2>获取和设置日历字段值</h2>
可以通过调用 set
方法设置日历字段值。 在 Calendar
需要计算其时间值) 或日历字段的值 (毫秒之前,不会解释在 中设置的任何字段值。 get
调用 、getTimeInMillis
、 getTime
add
和 roll
涉及此类计算。
<h3>宽大/<h3>
Calendar
有两种用于解释日历字段的模式: <em>lenient</em> 和 <em>non-lenient</em>。 Calendar
当 处于宽松模式时,它接受的日历字段值范围比它生成的要宽。 Calendar
当 重新计算由 返回get()
的日历字段值时,将规范化所有日历字段。 例如,宽松GregorianCalendar
将 解释MONTH == JANUARY
DAY_OF_MONTH == 32
为 2 月 1 日。
Calendar
当 处于非宽松模式时,如果日历字段中有任何不一致,则会引发异常。 例如, GregorianCalendar
始终生成 DAY_OF_MONTH
介于 1 和月份长度之间的值。 如果已设置任何范围外字段值,则非宽松 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>注意:</strong> 在某些奇数时间的解释中存在一些可能的歧义,可通过以下方式解决: <ol><li> 23:59 是一天的最后一分钟,00:00 是下一天的第一分钟。 因此,1999年12月31日23:59 <:2000 年 1 月 1 日 00:00 <2000年1月1日00:01。
<li> 虽然历史上并不精确,但午夜也属于“am”,中午属于“pm”,因此在同一天,凌晨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
方法设置的 。 具体内容由具体的日历类确定。
<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()
不会发生重新计算。
<strong>add(f, delta)
</strong> 将 添加到 delta
字段 f
。 这相当于调用 set(f, get(f) + delta)
两个调整:
<blockquote>
<strong>添加规则 1</strong>。 调用后的字段 f
值减去调用前字段 f
的值为 delta
,与字段 f
中发生的任何溢出进行修改。 当字段值超出其范围,因此,下一个较大的字段递增或递减,并且字段值调整回其范围时,会发生溢出。
<strong>添加规则 2</strong>。 如果较小的字段预期为固定字段,但由于更改字段或其他约束(如时区偏移量更改)后 f
,其最小值或最大值的变化而无法与其先前的值相等,则其值将调整为尽可能接近其预期值。 较小的字段表示较小的时间单位。 HOUR
是比 DAY_OF_MONTH
较小的字段。 不会对预期不会固定的较小字段进行调整。 日历系统确定哪些字段应是固定的。
</blockquote>
此外,与 不同 set()
, add()
强制立即重新计算日历的毫秒数和所有字段。
<em>示例</em>:考虑 GregorianCalendar
最初设置为 1999 年 8 月 31 日。 调用 add(Calendar.MONTH, 13)
会将日历设置为 2000 年 9 月 30 日。 <strong>Add rule 1</strong> 将 MONTH
字段设置为 9 月,因为将 13 个月添加到 8 月会给出明年 9 月。 由于 DAY_OF_MONTH
在 9 月 GregorianCalendar
中不能为 31, <强>加法则 2</strong> 将 设置为 DAY_OF_MONTH
30,这是最接近的可能值。 虽然它是一个较小的字段, DAY_OF_WEEK
但不会由规则 2 进行调整,因为 当 中的 GregorianCalendar
月份更改时,它预期会更改。
<强>roll(f, delta)
</强> 添加到 delta
字段 f
,而不更改较大的字段。 这等效于使用以下调整调用 add(f, delta)
:
<blockquote>
<strong>Roll rule</strong>。 调用后,较大的字段保持不变。 较大的字段表示较大的时间单位。 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 中添加。
此页面的部分内容是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的术语使用。
构造函数
Calendar() |
使用默认时区和默认 |
Calendar(IntPtr, JniHandleOwnership) |
创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。 |
Calendar(TimeZone, Locale) |
构造具有指定时区和区域设置的日历。 |
字段
AllStyles |
已过时.
一个样式说明符,用于 |
Am |
字段的值, |
AmPm |
已过时.
和 |
April |
|
August |
|
Date |
已过时.
和 |
DayOfMonth |
已过时.
和 |
DayOfWeek |
已过时.
和 |
DayOfWeekInMonth |
已过时.
和 |
DayOfYear |
已过时.
和 |
December |
|
DstOffset |
已过时.
和 |
Era |
已过时.
和 |
February |
|
FieldCount |
和 |
Friday |
指示 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 支持 Mono for Android 基础结构,不应直接从代码使用。 |
ThresholdType |
此 API 支持 Mono for Android 基础结构,不应直接从代码使用。 |
Time |
返回一个 |
TimeInMillis |
以毫秒为单位返回此日历的时间值。 |
TimeZone |
获取时区。 - 或 - 使用给定的时区值设置时区。 |
WeeksInWeekYear |
返回此 |
WeekYear |
返回由此 |
方法
Add(CalendarField, Int32) |
根据日历的规则,向给定日历字段添加或减去指定的时间量。 |
After(Object) |
返回此 |
Before(Object) |
返回此 |
Clear() |
设置所有日历字段值和时间值, (毫秒偏移量相对于此 |
Clear(CalendarField) |
设置给定的日历字段值和时间值, (毫秒偏移量相对于此 |
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 <通知/em> 或 <em>interrupted</em>。<> (继承自 Object) |
Wait(Int64) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> (继承自 Object) |
Wait(Int64, Int32) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/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) |
类 |