【问题标题】:how to identify the week from current date in java如何在java中识别当前日期的星期
【发布时间】:2015-10-11 18:52:23
【问题描述】:

我想在 java 中使用当前日期来识别整个星期的日期(从星期日到星期六)。

例如:今天是星期二 - 这意味着我需要星期二、星期一和星期日的日期。

如果当天是星期三 - 那么我需要从星期日到星期三的日期。

如何在java中实现这个逻辑?

我可以从当前日期获取星期的开始日期,但我不知道如何从星期开始日期获取剩余的日期。有没有可用的 java 实用程序?

【问题讨论】:

  • 所以在您的开始周日期中添加一天,直到您想要的那一天
  • 看看CalendarsetWeekDate()getFirstDayOfWeek()

标签: java date


【解决方案1】:

作为参考,用于制定输出的当前日期是 2015 年 7 月 22 日星期三 (22/07/2015)

Java 8

LocalDate ld = LocalDate.now();
LocalDate sunday = ld.minusDays(ld.getDayOfWeek().getValue());
LocalDate tommorrow = ld.plusDays(1);
LocalDate date = sunday;
while (date.isBefore(tommorrow)) {
    System.out.println(date);
    date = date.plusDays(1);
}

打印

2015-07-19
2015-07-20
2015-07-21
2015-07-22

作为替代方案

(这基本上适用于所有其他提到的 API)你可以简单地从今天开始倒退......

LocalDate date = LocalDate.now();
do {
    System.out.println(date);
    date = date.minusDays(1);
} while (date.getDayOfWeek() != DayOfWeek.SATURDAY);

打印

2015-07-22
2015-07-21
2015-07-20
2015-07-19

乔达时间

LocalDate now = LocalDate.now();
LocalDate sunday = now.minusDays(5).withDayOfWeek(DateTimeConstants.SUNDAY);
LocalDate tommorrow = now.plusDays(1);
LocalDate date = sunday;
while (date.isBefore(tommorrow)) {
    System.out.println(date);
    date = date.plusDays(1);
}

打印

2015-07-19
2015-07-20
2015-07-21
2015-07-22

日历

作为最后的手段。但请记住,Calendar 带有时间信息,因此使用 beforeafterequals 可能并不总是按照您的想法进行操作...

Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.SUNDAY);
cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);

Calendar today = Calendar.getInstance();

while (cal.before(today)) {
    System.out.println(cal.getTime());
    cal.add(Calendar.DATE, 1);
}

打印

Sun Jul 19 15:01:49 EST 2015
Mon Jul 20 15:01:49 EST 2015
Tue Jul 21 15:01:49 EST 2015
Wed Jul 22 15:01:49 EST 2015

【讨论】:

  • 从未意识到可以循环LocalDate。这很酷。
  • @EddieB 这是旧的Calendardays 的遗留想法;)
  • 感谢您的解决方案!有帮助!
【解决方案2】:

我想在 java 中使用当前日期来识别整个星期的日期(从星期日到星期六)。

这应该可以解决您的问题,您可以根据自己的情况进一步修改。

Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
System.out.println("Date " + c.getTime());
c.add(Calendar.DATE, +1);
System.out.println(c.getTime());

希望对你有帮助

【讨论】:

  • 我认为您需要c.setFirstDayOfWeek(Calendar.SUNDAY),否则c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY) 将在星期天不是一周的第一天的语言环境中提前日期。
  • 是的,您是对的,如果情况需要,我们需要设置第一天。但是正如用户明确提到的SundayCurrentDayOfWeek。我做到了。
【解决方案3】:

这很容易使用 Java 8。但是,请注意,iso-8601 标准将 Monday 表示为一周的第一天...See the JavaDocs...所以要实现您的要求,您只需找到 @987654323 @ 作为基本情况...

DayOfWeek 是一个枚举,代表一周中的 7 天 - 周一、周二、周三、周四、周五、周六和周日。

除了文本枚举名称之外,每周的每一天都有一个 int 值。 int 值遵循 ISO-8601 标准,从 1(星期一)到 7(星期日)。建议应用程序使用 enum 而不是 int 值以确保代码清晰。

/**
* @author Edward Beckett :: <Edward@EdwardBeckett.com>
* @since :: 7/22/2015
*/
public class WeekOfToday{

public static void main( String[] args ) {

    Integer dayOfWeek = LocalDate.now().getDayOfWeek().compareTo( DayOfWeek.MONDAY ) ;
    LocalDate startOfWeek =  LocalDate.now().minusDays( dayOfWeek );
    LocalDate endOfWeek = LocalDate.now().plusDays( DayOfWeek.SUNDAY.getValue() - dayOfWeek - 1 );
    }
}

输出

Start of Week : 2015-07-20
End of Week : 2015-07-26

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    相关资源
    最近更新 更多