Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何计算每周的第一天和最后一天_Java_Calendar - Fatal编程技术网

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);

    }