【问题标题】:Convert String to "yyy-MM-dd" format with Date as data type以日期为数据类型将字符串转换为“yyyy-MM-dd”格式
【发布时间】:2019-12-28 17:05:29
【问题描述】:

我正在尝试通过获取日期然后填充表来获取存储在数据库中的数据。

    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:类 java.lang.String 无法转换为 类 java.util.Date(java.lang.String 和 java.util.Date 在 加载器'bootstrap'的模块java.base)

我知道出了什么问题,因为 List&lt;String&gt; 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:数据库中日期的格式也是“yyyy-MM-dd”。 我的日期实体字段和数据库中的日期都是 Date 作为他们的 数据类型。

【问题讨论】:

  • 日期没有“yyyy-MM-dd”格式。
  • @Stultuske 是的,但是要从数据库中获取数据,格式应该是一样的,对吧?我在数据库中的日期格式是“yyyy-MM-dd”
  • 不,类型必须相同。如果它是数据库中的 varchar,则将其读取为字符串,如果它是数据库中的日期,则将其读取为日期。
  • Java 中的日期在显示时具有默认格式。您只能使用 new SimpleDateFormat("yyyy-MM-dd").format(date) 更改输出格式
  • @Stultuske Date 是我数据库中的类型。存储在“内容”中的值来自 .txt 文件,因此我首先将其解析为日期并使用以下代码将其格式化为“yyyy-MM-dd”:Date date = new SimpleDateFormat("MM/dd/yyyy").parse(value); contents.add(new SimpleDateFormat("yyyy-MM-dd").format(date)); 但是存储在内容中的数据类型是字符串,因为“。格式(值)”。这就是为什么我要问如何再次将内容日期中的值作为数据类型。

标签: java hibernate spring-mvc hql crud


【解决方案1】:

您只能在字符串 (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 一起使用。但您必须绝对确保两个日期始终同步。

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多