在Java中将日期转换为字符串并返回日期

时间:2012-05-24 05:15:17

标签: java parsing datetime date simpledateformat

在我的程序中,我试图将日期转换为字符串到指定的格式,然后再回到日期。我需要日期为dd-MMM-yy格式。所以,我正在使用SimpleDateFormat之类将日期转换为dd-MMM-yy格式,

SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy");
String bookingDate = sdf.format(myDate);

结果是我的预期,即23-May-12,但是当我将字符串转换回日期时 使用parse(),它将更改为2012年5月23日13:16:14 IST 2012.

有没有办法在不改变格式的情况下将字符串转换回日期?我严格地需要将指定格式的日期对象传递给查询。

5 个答案:

答案 0 :(得分:4)

  

当我使用parse()将字符串转换回日期时,它将更改为2012年5月23日13:16:14 IST 2012.

这不是真的,它正确地转换回Date,当你尝试打印Date实例时,它调用toString()方法并且它具有固定的格式化输出,所以如果你想要格式化的日期你需要使用format()方法

简短的解析方法将String解析为Date,没有Date的属性,其中包含格式,因此您无论如何都需要使用format()方法

答案 1 :(得分:0)

如果只是在查询字符串中附加日期,为什么需要将字符串日期转换回日期对象,如何在查询中传递日期对象?如果您使用预准备语句,则无需担心格式。并且如上所述,Date对象不包含任何格式信息

答案 2 :(得分:0)

如果您确实需要传递日期对象,那么不必担心其格式,因为Date对象可以理解其格式为Java,任何Java框架或SQL ..

如果您直接在sql查询(连接)中传递日期,那么您可以使用在DB中看到的相同格式传递Date String,它将正确处理相同的。

答案 3 :(得分:0)

您可以使用DateFormat.getDateInstance(DateFormat.SHORT, <locale>).parse(myDate);

但是,您将拥有标准格式的日期,例如dd / MM / yy,而非自定义。模板取决于您使用的Locale

您可以尝试使用标准Java库或ThreeTen/JSR-310

构建自己的Pattern

答案 4 :(得分:0)

我们现在有更现代的方式来完成这项工作。

java.time

Source框架与Java 8及更高版本捆绑在一起。见java.time。这些新课程的灵感来自Tutorial,由Joda-Time定义,并由JSR 310项目进行扩展。它们是对麻烦混乱的旧类java(util.Date / .Calendar等)的巨大改进。

仅限日期的课程

新框架提供了一个类ThreeTen-Extra,用于表示仅限日期,没有任何时间或时区。

顺便说一句,年份使用两位数就是在寻找麻烦。我强烈建议尽可能使用四位数年份。 java.time框架假定任何两位数的年份都在 // Generate String representation. String output = localDate.format ( formatter ); 世纪,包括2000年到2099年。

要解析字符串,请指定预期的格式。您没有使用任何标准LocalDate格式,因此我们必须定义格式模式。指定包含我们期望为月名查找的语言的区域设置。

    System.out.println ( "input: " + input + " → localDate : " + localDate );
    System.out.println ( "localDate : " + localDate + " → output: " + output );

要转向另一个方向,要生成日期值的字符串表示形式,我们可以回收相同的格式化程序。

{{1}}

转储到控制台。

{{1}}

跑步时。

  

输入:23-May-12→localDate:2012-05-23

     

localDate:2012-05-23→输出:23-May-12