-4

我正在开发一个 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 月的第一天)。

问题是当执行此行时:

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)

我该如何解决这个问题?

4

2 回答 2

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

于 2016-08-24T13:42:05.793 回答
0

@Hrabosch 是对的。

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

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

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

DateMidnight dateMidnight = new DateMidnight(2015, 1, 1);
于 2016-08-24T13:51:38.153 回答