为什么我尝试从字符串构建 Java.utile.Date 对象时出现此错误?

Why I obtain this error when I try to build a Java.utile.Date object from a String?

我正在开发 Java 应用程序,我在尝试创建 Date 对象时遇到了一些问题:

所以我做了:

Calendar dataRendimentoLordoCertificatoCalendar = Calendar.getInstance();
dataRendimentoLordoCertificatoCalendar.set(annoCorrente - 1, 10, 01);

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dataRendimentoLordoCertifiacato = new Date(sdf.format(dataRendimentoLordoCertificatoCalendar.getTime()));

使用 Eclipse 调试器我可以看到 sdf.format(dataRendimentoLordoCertificatoCalendar.getTime()) 的值(作为参数传递给 Date 构造函数)是 2015-11- 01(这是我所期望的:2015 年 11 月 1 日)。

问题是当执行这一行时:

Date dataRendimentoLordoCertifiacato = new Date(sdf.format(dataRendimentoLordoCertificatoCalendar.getTime()));

我得到这个异常:

Exception in thread "main" java.lang.IllegalArgumentException
    at java.util.Date.parse(Date.java:598)
    at java.util.Date.<init>(Date.java:255)
    at com.mycompany.dbmanager.MyProject.getRendimentoLordoCertificato(PucManager.java:64)

我该如何解决这个问题?

我不知道你为什么要这个解决方案,但是如果你想使用 String(getTime 的返回类型),你必须使用 parse,像这样:

public static void main(String[] args) throws ParseException {
  Calendar dataRendimentoLordoCertificatoCalendar = Calendar.getInstance();

  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  Date dataRendimentoLordoCertifiacato = sdf.parse(sdf.format(dataRendimentoLordoCertificatoCalendar.getTime()));

  System.out.println(dataRendimentoLordoCertifiacato);
}

但是,我不知道你到底想要什么。因为你有一个 DATE,所以你得到这个日期的 String 然后你将它解析回 date :-D

@Hrabosch 说得对。

但是我假设你这样做是因为你想摆脱时间部分而只想要日期,即午夜的日期。您可以使用 Java 8 及更高版本中内置的 java.time 类。

LocalDate date = LocalDate.of(2015, Month.JANUARY, 1);

如果没有,Joda-Time 库有 DateMidnight,所以你可以这样做:

DateMidnight dateMidnight = new DateMidnight(2015, 1, 1);