Java 迄今为止的字符串

Java String to Date

我有一个需要以下输入参数的存储过程 -

PROCEDURE `Report_Publishing`(p_StartDate datetime, p_EndDate dateTime, p_Action varchar(15))


从前端我得到以下格式的开始和结束日期 -
start as a String "2017-03-15"end as a String "2017-04-17"

以下是一段代码,将开始日期和结束日期转换为存储过程所需的格式-

import java.sql.CallableStatement;
import java.sql.Connection;
import java.util.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.text.SimpleDateFormat; 

public List<PublishReportDto> getExport(String start, String end, String action, Connection conn, String sql) {
        List<PublishReportDto> publishList = null;

        try {
            CallableStatement cs = conn.prepareCall(sql);

            start += " 00:00:00";
            end += " 00:00:00";
            Date startDate = null;
            Date endDate = null;
            try {
                startDate = (Date) new SimpleDateFormat("yyyy-MM-dd").parse(start);
                endDate = (Date) new SimpleDateFormat("yyyy-MM-dd").parse(end);
            } catch (ParseException e) {
                e.printStackTrace();
            }

            cs.setDate(1,(java.sql.Date) startDate);
            cs.setDate(2,(java.sql.Date) endDate);
            cs.setString(3, action);
            cs.registerOutParameter(1, java.sql.Types.DATE);
            cs.registerOutParameter(2, java.sql.Types.DATE);
            cs.registerOutParameter(3, java.sql.Types.VARCHAR);
            ResultSet rs = cs.executeQuery();

我收到以下异常 -

Exception in thread "main" java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date


修改-
已替换 -
1. import java.sql.Date 导入 java.util.Date;
2.

cs.setDate(1,startDate);
cs.setDate(2,endDate);

来自

cs.setDate(1,(java.sql.Date) startDate);
cs.setDate(2,(java.sql.Date) endDate);

现在我得到 -

Exception in thread "main" java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

有人可以帮我吗?

您可以尝试在您的代码中实现如下内容:

String string = "January 2, 2010";
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
Date date = format.parse(string);
System.out.println(date); 

Date 将解析您输入的字符串,然后它会给您正确的日期希望这对您有所帮助:)

您输入错误 Date。请注意,您已经导入了对应于转换 (Date)java.sql.Date,将导入更改为 java.util.Date,它应该可以工作。

SimpleDateFormat.parse() returns java.util.Date 的一个实例,它与 java.sql.Date 不同 并且您不能从一个转换为其他。如果您确实需要 java.sql.Date.

,可以

您可以使用 java.sql.Date 的构造函数将 java.util.Date 转换为 java.sql.Date:

Date(long date) //constructor of the java.sql.Date

Constructs a Date object using the given milliseconds time value.

获取开始日期:

Date startDate = new java.sql.Date(new SimpleDateFormat("yyyy-MM-dd").parse(start).getTime());

获取结束日期:

Date endDate = new java.sql.Date(new SimpleDateFormat("yyyy-MM-dd").parse(end).getTime());

注意 - 将来如果您打算使用仅限日期的值,您应该使用 LocalDate class 而不是 java.util.Date.

您可以将 (java.util.Date)Date obj 传递给 java.sql.Date 构造函数

java.util.Date startDate = new java.util.Date();
            java.sql.Date sqlDate = new java.sql.Date(startDate.getTime());