【发布时间】:2010-12-28 00:18:09
【问题描述】:
我有一个格式如下的字符串:january_2005 (MMMMMMM_yyyy)
我想将其转换为 mysql 可接受的日期值以将其插入数据库。
我需要在 Java 上完成。
有人知道怎么做吗?
谢谢
【问题讨论】:
我有一个格式如下的字符串:january_2005 (MMMMMMM_yyyy)
我想将其转换为 mysql 可接受的日期值以将其插入数据库。
我需要在 Java 上完成。
有人知道怎么做吗?
谢谢
【问题讨论】:
创建您自己的 Dateformatter...并使用您自己的 Date Format 来解决此类问题。
如果出现有关日期格式的错误,请编辑您的问题:-)
【讨论】:
您可以像这样使用SimpleDateFormat 来获得Date 对象:
DateFormat formatter = new SimpleDateFormat("MMMM_yyyy");
Date date = (Date)formatter.parse("January_2009");
您可能需要将 'january' 的第一个字母大写才能使其正常工作(我不确定 SimpleDateFormat 接受的输入范围。
获得Date 后,接下来要做什么取决于您在 MySQL 中如何存储日期。
【讨论】:
我认为这样的事情会使用准备好的语句来完成
DateFormat formatter = new SimpleDateFormat("MMMMMMM_yyyy");
Date mydate = formatter.parse("january_2005");
stmt_date.setTimestamp(4, new Timestamp(mydate.getTime()));
【讨论】:
这样的事情可能会奏效,
SimpleDateFormat myFormat = new SimpleDateFormat("MMMM_yyyy");
Date aDate;
try
{
aDate = myFormat.parse("January_2009");
}
catch (ParseException e)
{
// Error handling
}
然后您可以使用 PreparedStatement 将aDate 插入到您的数据库中。
如果您不使用 PreparedStatements 而是需要将其作为字符串,那么您可以执行以下操作。尽管如 cmets 中所述,使用 PreparedStatements 插入数据库要安全得多。
SimpleDateFormat sqlFormat = new SimpleDateFormat("yyyy-MM-dd hh:dd:ss");
String sqlDateString = aDate.format(sqlFormat);
【讨论】:
首先使用SimpleDateFormat将日期解析为Date对象:
Date d= new SimpleDateFormat("MMMM_yyyy").parse(s)
然后使用参数化 SQL(PreparedStatement)插入日期:
public insertData(Date d) {
Connection conn = setupTheDatabaseConnectionSomehow();
PreparedStatement stmt =
conn.prepareStatement("INSERT INTO t (date) values (?)");
stmt.setDate(2, new java.sql.Date(d));
stmt.executeUpdate();
}
问号将自动转换为 MySQL 的正确格式,并使您的代码更安全、更便携。搜索parameterised SQL 了解更多信息。
【讨论】:
根据SimpleDateFormat API,模式实际上是MMMM_yyyy。
因此,要从 String 中获得有价值的 java.util.Date,您需要这样做:
String stringDate = "january_2005";
Date date = new SimpleDateFormat("MMMM_yyyy").parse(stringDate);
如果这些月份预计始终是英语,并且运行它的机器的 Locale 不是(总是)英语,那么您最好还需要指定 Locale:
Date date = new SimpleDateFormat("MMMM_yyyy", new Locale("en")).parse(stringDate);
要将其保存在数据库中,请使用PreparedStatement#setDate()。您需要先将java.util.Date 转换为java.sql.Date。
preparedStatement = connection.prepareStatement("INSERT INTO mytable (somedate) VALUES (?)";
preparedStatement.setDate(1, new java.sql.Date(date.getTime()));
【讨论】:
Locale 的重要性。没有一个答案提到Locale。在非英语机器中,您将在 january 上获得 ParseException,否则。
此处建议 SimpleDateFormat 的答案在很大程度上看起来不错。但是,为了(可能)使问题复杂化,请注意 SimpleDateFormat 不是线程安全的。如果这对您来说是一个潜在问题,请查看 Joda 时间库,它具有类似的格式化类,但具有线程安全保证。
【讨论】: