检查date()是否是星期一? java的

时间:2012-08-22 19:50:00

标签: java date

有没有办法检查java Date对象是否是星期一?我看到你可以使用Calendar对象,但是约会?如果改变星期一的索引,我也会使用美国东部的日期和时间

5 个答案:

答案 0 :(得分:22)

这样的事情会起作用:

Calendar cal = Calendar.getInstance();
cal.setTime(theDate);
boolean monday = cal.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY;

答案 1 :(得分:9)

您可以使用Calendar对象。

使用setTime(date)

将日期设置为日历对象

示例:

calObj.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY

编辑:正如Jon Skeet建议的那样,您需要将TimeZone设置为Calendar对象,以确保它适用于时区。

答案 2 :(得分:5)

如果没有两条额外的信息,这个问题就没有意义:时区和日历系统。

Date对象只代表一个时刻。它恰好是在我的时区的格里高利历中的星期三 - 但对于我以东的一些人来说,它已经是星期四了。在其他日历系统中,甚至可能没有“星期一”等概念。

日历系统部分可能不是问题,但需要确定您感兴趣的时区。

然后,您可以创建一个Calendar对象并同时设置时区和即时代表 - 或者更好的是,您可以使用Joda Time这是很多更好的日期/ time API。你仍然需要考虑相同的问题,但你的代码会更清晰。

答案 3 :(得分:3)

您应该使用Calendar对象进行这些检查。日期具有弱时区支持。在一个时区中,此日期可以是星期一,而在另一个时区,它仍然是星期日。

答案 4 :(得分:1)

java.time

java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*

另外,下面引用的是来自 home page of Joda-Time 的通知:

<块引用>

请注意,从 Java SE 8 开始,要求用户迁移到 java.time (JSR-310) - JDK 的核心部分,取代了该项目。

使用 java.time(现代日期时间 API)的解决方案:

使用 Instant 表示一个时刻:

Instant instant = Instant.now();
System.out.println(instant); // A sample output: 2021-07-03T09:07:37.984Z

Instant 表示 UTC 中时间线上的一个瞬时点。输出中的 Z 是零时区偏移的 timezone designator。它代表祖鲁语并指定 Etc/UTC 时区(时区偏移为 +00:00 小时)。

但是,如果您有 java.util.Date 的对象,请将其转换为 Instant 例如

Date date = new Date(); // A sample date
Instant instant = date.toInstant();

Instant 转换为 ZonedDateTime,代表您所在时区中的日期-时间,例如

ZonedDateTime zdt = instant.atZone(ZoneId.of("America/New_York"));

检查日期时间是否在星期一,例如

System.out.println(zdt.getDayOfWeek() == DayOfWeek.SUNDAY);

演示:

import static java.time.DayOfWeek.SUNDAY;

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Main {
    public static void main(String[] args) {
        Instant instant = Instant.now();

        ZonedDateTime zdt = instant.atZone(ZoneId.of("America/New_York"));

        System.out.println(zdt.getDayOfWeek() == SUNDAY);
    }
}

输出:

false

ONLINE DEMO

Trail: Date Time 了解有关现代 Date-Time API 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project