12

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

4

5 回答 5

30

像这样的东西会起作用:

Calendar cal = Calendar.getInstance();
cal.setTime(theDate);
boolean monday = cal.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY;
于 2012-08-22T19:54:38.487 回答
10

您可以使用Calendar对象。

使用setTime(date)将日期设置为日历对象

例子:

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

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

于 2012-08-22T19:51:28.197 回答
5

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

一个Date对象只代表一个瞬间。在我所在的时区,它恰好是公历中的星期三——但对于我东边的一些人来说,已经是星期四了。在其他日历系统中,甚至可能没有“星期一”等这样的概念。

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

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

于 2012-08-22T19:53:27.320 回答
3

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

于 2012-08-22T19:54:34.613 回答
1

java.time

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

另外,下面引用的是来自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

An代表UTCInstant时间线上的一个瞬时点。输出中的 是零时区偏移的时区指示符。它代表 Zulu 并指定时区(时区偏移量为小时)。ZEtc/UTC+00:00

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

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

转换InstantZonedDateTime在您的时区中表示日期时间,例如

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了解有关现代日期时间 API 的更多信息。


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

于 2021-07-03T09:14:43.007 回答