Java - 如何计算每周的第一天和最后一天

use*_*501 16 java calendar

我正在尝试创建一个如下所示的每周日历:http://dhtmlx.com/docs/products/dhtmlxScheduler/sample_basic.html

如何计算每周的日期?例如,本周是:


6月7日星期一 - 6月8日星期日,6月9日,6月10日,6月11日,6月12日

Jes*_*per 41

我想这可以做你想要的:

// Get calendar set to current date and time
Calendar c = Calendar.getInstance();

// Set the calendar to monday of the current week
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

// Print dates of the current week starting on Monday
DateFormat df = new SimpleDateFormat("EEE dd/MM/yyyy");
for (int i = 0; i < 7; i++) {
    System.out.println(df.format(c.getTime()));
    c.add(Calendar.DATE, 1);
}
Run Code Online (Sandbox Code Playgroud)

  • 而不是将Calendar.MONDAY硬编码为一周的第一天,而应使用`Calendar#getFirstDayOfWeek()`,因为一周的范围取决于语言环境. (15认同)
  • 但是,您的代码只是_不能正常工作_.请参阅下面的评论和http://stackoverflow.com/questions/6722542以获取解释. (2认同)

Nik*_*bak 8

本周的第一天.

    Calendar c = Calendar.getInstance();
    while (c.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
        c.add(Calendar.DATE, -1);
    }
Run Code Online (Sandbox Code Playgroud)

  • 绝对不是,@ Jesper.设置星期几并不一定会倒退. (4认同)

Gre*_*lis 8

使用Java 8中的新日期和时间API,您可以:

LocalDate now = LocalDate.now();

// determine country (Locale) specific first day of current week
DayOfWeek firstDayOfWeek = WeekFields.of(Locale.getDefault()).getFirstDayOfWeek();
LocalDate startOfCurrentWeek = now.with(TemporalAdjusters.previousOrSame(firstDayOfWeek));

// determine last day of current week
DayOfWeek lastDayOfWeek = firstDayOfWeek.plus(6); // or minus(1)
LocalDate endOfWeek = now.with(TemporalAdjusters.nextOrSame(lastDayOfWeek));

// Print the dates of the current week
LocalDate printDate = startOfCurrentWeek;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE dd/MM/yyyy");
for (int i=0; i < 7; i++) {
    System.out.println(printDate.format(formatter));
    printDate = printDate.plusDays(1);
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*fel 6

简单地设置星期几似乎不可靠.请考虑以下简单代码:

Calendar calendar = Calendar.getInstance(Locale.GERMANY);
calendar.set(2011, Calendar.SEPTEMBER, 18);
System.out.printf("Starting day: %tF%n", calendar);

calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.printf("Last monday: %tF%n", calendar);
System.out.printf("First day of week: %d%n", calendar.getFirstDayOfWeek());
Run Code Online (Sandbox Code Playgroud)

运行此程序的结果是:

Starting day: 2011-09-18
Last monday: 2011-09-19
First day of week: 2
Run Code Online (Sandbox Code Playgroud)

换句话说,它及时上升了.对于德国语言环境,这实际上不是预期的答案.请注意,日历正确地使用星期一作为一周的第一天(可能仅用于计算一年中的一周).


Prz*_*mek 5

Java.time

使用java.timeJava 8中内置的库:

import java.time.DayOfWeek;
import java.time.LocalDate;
import static java.time.temporal.TemporalAdjusters.previousOrSame;
import static java.time.temporal.TemporalAdjusters.nextOrSame;

LocalDate now = LocalDate.now(); # 2015-11-23
LocalDate first = now.with(previousOrSame(DayOfWeek.MONDAY)); # 2015-11-23
LocalDate last = now.with(nextOrSame(DayOfWeek.SUNDAY)); # 2015-11-29
Run Code Online (Sandbox Code Playgroud)

您可以迭代DayOfWeek.values()以获取当前所有工作日

DayOfWeek.values(); # Array(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY)
for (DayOfWeek day: DayOfWeek.values()) {
    System.out.print(first.with(nextOrSame(day)));
} # 2015-11-23, 2015-11-24, 2015-11-25, 2015-11-26, 2015-11-27, 2015-11-28, 2015-11-29
Run Code Online (Sandbox Code Playgroud)