当我尝试从String构建Java.utile.Date对象时,为什么会出现此错误?

时间:2016-08-24 13:35:08

标签: java date java.util.date java.util.calendar

我正在开发一个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年第一届Noveember)。

问题在于执行此行时:

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)

为什么呢?我错过了什么?我该如何解决这个问题?

TNX

2 个答案:

答案 0 :(得分:1)

我不知道你为什么要这个解决方案,但是如果你想使用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 ,那么您将获得此日期的字符串,然后将其解析回日期 :-D

答案 1 :(得分:0)

@Hrabosch是对的。

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

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

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

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