问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于Calendar类的解释

发布网友 发布时间:2022-04-24 03:09

我来回答

4个回答

热心网友 时间:2023-08-28 15:24

HOUR_OF_DAY 一天里的第几个小时,晚上12点开始.
if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY))判断当前是否是晚上12点

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

该类还为实现包范围外的具体日历系统提供了其他字段和方法。这些字段和方法被定义为 protected。

与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:

Calendar rightNow = Calendar.getInstance();
Calendar 对象能够生成为特定语言和日历风格实现日期-时间格式化所需的所有日历字段值,例如,日语-格里高里历,日语-传统日历。Calendar 定义了某些日历字段返回值的范围,以及这些值的含义。例如,对于所有日历,日历系统第一个月的值是 MONTH == JANUARY。其他值是由具体子类(例如 ERA)定义的。有关此内容的细节,请参阅每个字段的文档和子类文档。

获得并设置日历字段值
可以通过调用 set 方法来设置日历字段值。在需要计算时间值(距历元所经过的毫秒)或日历字段值之前,不会解释 Calendar 中的所有字段值设置。调用 get、getTimeInMillis、getTime、add 和 roll 涉及此类计算。

宽松性
Calendar 有两种解释日历字段的模式,即 lenient 和 non-lenient。当 Calendar 处于 lenient 模式时,它可接受比它所生成的日历字段范围更大范围内的值。当 Calendar 重新计算日历字段值,以便由 get() 返回这些值时,所有日历字段都被标准化。例如,lenient 模式下的 GregorianCalendar 将 MONTH == JANUARY、DAY_OF_MONTH == 32 解释为 February 1。

当 Calendar 处于 non-lenient 模式时,如果其日历字段中存在任何不一致性,它都会抛出一个异常。例如,GregorianCalendar 总是在 1 与月份的长度之间生成 DAY_OF_MONTH 值。如果已经设置了任何超出范围的字段值,那么在计算时间或日历字段值时,处于 non-lenient 模式下的 GregorianCalendar 会抛出一个异常。

第一个星期
Calendar 使用两个参数定义了特定于语言环境的 7 天制星期:星期的第一天和第一个星期中的最小一天(从 1 到 7)。这些数字取自构造 Calendar 时的语言环境资源数据。还可以通过为其设置值的方法来显式地指定它们。
在设置或获得 WEEK_OF_MONTH 或 WEEK_OF_YEAR 字段时,Calendar 必须确定一个月或一年的第一个星期,以此作为参考点。一个月或一年的第一个星期被确定为开始于 getFirstDayOfWeek() 的最早七天,它最少包含那一个月或一年的 getMinimalDaysInFirstWeek() 天数。第一个星期之前的各星期编号为 ...、-1、0;之后的星期编号为 2、3、...。注意,get() 返回的标准化编号方式可能有所不同。例如,特定 Calendar 子类可能将某一年第 1 个星期之前的那个星期指定为前一年的第 n 个星期。

日历字段解析
在计算日历字段中的日期和时间时,可能没有足够的信息用于计算(例如只有年和月,但没有日),或者可能有不一致的信息( 例如 "Tuesday, July 15, 1996"(格林威治时间)——实际上,1996 年 7 月 15 日是星期一 )。Calendar 将分析日历字段值,以便用以下方式确定日期和时间。
如果日历字段值中存在任何冲突,则 Calendar 将为最近设置的日历字段提供优先权。以下是日历字段的默认组合。将使用由最近设置的单个字段所确定的最近组合。

对于日期字段:

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
对于时间字段:
HOUR_OF_DAY
AM_PM + HOUR
如果在选定的字段组合中,还有尚未设置值的任一日历字段,那么 Calendar 将使用其默认值。每个字段的默认值可能依据具体的日历系统而有所不同。例如,在 GregorianCalendar 中,字段的默认值与历元起始部分的字段值相同:即 YEAR = 1970、MONTH = JANUARY、DAY_OF_MONTH = 1,等等。

注: 对于某些特别时间的解释可能会有某些歧义,可以用下列方式解决:

23:59 是一天中的最后一分钟,而 00:00 是下一天的第一分钟。因此,1999 年 12 月 31 日的 23:59 < 2000 年 1 月 1 日的 00:00。
尽管从历史上看不够精确,但午夜也属于 "am",,中午属于 "pm",所以在同一天,12:00 am ( 午夜 ) < 12:01 am,12:00 pm ( 中午 ) < 12:01 pm。
日期或时间格式字符串不是日历定义的一部分,因为在运行时,用户必须能够修改或重写它们。可以使用 DateFormat 格式化日期。

字段操作
可以使用三种方法更改日历字段:set()、add() 和 roll()。

set(f, value) 将日历字段 f 更改为 value。此外,它设置了一个内部成员变量,以指示日历字段 f 已经被更改。尽管日历字段 f 是立即更改的,但是直到下次调用 get()、getTime()、getTimeInMillis()、add() 或 roll() 时才会重新计算日历的时间值(以毫秒为单位)。因此,多次调用 set() 不会触发多次不必要的计算。使用 set() 更改日历字段的结果是,其他日历字段也可能发生更改,这取决于日历字段、日历字段值和日历系统。此外,在重新计算日历字段之后,get(f) 没必要通过调用 set 方法返回 value 集合。具体细节是通过具体的日历类确定的。

