Java新手日历类问题
需要帮助理解下面的测试代码。具体来说,我不明白calendar.set方法中的“11”和“12”代表什么?示例“openCal.set(11,openHrs)Java新手日历类问题,java,Java,需要帮助理解下面的测试代码。具体来说,我不明白calendar.set方法中的“11”和“12”代表什么?示例“openCal.set(11,openHrs) 这是一个完美的例子,说明了为什么我们应该避免 而不是set(11code应该看起来像set(日历.HOUR\u of_DAY) 而不是set(12code应该看起来像set(Calendar.MINUTE) 若你们看一看这个类的文档,你们会发现一些关于如何使用像 set(日历.月份,日历.九月) set(日历日,每月30日) 通过查看
这是一个完美的例子,说明了为什么我们应该避免 而不是
set(11
code应该看起来像set(日历.HOUR\u of_DAY
)而不是
set(12
code应该看起来像set(Calendar.MINUTE
)
若你们看一看这个类的文档,你们会发现一些关于如何使用像
set(日历.月份,日历.九月)
set(日历日,每月30日)
- 等于
->11
- 等于
->12
神奇数字
与以下字段关联
private static final String[] FIELD_NAME = {
"ERA", "YEAR", "MONTH", "WEEK_OF_YEAR", "WEEK_OF_MONTH", "DAY_OF_MONTH",
"DAY_OF_YEAR", "DAY_OF_WEEK", "DAY_OF_WEEK_IN_MONTH", "AM_PM", "HOUR",
"HOUR_OF_DAY", "MINUTE", "SECOND", "MILLISECOND", "ZONE_OFFSET",
"DST_OFFSET"
};
因此,在这种情况下,您可以看到,
11
是一天中的小时,12
是分钟,您在哪里看本教程?在具有两个参数的日历设置函数中,第一个参数是数据所在位置的索引,第二个是要设置的值。因此,从代码中可以看出,11是小时d 12表示分钟。文档位于。数字应替换为Calendar类中的常量,以使此代码更具可读性并能自动回答您的问题。Calendar
sget
和set
方法使用整数作为第一个参数,指示应分别检索的字段这可能看起来很奇怪,但是Java中的Calendar
比Enum
s旧(考虑到Java中与日期相关的类中的所有其他愚蠢之处,这一个是次要的)
正如其他人所指出的,唯一可接受的做法是使用日历中定义的常量(HOUR\u OF u DAY
等),但从语法上来说,[explate remove]程序员也可以使用数字文字(甚至是导致int
值的表达式)。tl
细节
这是正确的,应该被接受
避免遗留日期时间类
这些问题和答案已经过时了,使用的是麻烦的旧日期时间类,现在已经被java.time类取代
LocalTime
classe表示一天中没有日期和时区的时间
LocalTime opening = LocalTime.of( 7 , 30 );
LocalTime closing = LocalTime.of( 23 , 00 );
时区
确定一天中的当前时间需要一个时区。对于任何给定的时刻,一天中的时间(和日期)在全球范围内因区域而异
ZoneId z = ZoneId.of( "America/Montreal" );
LocalTime now = LocalTime.now( z );
比较
我们可以将LocalTime
对象与compareTo
、equals
和进行比较
在这个示例代码中,我们使用半开放的方法来定义时间跨度,其中开始是包含的,而结束是独占的。这种方法是合理的,并且通常使用。在所有代码中使用这种方法可以使逻辑更容易理解,并减少出错的可能性。因此,我们要求“当前时刻是否与开始时刻相同或晚于开始时刻,但也早于停止时刻?”。更简洁的说法是:
现在不早于开始,现在早于停止
你从哪里得到这些代码的?提示:避免使用java.util.Calendar和.Date类。它们是出了名的麻烦。使用java.time或Joda time。Joda time的DateTime类具有“with”“方法,如
withHourOfDay
。您也可以在API文档的部分中找到值。感谢大家。感谢快速、清晰的答案。因此我可以使用calendar.set(“HOUR\u of_DAY.”length(),9);奇怪的是,仍然更改Calendar.HOUR_OF_DAY字段……不仅有趣,您甚至可以在其他程序员发现您的代码后立即在www.thedailywtf.com上看到它。
LocalTime opening = LocalTime.of( 7 , 30 );
LocalTime closing = LocalTime.of( 23 , 00 );
ZoneId z = ZoneId.of( "America/Montreal" );
LocalTime now = LocalTime.now( z );
Boolean isOpenNow = ( ! now.isBefore( opening ) ) && now.isBefore( closing ) ;