在Java上格式化日期

时间:2009-12-18 11:28:40

标签: java mysql date

我有一个格式如下的字符串:january_2005(MMMMMMM_yyyy)

我希望将其转换为mysql可接受的日期值,以将其插入数据库。

我需要在Java上做。

有谁知道怎么做?

由于

7 个答案:

答案 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)

创建您自己的Dateformatter ...并起诉您自己的日期格式以解决此类问题。

DateFormatter

DateFormat

如果日期格式化出现错误,请编辑您的问题: - )

答案 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时间库,它具有类似的格式化类但具有线程安全保证。