我试图找出如何使我的程序计算在一周周日的数目。
我曾尝试以下的事情:
if (date.DAY_OF_WEEK == date.SUNDAY) {
System.out.println("Sunday!");
}
然而,这似乎并没有工作?
当我尝试System.out.Println the date.DAY_OF_WEEK
我得到: 7
有谁知道我怎么能检查当前的日历日期是星期天?
更新更多信息
所有date.DAY_OF_WEEK的firt是一个日历对象!
我确信到日历对象设置date
为周日
该系统绝版从哪里获得7是它返回到我,当我尝试运行date.DAY_OF_MONTH
即使当天将其设置为一个星期天
月2日更新亚历克斯
这或多或少是我的代码
Calendar startDate = Calendar.getInstance();
startDate.set(2012, 12, 02);
if (startDate.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
System.out.println("true");
}else {
System.out.println("FALSE");
}
Calendar cal = ...;
if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
System.out.println("Sunday!");
}
Calendar.DAY_OF_WEEK
总是等于7
无论在什么情况下的Calendar
您正在使用( 见这个链接 ),它是创造与使用恒定Calendar.get()
方法来检索正确的值。
这是调用Calendar.get(Calendar.DAY_OF_WEEK)
将返回星期的真实的一天。 此外,你会发现有用的值Calendar
类像Calendar.SUNDAY
为了(和其他日期和月份),你是在你的代码更加明确,避免类似错误JANUARY
等于0
。
编辑
就像我说的,在Calendar
类不包含供您使用的常量。 没有一个月数12
,他们在开始0
(见上文),所以DECEMBER
是月号11
在Java日期处理。
Calendar startDate = Calendar.getInstance();
startDate.set(2012, Calendar.DECEMBER, 02);
if (startDate.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
System.out.println("true");
} else {
System.out.println("FALSE");
}
将打印true
,当然。
注: 乔达时间 ,现在项目处于维护模式。 见这个答案 ,如果你不与遗留代码工作。
如果您有日期或时间了很多工作,你可能想使用尝试乔达时间 。
您的代码会是这个样子:
LocalDate startDate = new LocalDate(2012, 12, 2);
int day = startDate.dayOfWeek().get(); // gets the day of the week as integer
if (DateTimeConstants.SUNDAY == day) {
System.out.println("It's a Sunday!");
}
您也可以从文本字符串dayOfWeek()
String dayText = startDate.dayOfWeek().getAsText();
将返回字符串“星期日”。
TL;博士
boolean todayIsSunday = LocalDate.now( ZoneId.of( "America/Montreal" ) ).getDayOfWeek().equals( DayOfWeek.SUNDAY ) ;
java.time
其他答案已经过时。 现代的方法使用java.time类。
LocalDate
该LocalDate
类表示没有时间的天,没有一个日期,只值时区或偏移从-UTC 。
时区是在确定的日期是至关重要的。 对于任何给定的时刻,日期由区全球各地的变化。 例如,在午夜后几分钟法国巴黎是新的一天,同时还“昨天”在蒙特利尔魁北克 。
如果没有指定时区,JVM的隐式应用当前默认时区。 该默认可以在任何时刻改变运行时(!)期间,因此您的结果可能会有所不同。 最好明确指定所需/预期的时区作为参数。 如果关键,确认您的用户区域。
指定适当的时区名称 ,格式为Continent/Region
,如America/Montreal
, Africa/Casablanca
,或Pacific/Auckland
。 切勿使用2-4个字母的缩写,如EST
或IST
,因为它们不是真正的时区,不规范,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ;
如果你想使用JVM当前的默认时区,要求它和作为参数传递。 如果省略,代码变得暧昧阅读我们不知道做了肯定,如果你打算使用默认或者,如果你像这么多的程序员,不知道有问题的。
ZoneId z = ZoneId.systemDefault() ; // Get JVM’s current default time zone.
或指定的日期。 您可以通过多种设置月,与健全的编号1-12一月至十二月。
LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ; // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.
或者,更好,使用Month
枚举对象预先定义的,一个是一年中每个月。 提示:使用这些Month
整个代码库,而不是一个单纯的整数对象,使你的代码更自我记录,确保有效的值,并提供类型安全 。 同上,用于Year
和YearMonth
。
LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;
DayOfWeek
对于任何LocalDate
,你可以获取其日常的一周为DayOfWeek
对象。 该DayOfWeek
枚举自动实例7个对象,一个星期中的每一天。
boolean isSunday = ld.getDayOfWeek().equals( DayOfWeek.SUNDAY ) ;
每周一个星期天
算上在一周周日的数目。
这将是1,总是一个周日每周。
如果你的目标是找到下周日,使用TemporalAdjuster
定义TemporalAdjusters
类。
TemporalAdjuster ta = TemporalAdjusters.nextOrSame( DayOfWeek.SUNDAY ) ;
LocalDate nextOrSameSunday = ld.with( ta ) ;
关于java.time
该java.time框架是建立在Java 8和更高版本。 这些类取代麻烦的老传统日期时间类,如java.util.Date
, Calendar
,和SimpleDateFormat
。
要了解更多信息,请参阅甲骨文教程 。 和搜索堆栈溢出了很多例子和解释。 规范是JSR 310 。
该乔达-时间的项目,现在在维护模式 ,建议迁移到java.time类。
您可以直接与数据库交换java.time对象。 使用JDBC驱动程序与兼容JDBC 4.2或更高版本。 无需串,没有必要java.sql.*
类。
从哪里获取java.time类?
- 的Java SE 8 , Java SE的9 , Java SE的10 , Java SE的11 ,后来-具有捆绑实现标准Java API的一部分。
- Java SE 6中和Java SE 7中
- 大多数java.time功能后移植到Java 6和7 ThreeTen,反向移植 。
- Android的
- 后来版本的java.time类的Android束实现的。
- 对于较早的Android(<26),则ThreeTenABP项目适应ThreeTen-反向移植 (上面提到的)。 请参阅如何使用ThreeTenABP ... 。
该ThreeTen-额外项目与其他类扩展java.time。 该项目是为将来可能增加的java.time试验场。 您可以在这里找到一些有用的类,比如Interval
, YearWeek
, YearQuarter
,和更多 。