检查日历日期是星期天(Check if the Calendar date is a sunday)

2019-08-03 08:49发布

我试图找出如何使我的程序计算在一周周日的数目。

我曾尝试以下的事情:

if (date.DAY_OF_WEEK == date.SUNDAY) {
    System.out.println("Sunday!");
}

然而,这似乎并没有工作?

当我尝试System.out.Println the date.DAY_OF_WEEK我得到: 7

有谁知道我怎么能检查当前的日历日期是星期天?

更新更多信息

  1. 所有date.DAY_OF_WEEK的firt是一个日历对象!

  2. 我确信到日历对象设置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");
    }

Answer 1:

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 ,当然。



Answer 2:

注: 乔达时间 ,现在项目处于维护模式。 见这个答案 ,如果你不与遗留代码工作。


如果您有日期或时间了很多工作,你可能想使用尝试乔达时间 。

您的代码会是这个样子:

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();

将返回字符串“星期日”。



Answer 3:

TL;博士

boolean todayIsSunday = LocalDate.now( ZoneId.of( "America/Montreal" ) ).getDayOfWeek().equals( DayOfWeek.SUNDAY ) ;

java.time

其他答案已经过时。 现代的方法使用java.time类。

LocalDate

LocalDate类表示没有时间的天,没有一个日期,只值时区或偏移从-UTC 。

时区是在确定的日期是至关重要的。 对于任何给定的时刻,日期由区全球各地的变化。 例如,在午夜后几分钟法国巴黎是新的一天,同时还“昨天”在蒙特利尔魁北克 。

如果没有指定时区,JVM的隐式应用当前默认时区。 该默认可以在任何时刻改变运行时(!)期间,因此您的结果可能会有所不同。 最好明确指定所需/预期的时区作为参数。 如果关键,确认您的用户区域。

指定适当的时区名称 ,格式为Continent/Region ,如America/MontrealAfrica/Casablanca ,或Pacific/Auckland 。 切勿使用2-4个字母的缩写,如ESTIST ,因为它们不是真正的时区,不规范,甚至不是唯一的(!)。

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整个代码库,而不是一个单纯的整数对象,使你的代码更自我记录,确保有效的值,并提供类型安全 。 同上,用于YearYearMonth

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.DateCalendar ,和SimpleDateFormat

要了解更多信息,请参阅甲骨文教程 。 和搜索堆栈溢出了很多例子和解释。 规范是JSR 310 。

乔达-时间的项目,现在在维护模式 ,建议迁移到java.time类。

您可以直接与数据库交换java.time对象。 使用JDBC驱动程序与兼容JDBC 4.2或更高版本。 无需串,没有必要java.sql.*类。

从哪里获取java.time类?

  • 的Java SE 8Java SE的9Java SE的10Java SE的11 ,后来-具有捆绑实现标准Java API的一部分。
    • Java的9增加了一些小的功能和修复。
  • 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试验场。 您可以在这里找到一些有用的类,比如IntervalYearWeekYearQuarter ,和更多 。



文章来源: Check if the Calendar date is a sunday