Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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/5/date/2.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
如何从calendar java获取未来七天的日期_Java_Date_Calendar - Fatal编程技术网

如何从calendar java获取未来七天的日期

如何从calendar java获取未来七天的日期,java,date,calendar,Java,Date,Calendar,所以,我有一个应用程序,用户可以选择一个日期 他可以选择的最长日期是从当前日期起最多7天 现在,我只显示当前月份的日历。如果当前日期为7月30日,则必须向用户提供选择8月6日之前日期的选项,并且我还必须处理年份发生变化的情况,即12月30日,15日为当前日期,+7天为1月6日,16日。 下面是我用来获取当月所有天数的代码。我应该怎么做才能让它在上面的场景中工作呢 注意:我总是有当前日期可用 代码: public class Cals { public static voi

所以,我有一个应用程序,用户可以选择一个日期

他可以选择的最长日期是从当前日期起最多7天

现在,我只显示当前月份的日历。如果当前日期为7月30日,则必须向用户提供选择8月6日之前日期的选项,并且我还必须处理年份发生变化的情况,即12月30日,15日为当前日期,+7天为1月6日,16日。

下面是我用来获取当月所有天数的代码。我应该怎么做才能让它在上面的场景中工作呢

注意:我总是有当前日期可用

代码:

   public class Cals {

        public static void main(String args[])
        {
            Calendar start = Calendar.getInstance();
            start.set(Calendar.DAY_OF_MONTH, Calendar.getInstance()
                    .getActualMinimum(Calendar.DAY_OF_MONTH));
            Calendar end = Calendar.getInstance();
            end.set(Calendar.DAY_OF_MONTH,
                    Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH));
            Calendar now = Calendar.getInstance();
            SimpleDateFormat sdf = new SimpleDateFormat("EEE d MMM");

            for (Date dt = start.getTime(); !start.after(end); start.add(
                    Calendar.DATE, 1), dt = start.getTime()) {

                System.out.println(sdf.format(dt));
            }
        }
    }
Wed 1 Jul
Thu 2 Jul
Fri 3 Jul
Sat 4 Jul
Sun 5 Jul
Mon 6 Jul
Tue 7 Jul
Wed 8 Jul
Thu 9 Jul
Fri 10 Jul
Sat 11 Jul
Sun 12 Jul
Mon 13 Jul
Tue 14 Jul
Wed 15 Jul
Thu 16 Jul
Fri 17 Jul
Sat 18 Jul
Sun 19 Jul
Mon 20 Jul
Tue 21 Jul
Wed 22 Jul
Thu 23 Jul
Fri 24 Jul
Sat 25 Jul
Sun 26 Jul
Mon 27 Jul
Tue 28 Jul
Wed 29 Jul
Thu 30 Jul
Fri 31 Jul
Wed 1 Jul
Thu 2 Jul
Fri 3 Jul
Sat 4 Jul
Sun 5 Jul
Mon 6 Jul
Tue 7 Jul
Wed 8 Jul
Thu 9 Jul
Fri 10 Jul
Sat 11 Jul
Sun 12 Jul
Mon 13 Jul
Tue 14 Jul
Wed 15 Jul
Thu 16 Jul
Fri 17 Jul
Sat 18 Jul
Sun 19 Jul
Mon 20 Jul
Tue 21 Jul
Wed 22 Jul
Thu 23 Jul
Fri 24 Jul
Sat 25 Jul
Sun 26 Jul
Mon 27 Jul
Tue 28 Jul
Wed 29 Jul
Thu 30 Jul
Fri 31 Jul
Sat 1 Aug
Sun 2 Aug
Mon 3 Aug
Tue 4 Aug
Wed 5 Aug
Thu 6 Aug
当前O/p:

   public class Cals {

        public static void main(String args[])
        {
            Calendar start = Calendar.getInstance();
            start.set(Calendar.DAY_OF_MONTH, Calendar.getInstance()
                    .getActualMinimum(Calendar.DAY_OF_MONTH));
            Calendar end = Calendar.getInstance();
            end.set(Calendar.DAY_OF_MONTH,
                    Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH));
            Calendar now = Calendar.getInstance();
            SimpleDateFormat sdf = new SimpleDateFormat("EEE d MMM");

            for (Date dt = start.getTime(); !start.after(end); start.add(
                    Calendar.DATE, 1), dt = start.getTime()) {

                System.out.println(sdf.format(dt));
            }
        }
    }
