【问题标题】:How to convert a date format to mysql date format?如何将日期格式转换为 mysql 日期格式?
【发布时间】:2014-02-25 19:42:15
【问题描述】:

我有一堆日期,格式为Jan. 14,2014、Apr. 20,2014、Aug. 14,2014 等。从一组 PDF 文档中提取。

我的问题
我使用java(通过PreparedStatement)将上述日期添加到列数据类型为日期的mysql列中。

....
st.SetDate(3,"Jan. 14,2014");
....

我使用 ExecuteQuery 添加了数据。

但是当程序执行MySql返回的错误信息指出日期格式与MySql列类型不兼容时)Date..

我的问题
如何将上述日期格式转换为 mysql 兼容的日期格式?

【问题讨论】:

  • 据我所知,该代码甚至无法编译 - PreparedStatement.setDate 采用 Date,而不是 String。

标签: java mysql sql date date-format


【解决方案1】:

通过您当前发布的代码:

st.SetDate(3,"Jan. 14,2014");

这甚至不能编译。您可以尝试从 String 获取新的 Date 对象(因为这是您要完成的任务),因此请为此使用 SimpleDateFormat:

SimpleDateFormat sdf = new SimpleDateFormat("MMM. dd,yyyy");
Date date = sdf.parse("Jan. 14,2014");
st.setDate(3, new java.sql.Date(date.getTime()));
//rest of your code...

与此类似,您可以使用SimpleDateFormat 将时间或日期和时间解析为java.util.Date,然后使用date.getTime() 将其转换为相应的类java.sql.Time 和java.sql.Timestamp。

还请注意,由于 java.sql.Date、java.sql.Time 和 java.sql.Timestamp 扩展自 java.util.Date,因此您可以 p̶a̶s̶s̶ 检索对 PreparedStatement#getDate(以及 getTime 和 getTimestamp)的 java.util.Date 对象引用。欲了解更多信息,请参阅:Date vs TimeStamp vs calendar?

【讨论】:

  • 我认为最后一句话没有意义。 PreparedStatement#setDate 需要一个 java.sql.Date,使得 java.util.Date 不兼容
  • @MadProgrammer 你是对的,我对PreparedStatement#getDate =\ 感到困惑。编辑我的答案(并感到羞耻)。
  • 我必须自己去查一下才能确定:P
  • @MadProgrammer 回答已编辑(希望不再有误导)。
  • 感谢您的回答@LuiggiMendoza
【解决方案2】:

假设列类型支持 Date 值,您可以使用 SimpleDateFormat 将 String 值解析为 java.util.Date 并创建可应用于 setDate 方法的 java.sql.Date。 ..

SimpleDateFormat sdf = new SimpleDateFormat("MMM. dd,yyyy");
Date date = sdf.parse("Jan. 14,2014");
java.sql.Date sqlDate = new java.sql.Date(date.getTime());

查看SimpleDateFormat了解更多详情

【讨论】:

  • 看来我们的想法是一样的。
【解决方案3】:

一种可能的解决方案是在表中使用字符串数据类型而不是日期。

【讨论】:

  • 这是个非常糟糕的主意。
【解决方案4】:

使用SimpleDateFormat 将日期的字符串表示形式获取到日期对象。 然后可以使用此日期对象来提供准备好的语句的设置日期方法。

SimpleDateFormat sdf = new SimpleDateFormat(....)
java.util.Date date = sdf.parse(....);

preparedStmt.setDate(...., date);

【讨论】:

    【解决方案5】:

    首先将 java.util.Date 转换为 java.sql.Date 然后尝试设置 Java.sql.Date

    你可以使用这个逻辑来转换

    如果您的日期是字符串,则首先使用 SimpleDateFormat 或 DateFormat 将其转换为 Java.util.Date 类型

    如果您想使用 DateFormat,您也可以使用它: 但这会根据运行它的机器的区域设置改变预期的日期格式。

    如果你有特定的日期格式,你可以使用 SimpleDateFormat:

     Date d = new SimpleDateFormat("MMM. dd,yyyy").parse("Jan. 14,2014");
    
         java.sql.Date sqlDate = new java.sql.Date(d.getTime());
    

    【讨论】:

    • java.sql.Date 继承自 java.util.Date,因此只需传递 java.util.Date 对象引用,无需执行所有这些逻辑。
    • @LuiggiMendoza 我可能错了,但 PreparedStatement#setDate 期望 java.sql.Date,使 java.util.Date 不兼容,但您可以将 java.sql.Date 传递给期望的方法java.util.Date
    • @MadProgrammer 是 java.sql.Date 扩展了 java.util.Date 我的朋友
    • @girishlalwani2010 但这并不意味着java.util.Date 可以被视为java.sql.Date ... 还是你同意我的观点(就像35 度,我的大脑已经融化了;))
    • @Ragesh D Antony 你明白了吗
    【解决方案6】:

    我真的不认为这所有的 java 东西都是必要的。您可以简单地使用这个非常简单的 sql 过程来插入日期:NOW() 在 mysql 查询中,如 INSERT INTO table_name(c1,c2,datecolumn) VALUES('value1','value2',NOW()); 我认为要简单得多:D

    【讨论】:

      猜你喜欢
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 2016-12-02
      • 2017-12-17
      • 2013-12-15
      • 2011-10-11
      • 1970-01-01
      相关资源
      最近更新 更多