有没有办法检查java Date
对象是否是星期一?我看到你可以使用Calendar
对象,但是约会?如果改变星期一的索引,我也会使用美国东部的日期和时间
答案 0 :(得分:22)
这样的事情会起作用:
Calendar cal = Calendar.getInstance();
cal.setTime(theDate);
boolean monday = cal.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY;
答案 1 :(得分:9)
您可以使用Calendar
对象。
示例:
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.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
从 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 desugaring 和 How to use ThreeTenABP in Android Project。