将 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);
我试图通过获取日期来获取存储在数据库中的数据,然后填充 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);