计算 JAVA 中两个日期之间的天数(捕获 ParseException 错误)
Calculating days between two dates in JAVA (catch ParseException error)
我正在尝试计算两个日期之间的天数。当我 运行 这个时,它抛出 catch (ParseException ex).
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) {
String date1 = "11/11/2020";
String date2 = "13/11/2020";
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-mm-yyyy");
Date date_1 = dateFormat.parse(date1);
Date date_2 = dateFormat.parse(date2);
System.out.println(date_1);
System.out.println(date_2);
long numberOfDays = date_2.getTime() - date_1.getTime();
numberOfDays = TimeUnit.DAYS.convert(numberOfDays, TimeUnit.MILLISECONDS);
System.out.println(numberOfDays);
}
catch (ParseException ex)
{
System.out.println("error");
}
}
}
除了捕获,没有错误,所以我有点迷路了。
只要改变这个:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-mm-yyyy");
到那个:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
您尝试解析的日期 11/11/2020
与您尝试使用的日期格式不匹配 dd-mm-yyyy
您可以通过打印出 catch 中的堆栈跟踪自行解决此类问题:
ex.printStackTrace();
如果您打印了捕获的异常:
System.out.println("error: " + ex.getLocalizedMessage());
你会看到:
error: Unparseable date: "11/11/2020"
问题出在:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-mm-yyyy");
改为:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
因为提供的日期采用该格式。
您的模式不正确。
您使用:
new SimpleDateFormat("dd-mm-yyyy");
但你需要使用:
new SimpleDateFormat("dd/mm/yyyy");
因为你的约会对象有“/”而不是“-”
不要使用日期。试试这个。
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String date1 = "11/11/2020";
String date2 = "13/11/2020";
LocalDate d1 = LocalDate.parse(date1,dtf);
LocalDate d2 = LocalDate.parse(date2,dtf);
long ndays = d1.datesUntil(d2).count();
System.out.println(ndays);
如果 Java 8 是一个选项,我建议使用时间 API。
示例:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
public class Main
{
public static void main(String[] args) {
DateTimeFormatter format = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String date1 = "11/11/2020";
String date2 = "13/11/2020";
LocalDate firstDate = LocalDate.parse(date1, format);
LocalDate secondDate = LocalDate.parse(date2, format);
long days = ChronoUnit.DAYS.between(firstDate, secondDate);
System.out.println("Days between: " + days);
}
}
首先,您在输入日期和定义格式方面有不同的格式。因此,您遇到了解析异常。
其次,我们可以在Java8中java.time.Duration
class进行这样的计算。示例:
public static void main(String[] args) throws ParseException {
String date1 = "11/11/2020";
String date2 = "13/11/2020";
DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Duration duration = Duration.between(format.parse(date1).toInstant(), format.parse(date2).toInstant());
System.out.println("Days between: " + duration.toDays());
}
我正在尝试计算两个日期之间的天数。当我 运行 这个时,它抛出 catch (ParseException ex).
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) {
String date1 = "11/11/2020";
String date2 = "13/11/2020";
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-mm-yyyy");
Date date_1 = dateFormat.parse(date1);
Date date_2 = dateFormat.parse(date2);
System.out.println(date_1);
System.out.println(date_2);
long numberOfDays = date_2.getTime() - date_1.getTime();
numberOfDays = TimeUnit.DAYS.convert(numberOfDays, TimeUnit.MILLISECONDS);
System.out.println(numberOfDays);
}
catch (ParseException ex)
{
System.out.println("error");
}
}
}
除了捕获,没有错误,所以我有点迷路了。
只要改变这个:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-mm-yyyy");
到那个:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
您尝试解析的日期 11/11/2020
与您尝试使用的日期格式不匹配 dd-mm-yyyy
您可以通过打印出 catch 中的堆栈跟踪自行解决此类问题:
ex.printStackTrace();
如果您打印了捕获的异常:
System.out.println("error: " + ex.getLocalizedMessage());
你会看到:
error: Unparseable date: "11/11/2020"
问题出在:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-mm-yyyy");
改为:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
因为提供的日期采用该格式。
您的模式不正确。
您使用:
new SimpleDateFormat("dd-mm-yyyy");
但你需要使用:
new SimpleDateFormat("dd/mm/yyyy");
因为你的约会对象有“/”而不是“-”
不要使用日期。试试这个。
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String date1 = "11/11/2020";
String date2 = "13/11/2020";
LocalDate d1 = LocalDate.parse(date1,dtf);
LocalDate d2 = LocalDate.parse(date2,dtf);
long ndays = d1.datesUntil(d2).count();
System.out.println(ndays);
如果 Java 8 是一个选项,我建议使用时间 API。
示例:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
public class Main
{
public static void main(String[] args) {
DateTimeFormatter format = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String date1 = "11/11/2020";
String date2 = "13/11/2020";
LocalDate firstDate = LocalDate.parse(date1, format);
LocalDate secondDate = LocalDate.parse(date2, format);
long days = ChronoUnit.DAYS.between(firstDate, secondDate);
System.out.println("Days between: " + days);
}
}
首先,您在输入日期和定义格式方面有不同的格式。因此,您遇到了解析异常。
其次,我们可以在Java8中java.time.Duration
class进行这样的计算。示例:
public static void main(String[] args) throws ParseException {
String date1 = "11/11/2020";
String date2 = "13/11/2020";
DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Duration duration = Duration.between(format.parse(date1).toInstant(), format.parse(date2).toInstant());
System.out.println("Days between: " + duration.toDays());
}