太长不读
今天是星期六吗?
LocalDate.now( ZoneId.of( "America/Montreal" ) )
.getDayOfWeek()
.equals( DayOfWeek.SATURDAY )
详情
我是否正在正确地进行?
不是。您正在使用已被 java.time 类替代的麻烦的旧日期时间类。
另一个问题是隐式依赖默认时区。最好明确指定您想要的时区。时区确定日期,日期确定星期几,因此时区非常重要。
还有一个问题是您不必要地将 Calendar
转换为 Date
。但最好完全避免使用这些类。
DayOfWeek
DayOfWeek
枚举 定义了一周中每天的七个对象。
您应该在代码中传递这些对象,而不是字符串。请注意,在下面的代码中,我们根本不使用字符串。
请明确这些
DayOfWeek
对象并不是字符串。它们是真正的对象,提供了几种方法。这些方法包括
toString
,它生成一个硬编码的英文字符串,全部大写。方法
getDisplayName
会自动在各种人类语言中生成星期几的名称。
Java中的枚举比其他语言中通常看到的更加强大和实用。请参见
Oracle教程。
LocalDate
LocalDate
类代表了一个不带时区和时间的日期值。
时区在确定日期上非常重要。对于任何给定的时刻,日期因时区而变化。例如,在法国巴黎深夜过后几分钟就是新的一天,但在加拿大魁北克省蒙特利尔仍然是“昨天”。
请以大陆/地区
的格式指定正确的时区名称,例如America/Montreal
、Africa/Casablanca
或Pacific/Auckland
。不要使用3-4个字母的缩写,例如EST
或IST
,因为它们不是真正的时区,没有标准化,甚至不是唯一的!
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
today.toString(): 2017-02-27
查询 LocalDate
对象的 DayOfWeek
。
DayOfWeek dow = today.getDayOfWeek()
dow.toString(): 星期一
与目标星期几进行比较。
Boolean isTodaySaturday = dow.equals( DayOfWeek.SATURDAY );
isTodaySaturday.toString(): false
尝试这个 在IdeOne.com上的代码实例。
参考类似问题:如何在Java 8中添加天数时跳过周末?
关于java.time
java.time框架内置于Java 8及更高版本。这些类取代了旧的遗留日期时间类,例如java.util.Date
、Calendar
和SimpleDateFormat
。
Joda-Time项目现在处于维护模式,建议迁移到java.time类。
要了解更多,请参阅
Oracle教程。并搜索Stack Overflow获取许多示例和解释。规范是
JSR 310。
在哪里获取java.time类?
该
ThreeTen-Extra项目扩展了java.time的附加类。该项目是java.time可能未来添加的试验场。您可能会在此处找到一些有用的类,例如
Interval
,
YearWeek
,
YearQuarter
和
更多。
!
和||
以及其他逻辑运算符的操作数必须是boolean
类型。你不能仅仅否定一个String
! - Lew Bloch