java中setDate的非法参数异常

时间:2017-10-24 05:46:00

标签: java java-time localdate java-date

我有以下代码,它将Java LocalDate转换为特定格式,同时作为setDate的参数传递。

LocalDate localDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMM yyyy");
String formattedString = localDate.format(formatter);
storedProcedureCall.setDate(1, java.sql.Date.valueOf(formattedString));

但是当我在IllegalArgumentException的参数中包含formattedString时,它总是会引发setDate但是当我这样做时可以正常工作:

storedProcedureCall.setDate(2, java.sql.Date.valueOf(java.time.LocalDate.now()));

一般来说:

storedProcedureCall.setDate(2, java.sql.Date.valueOf(java.time.LocalDate.now())); // working

storedProcedureCall.setDate(2, java.sql.Date.valueOf(formattedString)); // not working

2 个答案:

答案 0 :(得分:0)

java.util.Date

这应该有效。但是,如果您使用的标准库使用LocalDate而不是old这样的新类,那么使用storedProcedureCall java类会更加舒适。

据我了解,您的目标是将当前日期设为long。在Java中,任何日期都是storedProcedureCall.setDate(1, new java.util.Date()); 。在将其转换为String之前,请不要担心本地和其他功能。所以你只用一行解决问题:

24 oct 2017

P.S。如何将Date转换为storedProcedureCall个实例并将其设置为storedProcedureCall.setDate(1, new SimpleDateFormat("dd MMM yyyy", Locale.US).parse("24 oct 2017"));

let date1: string = params.data.incidentTime;
let date2: string = params.data.creationTime;

let diffInMs: number = Date.parse(date2) - Date.parse(date1);
let diffInHours: number = diffInMs / 1000 / 60 / 60;

console.log(diffInHours);

答案 1 :(得分:-1)

使用此格式

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

您的代码应该是这样的:

    LocalDate localDate = LocalDate.now();
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    String formattedString = localDate.format(formatter);
    storedProcedureCall.setDate(1, java.sql.Date.valueOf(formattedString));