将 String 转换为 "yyy-MM-dd" 格式,数据类型为 Date

Convert String to "yyy-MM-dd" format with Date as data type

我试图通过获取日期来获取存储在数据库中的数据,然后填充 table。

    List<String> contents = new ArrayList<>();
    List<Record> records

try {
        Session session = sessionFactory.getCurrentSession();
        Query<World> query = null;

        query = session.createQuery("from World where date like :dateCont, World.class);
        query.setParameter("dateCont", "%" + contents.get(0) + "%");

        worlds = query.getResultList();

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

这里的问题是它给我一个错误异常:

java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.Date (java.lang.String and java.util.Date are in module java.base of loader 'bootstrap')

我知道出了什么问题,因为 List<String> contents 值是字符串,需要转换为日期,但我尝试了很多代码,但它不起作用。

//The following are the codes that I tried but it won't work:

//FIRST

 Date date = new SimpleDateFormat("MM/dd/yyyy").parse(contentsStart.get(0));
 new SimpleDateFormat("yyyy-MM-dd").format(date);

//---------------------------------------

//SECOND

Date newDate;
DateFormat formatter = null;

formatter = new SimpleDateFormat("yyyy-MM-dd");
newDate = (Date) formatter.parse(contentsStart.get(0));

那么,有什么方法可以将给定值更改为日期,但它应该保留格式 "yyyy-MM-dd" 并且数据类型应该是日期。

PS: the format of date in database is "yyyy-MM-dd" also. Both my date entity field and date from DB is both Date as their datatype.

您只能在字符串 (VARCHAR) 字段上使用 like 运算符。在 WHERE 子句中,您必须将字段转换为字符串(使用格式函数)才能使用 LIKE。因此,您必须(也)在查询中调用转换函数。

不幸的是,EJBQL 中没有 DATE 函数,因此您将不得不切换到本机查询。例如,对于 Oracle,您可以像这样使用 TO_CHAR

SELECT ... WHERE TO_CHAR(date, 'MM/DD/YYYY') LIKE ...

为了获得良好的性能,您必须添加功能索引。

另见 http://www.sqlines.com/oracle-to-sql-server/to_char_datetime


一种替代方法是添加一个新的字符串列 date_string,它将包含日期的格式化表示,并将此列与 LIKE 一起使用。但是您必须绝对确保两个日期始终同步。

试试这个:

 DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  Date d1= (Date) format.parse(yourDate);