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
在Java的日期范围内迭代,得到奇怪的结果_Java_Date - Fatal编程技术网

在Java的日期范围内迭代,得到奇怪的结果

在Java的日期范围内迭代,得到奇怪的结果,java,date,Java,Date,我想在不使用库的情况下遍历日期范围(即Joda)。 我写了那个简单的代码,但得到了奇怪的结果。例如,对于日期2010-01-01 2010-02-01,它打印: 1.0.2010 2.0.2010 3.0.2010 4.0.2010 5.0.2010 6.0.2010 7.0.2010 8.0.2010 9.0.2010 10.0.2010 11.0.2010 12.0.2010 13.0.2010 14.0.2010 15.0.2010 16.0.2010 17.0.2010 18.0.201

我想在不使用库的情况下遍历日期范围(即Joda)。 我写了那个简单的代码,但得到了奇怪的结果。例如,对于日期2010-01-01 2010-02-01,它打印:

1.0.2010
2.0.2010
3.0.2010
4.0.2010
5.0.2010
6.0.2010
7.0.2010
8.0.2010
9.0.2010
10.0.2010
11.0.2010
12.0.2010
13.0.2010
14.0.2010
15.0.2010
16.0.2010
17.0.2010
18.0.2010
19.0.2010
20.0.2010
21.0.2010
22.0.2010
23.0.2010
24.0.2010
25.0.2010
26.0.2010
27.0.2010
28.0.2010
29.0.2010
30.0.2010
31.0.2010
1.1.2010
该问题也存在于日期:2010-05-01 2010-06-01(打印日期为4月而不是5月)。有什么帮助吗

import java.util.Calendar;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.text.DateFormatSymbols;
import java.util.Locale;
import java.util.Map;
import java.util.HashMap;
import javax.swing.JOptionPane;
import java.util.GregorianCalendar;

class test
{
    public static void main(String[] args) {

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date startDate = null, endDate = null;

        try 
        {
            startDate = dateFormat.parse("2010-01-01"); // or 2010-05-01
            endDate = dateFormat.parse("2010-02-01"); // or 2010-06-01
        } 
        catch (ParseException pe) 
        {
            System.exit(-1);
        }

        Calendar start = Calendar.getInstance();
        start.setTime(startDate);
        Calendar end = Calendar.getInstance();
        end.setTime(endDate);

        for (Date date = start.getTime(); !start.after(end); start.add(Calendar.DATE, 1), date = start.getTime()) 
        {
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            int year = cal.get(Calendar.YEAR);
            int month = cal.get(Calendar.MONTH);
            int day = cal.get(Calendar.DAY_OF_MONTH);
            int dow = cal.get(Calendar.DAY_OF_WEEK);  
            System.out.printf("%d.%d.%d\n", day, month, year);
        }
    }
}

库返回从0开始的月份。。十一,

你的循环也可以这样简化。请注意,这可能不是最佳解决方案

while(!start.after(end)) 
{
    int year = start.get(Calendar.YEAR);
    int month = start.get(Calendar.MONTH) + 1;
    int day = start.get(Calendar.DAY_OF_MONTH);
    System.out.printf("%d.%d.%d\n", day, month, year);        
    start.add(Calendar.DATE, 1);
}

如果有更好的替代方案,为什么要使用日历?月份从0开始索引。0->1月,1->2月….只是因为还没有人提到它-Calendar类的JavaDoc会告诉您这一点。如果你看到你不期望从图书馆看到的行为,这应该是你的选择——也许这些文件很糟糕。当人们回答问题时,看着医生,然后是一个链接到海报可能已经浏览过但没有得到的东西,这真的很烦人。