示例:假定 GregorianCalendar 最初被设置为 1999 年 8 月 31 日。调用 set(Calendar.MONTH, Calendar.SEPTEMBER) 将该日期设置为 1999 年 9 月 31 日。如果随后调用 getTime(),那么这是分析 1999 年 10 月 1 日的一个暂时内部表示。但是,在调用 getTime() 之前调用 set(Calendar.DAY_OF_MONTH, 30) 会将该日期设置为 1999 年 9 月 30 日,因为在调用 set() 之后没有发生重新计算。

add(f, delta) 将 delta 添加到 f 字段中。这等同于调用 set(f, get(f) + delta),但要带以下两个调整:

Add 规则 1。调用后 f 字段的值减去调用前 f 字段的值等于 delta,以字段 f 中发生的任何溢出为模。溢出发生在字段值超出其范围时,结果,下一个更大的字段会递增或递减,并将字段值调整回其范围内。

Add 规则 2。如果期望某一个更小的字段是不变的,但让它等于以前的值是不可能的,因为在字段 f 发生更改之后,或者在出现其他约束之后,比如时区偏移量发生更改,它的最大值和最小值也在发生更改,然后它的值被调整为尽量接近于所期望的值。更小的字段表示一个更小的时间单元。HOUR 是一个比 DAY_OF_MONTH 小的字段。对于不期望是不变字段的更小字段,无需进行任何调整。日历系统会确定期望不变的那些字段。

热心网友 时间:2023-08-28 15:25

private static final int C_SCHEDULE_HOUR = 0;
定义一个常量C_SCHEDULE_HOUR = 0;
Calendar cal = Calendar.getInstance();
用Calendar的getInstance()得到一个Calendar类的实例,就是Calendar对象,然后赋值给cal
cal.get(Calendar.HOUR_OF_DAY) 返回就是当天里的第几个小时
if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) {
//do...
}
所以就if判断的就是 那一个时刻 是不凌晨12 点!

热心网友 时间:2023-08-28 15:25

cal.get(Calendar.HOUR_OF_DAY)) 返回现在是几点(时针读数)。
这个if就是判断现在时间的时针读数是不是0点,即时间是不是在0:00 - 0:59:59 之间。

我估计if里面的代码是做一个什么任务,在凌晨0点(没有人使用系统时)启动执行这项任务。

热心网友 时间:2023-08-28 15:26

说了多了也没用
cal.get(Calendar.HOUR_OF_DAY) 返回就是当天里的第几个小时
所以就if判断的就是 那一个时刻 是不凌晨12 点!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
这种情况需要准备什么样的证据才能保证维权成功,关于个人知识产权方面... 侵犯著作权罪成立的条件是什么 网站被抄袭,怎么办?官网网页内容抄袭引发的法律问题 版权申请哪家性价比高? 著作权侵权损害如何赔偿 瓷砖划痕怎么处理方法 地板砖划痕怎么去除十种方法 关于梦幻西游转区的一些问题。懂的进。 茶叶泡水发苦的原因茶叶泡水发苦是什么原因 ...那又怎么样?从化学角度讲不也是那种分子起的作 JAVA中日历类日期类应怎样去使用 Java中解释一些日历类(CalendarClass)中的重要方法? 日历(历本)注册商标属于哪一类? Java中日历类(CalendarClass)的用途? 有哪些日历的种类 食堂不锈钢餐具油脂清洗方法 不锈钢厨具如何清洗? 不锈钢厨具外表黑色垢怎样除 不锈钢厨具如何去污? 如何去掉厨具顽固污渍? 不锈钢厨具怎么清洁? 不锈钢沾了油烟怎么擦才干净 炒菜后不锈钢厨具上粘了油渍怎么清洗? 广州南站是不是就是广州火车站?谢谢了,大神帮忙啊 如何在百度文库里面下载文章? 在百度文库里怎样下载文章? 广州的高铁站和广州火车站是不是同一个 广州南站高铁和广州火车站一样么? 怎样从百度文库下载文章?不用交费就可以下载的啊? 坐火车到广州 到达站是广州南站还是广州火车站? 日历(年历)注册商标属于哪一类? 机械表日历种类内构有哪几种呢? 时光与日历的种类 苏打粉可以用来干什么 java 关于Date类和Calendar类 小苏打可以洗碗吗? 微信怎么把男友放进黑名单,但是聊天记录千万不要删除 java中的calendar类主要有那些方法 java关于日期处理,有哪些类? 有什么比较好的日历类管理软件?能够同步iCloud等日历 微信里好友拉黑怎么让对方看不到聊天记录? Java日历程序中两个类是啥意思CalendarFrame,CalendarBean, 学历低适合学习java吗? java中GregorianCalendar类与Calendar类的关系与区别? 我比较想学习java技术,但是就是自己的学历不够高能学吗? 如何在Java中获取日历类(CalendarClass)的实例? 怎样恢复在微信上加入黑名单的人,还能看到以前的聊天记录吗 学习Java开发,对于学历要求高吗 知委会里日历商标注册属于哪一类? 把对方加微信黑名单还可以聊天吗