Wed 1 Jul
Thu 2 Jul
Fri 3 Jul
Sat 4 Jul
Sun 5 Jul
Mon 6 Jul
Tue 7 Jul
Wed 8 Jul
Thu 9 Jul
Fri 10 Jul
Sat 11 Jul
Sun 12 Jul
Mon 13 Jul
Tue 14 Jul
Wed 15 Jul
Thu 16 Jul
Fri 17 Jul
Sat 18 Jul
Sun 19 Jul
Mon 20 Jul
Tue 21 Jul
Wed 22 Jul
Thu 23 Jul
Fri 24 Jul
Sat 25 Jul
Sun 26 Jul
Mon 27 Jul
Tue 28 Jul
Wed 29 Jul
Thu 30 Jul
Fri 31 Jul
Wed 1 Jul
Thu 2 Jul
Fri 3 Jul
Sat 4 Jul
Sun 5 Jul
Mon 6 Jul
Tue 7 Jul
Wed 8 Jul
Thu 9 Jul
Fri 10 Jul
Sat 11 Jul
Sun 12 Jul
Mon 13 Jul
Tue 14 Jul
Wed 15 Jul
Thu 16 Jul
Fri 17 Jul
Sat 18 Jul
Sun 19 Jul
Mon 20 Jul
Tue 21 Jul
Wed 22 Jul
Thu 23 Jul
Fri 24 Jul
Sat 25 Jul
Sun 26 Jul
Mon 27 Jul
Tue 28 Jul
Wed 29 Jul
Thu 30 Jul
Fri 31 Jul
Sat 1 Aug
Sun 2 Aug
Mon 3 Aug
Tue 4 Aug
Wed 5 Aug
Thu 6 Aug
预期O/p:

   public class Cals {

        public static void main(String args[])
        {
            Calendar start = Calendar.getInstance();
            start.set(Calendar.DAY_OF_MONTH, Calendar.getInstance()
                    .getActualMinimum(Calendar.DAY_OF_MONTH));
            Calendar end = Calendar.getInstance();
            end.set(Calendar.DAY_OF_MONTH,
                    Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH));
            Calendar now = Calendar.getInstance();
            SimpleDateFormat sdf = new SimpleDateFormat("EEE d MMM");

            for (Date dt = start.getTime(); !start.after(end); start.add(
                    Calendar.DATE, 1), dt = start.getTime()) {

                System.out.println(sdf.format(dt));
            }
        }
    }
Wed 1 Jul
Thu 2 Jul
Fri 3 Jul
Sat 4 Jul
Sun 5 Jul
Mon 6 Jul
Tue 7 Jul
Wed 8 Jul
Thu 9 Jul
Fri 10 Jul
Sat 11 Jul
Sun 12 Jul
Mon 13 Jul
Tue 14 Jul
Wed 15 Jul
Thu 16 Jul
Fri 17 Jul
Sat 18 Jul
Sun 19 Jul
Mon 20 Jul
Tue 21 Jul
Wed 22 Jul
Thu 23 Jul
Fri 24 Jul
Sat 25 Jul
Sun 26 Jul
Mon 27 Jul
Tue 28 Jul
Wed 29 Jul
Thu 30 Jul
Fri 31 Jul
Wed 1 Jul
Thu 2 Jul
Fri 3 Jul
Sat 4 Jul
Sun 5 Jul
Mon 6 Jul
Tue 7 Jul
Wed 8 Jul
Thu 9 Jul
Fri 10 Jul
Sat 11 Jul
Sun 12 Jul
Mon 13 Jul
Tue 14 Jul
Wed 15 Jul
Thu 16 Jul
Fri 17 Jul
Sat 18 Jul
Sun 19 Jul
Mon 20 Jul
Tue 21 Jul
Wed 22 Jul
Thu 23 Jul
Fri 24 Jul
Sat 25 Jul
Sun 26 Jul
Mon 27 Jul
Tue 28 Jul
Wed 29 Jul
Thu 30 Jul
Fri 31 Jul
Sat 1 Aug
Sun 2 Aug
Mon 3 Aug
Tue 4 Aug
Wed 5 Aug
Thu 6 Aug

只需在
结束时添加7天
日历

Calendar end = Calendar.getInstance();
end.set(Calendar.DAY_OF_MONTH,
                Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH));
end.add(Calendar.DATE, 7);
日历
将自动处理滚动

新输出

Wed 1 Jul
Thu 2 Jul
Fri 3 Jul
Sat 4 Jul
Sun 5 Jul
Mon 6 Jul
Tue 7 Jul
Wed 8 Jul
Thu 9 Jul
Fri 10 Jul
Sat 11 Jul
Sun 12 Jul
Mon 13 Jul
Tue 14 Jul
Wed 15 Jul
Thu 16 Jul
Fri 17 Jul
Sat 18 Jul
Sun 19 Jul
Mon 20 Jul
Tue 21 Jul
Wed 22 Jul
Thu 23 Jul
Fri 24 Jul
Sat 25 Jul
Sun 26 Jul
Mon 27 Jul
Tue 28 Jul
Wed 29 Jul
Thu 30 Jul
Fri 31 Jul
Sat 1 Aug
Sun 2 Aug
Mon 3 Aug
Tue 4 Aug
Wed 5 Aug
Thu 6 Aug
Fri 7 Aug
日历
也能够处理年份滚动,例如

