我有一个格式如下的字符串:january_2005(MMMMMMM_yyyy)
我希望将其转换为mysql可接受的日期值,以将其插入数据库。
我需要在Java上做。
有谁知道怎么做?
由于
答案 0 :(得分:3)
根据SimpleDateFormat
API,模式实际上是MMMM_yyyy
。
为了从这个java.util.Date
中获得有价值的String
,您需要这样做:
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()));
答案 1 :(得分:1)
这样的事情可能会成功,
SimpleDateFormat myFormat = new SimpleDateFormat("MMMM_yyyy");
Date aDate;
try
{
aDate = myFormat.parse("January_2009");
}
catch (ParseException e)
{
// Error handling
}
然后,您可以使用PreparedStatement将aDate
插入数据库。
如果你没有使用PreparedStatements而需要它作为String,那么你可以执行以下操作。虽然如评论中所述,使用PreparedStatements插入数据库会更安全。
SimpleDateFormat sqlFormat = new SimpleDateFormat("yyyy-MM-dd hh:dd:ss");
String sqlDateString = aDate.format(sqlFormat);
答案 2 :(得分:1)
首先使用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 了解更多信息。
答案 3 :(得分:0)
答案 4 :(得分:0)
您可以使用SimpleDateFormat
这样的内容来获取Date
对象:
DateFormat formatter = new SimpleDateFormat("MMMM_yyyy");
Date date = (Date)formatter.parse("January_2009");
您可能需要将'january'的第一个字母大写以使其生效(我不确定SimpleDateFormat
接受的输入范围。
一旦你得到Date
,这取决于你如何在MySQL中存储关于下一步该做什么的日期。
答案 5 :(得分:0)
我认为这样的事情会使用预备声明
DateFormat formatter = new SimpleDateFormat("MMMMMMM_yyyy");
Date mydate = formatter.parse("january_2005");
stmt_date.setTimestamp(4, new Timestamp(mydate.getTime()));
答案 6 :(得分:0)
这里的答案表明SimpleDateFormat在很大程度上看起来很好。但是,为了(可能)使问题复杂化,请注意SimpleDateFormat不是线程安全的。如果这是一个潜在的问题,请查看Joda时间库,它具有类似的格式化类但具有线程安全保证。