为什么我尝试从字符串构建 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);
我正在开发 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);