Calendar start = Calendar.getInstance();
start.set(2015, Calendar.DECEMBER, 25);
start.set(Calendar.DAY_OF_MONTH, Calendar.getInstance()
                .getActualMinimum(Calendar.DAY_OF_MONTH));
Calendar end = Calendar.getInstance();
end.setTime(start.getTime());
end.set(Calendar.DAY_OF_MONTH,
                Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH));
end.add(Calendar.DATE, 7);

Calendar now = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("EEE d MMM yyyy");

for (Date dt = start.getTime(); !start.after(end); start.add(
                Calendar.DATE, 1), dt = start.getTime()) {

    System.out.println(sdf.format(dt));
}
在这里,我将开始日期设置为12月,现在输出为

Tue 1 Dec 2015
Wed 2 Dec 2015
Thu 3 Dec 2015
Fri 4 Dec 2015
Sat 5 Dec 2015
Sun 6 Dec 2015
Mon 7 Dec 2015
Tue 8 Dec 2015
Wed 9 Dec 2015
Thu 10 Dec 2015
Fri 11 Dec 2015
Sat 12 Dec 2015
Sun 13 Dec 2015
Mon 14 Dec 2015
Tue 15 Dec 2015
Wed 16 Dec 2015
Thu 17 Dec 2015
Fri 18 Dec 2015
Sat 19 Dec 2015
Sun 20 Dec 2015
Mon 21 Dec 2015
Tue 22 Dec 2015
Wed 23 Dec 2015
Thu 24 Dec 2015
Fri 25 Dec 2015
Sat 26 Dec 2015
Sun 27 Dec 2015
Mon 28 Dec 2015
Tue 29 Dec 2015
Wed 30 Dec 2015
Thu 31 Dec 2015
Fri 1 Jan 2016
Sat 2 Jan 2016
Sun 3 Jan 2016
Mon 4 Jan 2016
Tue 5 Jan 2016
Wed 6 Jan 2016
Thu 7 Jan 2016
欢迎来到2016年:)

我还鼓励您在
日历

对象上使用Java8的时间API或Joda时间,而不是字符串
Calendar end = Calendar.getInstance();
end.set(Calendar.DAY_OF_MONTH,
                Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH));
end.add(Calendar.DATE, 7);
使用对象来表示日期,而不是依赖字符串。仅为向用户演示而生成字符串,但在内部作为对象跟踪数据

java.time.LocalDate
该问题和其他答案使用了麻烦的旧遗留日期时间类。避开它们。现在被java.time类取代

LocalDate
该类表示一个仅限日期的值,不包含一天中的时间和时区

时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,法国巴黎午夜过后几分钟是新的一天,而魁北克山仍然是“昨天”

ZoneId z = ZoneId.of( “America/Montreal” );
LocalDate today = LocalDate.now( z );
打电话获得本月的第一天

获取比今天晚一周的日期

LocalDate weekLaterThanToday = today.plusWeeks( 1 );
收集从当前月的第一个
到今天的第三个
周之间的所有可能日期
。请注意,通常使用半开放方法跟踪时间跨度是有意义的,其中开始是包含的,结束是独占的。因此,我们不会为您的目的收集
LocalDate
对象,即您后天的第7天

我们可以将收集的初始容量设置为时间跨度内的天数。使用枚举计算天数

int countDays = ChronoUnit.DAYS.between( firstOfCurrentMonth , weekLaterThanToday ) ;
List<LocalDate> dates = new ArrayList<>( countDays );
LocalDate ld = firstOfCurrentMonth;
while ( ld.isBefore( weekLaterThanToday ) ) {
    dates.add( ld );
    // Prepare for next loop.
    ld = ld.plusDays( 1 ); // Handles intelligently end-of-month, Leap Year, end-of-year, and so on.
}
循环
LocalDate
对象,要求每个对象生成其值的字符串表示形式

for( LocalDate ld : dates ) {
    String output = ld.format( f );
}
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如
java.util.date
.Calendar
,&
java.text.SimpleDateFormat

该项目现已启动,建议迁移到java.time

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释

大部分java.time功能都在中向后移植到java 6和7,并进一步适应于中(请参阅)


该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如
间隔
年周
年季度
,等等。

在执行循环之前添加(Calendar.DATE,7)
?确定。这很简单,但这给了我额外的一天,即8月7日。情况总是这样。如果你在
结束时
日历中添加7,那么是的,你可以添加6,而不是满足你的要求。太棒了!简单的解决方案。我花了很多时间在
日历上,我更喜欢Joda time或Java 8的time API,但这就是我;)。很高兴它能帮上忙;)你好除了下个月接下来的7天之外,我还想添加上个月的所有天数。如何才能达到同样的效果?从
日历中减去一个月,将其日期设置为
1
,然后循环直到结束。。。