【问题标题】:Printing all days betweeen 2 dates in java, peculiar situation [duplicate]在java中打印两个日期之间的所有天,特殊情况[重复]
【发布时间】:2020-03-19 06:24:25
【问题描述】:

我从控制台读取了 2 个格式为 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));
    }
}

【问题讨论】:

标签: java string date console


【解决方案1】:
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);

    }
}

【讨论】:

  • 虽然我相信它是正确的,但它使用了许多旧的、设计不佳且过时的 Java 日期和时间类,并且跳过了使用现代 Java 的 java.time 问题的尝试日期和时间 API。这段代码的行数是问题中的两倍多,这一事实说明了旧类的糟糕设计。不推荐使用此解决方案。
猜你喜欢
  • 2011-11-08
  • 2013-06-14
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多