Java-如何计算每周的第一天和最后一天
我正在尝试创建一个如下所示的每周日历: 我如何计算每个星期的日期?例如,本周是: 周一至周日Java-如何计算每周的第一天和最后一天,java,calendar,Java,Calendar,我正在尝试创建一个如下所示的每周日历: 我如何计算每个星期的日期?例如,本周是: 周一至周日 6月7日、6月8日、6月9日、6月10日、6月11日、6月12日、6月13日 对。利用乔达时间 如果您知道现在是哪一天(星期五)和当前日期(6月11日),您可以计算本周的其他日期。我建议您使用时间库。公历类有weekOfWeekyear和dayOfWeek方法。本周的第一天 Calendar c = Calendar.getInstance(); while (c.get(Calenda
6月7日、6月8日、6月9日、6月10日、6月11日、6月12日、6月13日 对。利用乔达时间
如果您知道现在是哪一天(星期五)和当前日期(6月11日),您可以计算本周的其他日期。我建议您使用时间库。公历类有weekOfWeekyear和dayOfWeek方法。本周的第一天
Calendar c = Calendar.getInstance();
while (c.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
c.add(Calendar.DATE, -1);
}
您正在寻找的算法(计算任何给定日期的星期几)是“泽勒同余”。下面是一个Java实现:
我想这正是你想要的:
// 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);
}
//将日历设置为当前日期和时间
Calendar c=Calendar.getInstance();
//将日历设置为当前周的星期一
c、 设置(Calendar.DAY\u OF_WEEK,Calendar.MONDAY);
//打印从星期一开始的当前星期的日期
DateFormat df=新的简化格式(“EEE dd/MM/yyyy”);
对于(int i=0;i<7;i++){
System.out.println(df.format(c.getTime());
c、 添加(日历日期,1);
}
您可以在此基础上进行构建:以下代码打印从现在起15周内每周的第一个和最后一个日期
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
for(int i=0; i<15; i++)
{
System.out.print("Start Date : " + c.getTime() + ", ");
c.add(Calendar.DAY_OF_WEEK, 6);
System.out.println("End Date : " + c.getTime());
c.add(Calendar.DAY_OF_WEEK, 1);
}
Calendar c=Calendar.getInstance();
c、 设置(Calendar.DAY\u OF_WEEK,Calendar.MONDAY);
对于(int i=0;i简单地设置星期的时间似乎不可靠。请考虑下面的简单代码:
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());
运行此程序的结果是:
Starting day: 2011-09-18
Last monday: 2011-09-19
First day of week: 2
换句话说,它在时间上向前迈进。对于德国地区,这确实不是预期的答案。请注意,日历正确地使用星期一作为一周的第一天(可能仅用于计算一年中的一周)。使用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);
}
localdatenow=LocalDate.now();
//确定国家(地区)特定的当前周第一天
DayOfWeek firstDayOfWeek=WeekFields.of(Locale.getDefault()).getFirstDayOfWeek();
LocalDate startOfCurrentWeek=now.with(TemporalAdjusters.PreviousorName(firstDayOfWeek));
//确定当前周的最后一天
DayOfWeek lastDayOfWeek=firstDayOfWeek.plus(6);//或-1
LocalDate endOfWeek=now.with(TemporalAdjusters.nextOrSame(lastDayOfWeek));
//打印当前星期的日期
LocalDate printDate=startOfCurrentWeek;
DateTimeFormatter formatter=模式的DateTimeFormatter.of(“EEE dd/MM/yyyy”);
对于(int i=0;i<7;i++){
System.out.println(printDate.format(格式化程序));
printDate=printDate.plusDays(1);
}
Java.time
使用java 8中内置的java.time
库:
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
您可以迭代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
我不明白问题出在哪里。试着改写问题。没有必要一天一天地回到星期一,你只需c.set(Calendar.day\u OF_WEEK,Calendar.Monday);
将日历设置为本周的星期一(见我的答案)。绝对不是,@Jesper。设置一周中的哪一天不一定向后移动。简单而优雅的解决方案!谢谢你这就是我想要的,如果我想要上一个按钮可以获取上周日期任何想法?类日历包含日期算术的方法。要将其向后移动一周(7天),请执行c.add(Calendar.date,-7);
,例如。非常感谢您的帮助。不要硬编码日历。星期一是一周的第一天,您应该使用日历#getFirstDayOfWeek()
相反,因为一周的范围取决于语言环境。但是,您的代码根本无法可靠地工作。请参阅下面的评论和解释。还有另一个实现@”。尽管如那篇文章中所述,您最好使用Calendar类-,它也可以用于获取一周的第一天-
Calendar startCal = Calendar.getInstance();
startCal.setTimeInMillis(startDate);
Calendar endCal = Calendar.getInstance();
endCal.setTimeInMillis(endDate);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMMM-yyyy");
while (startCal.before(endCal)) {
int weekNumber = startCal.get(Calendar.WEEK_OF_YEAR);
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
cal.set(Calendar.WEEK_OF_YEAR, weekNumber);
Date sunday = cal.getTime();
Log.d("sunday", "" + sdf.format(sunday));
cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
cal.set(Calendar.WEEK_OF_YEAR, weekNumber);
Date saturday = cal.getTime();
Log.d("saturday", "" + sdf.format(saturday));
weekNumber = weekNumber + 1;
startCal.set(Calendar.WEEK_OF_YEAR, weekNumber);
}