Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_Date_Console - Fatal编程技术网

在java中打印两个日期之间的所有日期,特殊情况

在java中打印两个日期之间的所有日期,特殊情况,java,string,date,console,Java,String,Date,Console,我从控制台读取了格式为-yyyy-mm-dd的两个字符串,我想打印它们之间的天数。但是,当我试图打印结果时,出现了一个奇怪的错误 - Error:(12, 43) java: no suitable method found for between(java.util.Date,java.util.Date) method java.time.temporal.TemporalUnit.between(java.time.temporal.Temporal,java.time.tempo

我从控制台读取了格式为-
yyyy-mm-dd
的两个字符串,我想打印它们之间的天数。但是,当我试图打印结果时,出现了一个奇怪的错误

- Error:(12, 43) java: no suitable method found for between(java.util.Date,java.util.Date)
    method java.time.temporal.TemporalUnit.between(java.time.temporal.Temporal,java.time.temporal.Temporal) is not applicable
      (argument mismatch; java.util.Date cannot be converted to java.time.temporal.Temporal)
    method java.time.temporal.ChronoUnit.between(java.time.temporal.Temporal,java.time.temporal.Temporal) is not applicable
      (argument mismatch; java.util.Date cannot be converted to java.time.temporal.Temporal)
我不知道为什么

import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.Scanner;

public class Tester {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.nextLine(); // for example  - 2017-02-01
        String b = sc.nextLine(); // 2017-10-05
        Date d1 = new Date(String.format(a, "yyyy-mm-dd"));
        Date d2 = new Date(String.format(b, "yyyy-mm-dd"));
        System.out.println(ChronoUnit.DAYS.between(d1,d2));
    }
}
import java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.time.temporal.ChronoUnit;
导入java.util.ArrayList;
导入java.util.Calendar;
导入java.util.Date;
导入java.util.GregorianCalendar;
导入java.util.List;
导入java.util.Scanner;
公共类堆栈溢出{
公共静态void main(字符串[]args)引发异常{
扫描仪sc=新的扫描仪(System.in);
字符串a=sc.nextLine();//例如-2017-02-01
字符串b=sc.nextLine();//2017-10-05
List datesInRange=new ArrayList();
日期d1=新的简化格式(“yyyy-MM-dd”)。解析(a);
日期d2=新的简化格式(“yyyy-MM-dd”)。解析(b);
日历=新的公历日历();
日历设置时间(d1);
Calendar endCalendar=新的GregorianCalendar();
endCalendar.setTime(d2);
while(日历前(日历结束)){
日期结果=calendar.getTime();
datesInRange.add(结果);
calendar.add(calendar.DATE,1);
}
系统输出打印项次(日期范围);
}
}

您能告诉我们错误吗?最好编辑您的问题并粘贴错误和堆栈跟踪。它显示的是什么类型的错误?请尝试使用SimpleDataFormat-查看本教程,我建议您不要使用
日期
。那门课设计得很糟糕,而且早已过时。改为使用中的
LocalDate
from。和@ScaryWombat,我也建议不要使用
SimpleDateFormat
,这是出了名的麻烦。如果使用Java 9或更高版本,我建议。虽然我认为这是正确的,但它使用了很多旧的、设计糟糕的、过时的Java日期和时间类,并且跳过了使用Java.time的问题尝试,现代Java日期和时间API。旧类的糟糕设计可以通过以下事实来说明:该代码的行数是问题中的两倍多。不建议使用此解决方案。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Scanner;

public class StackOverFlow {
    public static void main(String[] args) throws ParseException {
        Scanner sc = new Scanner(System.in);
        String a = sc.nextLine(); // for example  - 2017-02-01
        String b = sc.nextLine(); // 2017-10-05
        List<Date> datesInRange = new ArrayList<>();
        Date d1 = new SimpleDateFormat("yyyy-MM-dd").parse(a);
        Date d2 = new SimpleDateFormat("yyyy-MM-dd").parse(b);
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(d1);

        Calendar endCalendar = new GregorianCalendar();
        endCalendar.setTime(d2);

        while (calendar.before(endCalendar)) {
            Date result = calendar.getTime();
            datesInRange.add(result);
            calendar.add(Calendar.DATE, 1);
        }
        System.out.println(datesInRange);

    }
}