2

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

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

结果是我所期望的,即 12 年 5 月 23 日,但是当我使用 parse() 将字符串转换回日期时,它会更改为 IST 2012 年 5 月 23 日星期三 13:16:14。

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

4

5 回答 5

4

当我使用 parse() 将字符串转换回日期时,它正在更改为 Wed May 23 13:16:14 IST 2012。

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

简而言之 parse 方法将其解析StringDate没有保存格式的属性,因此无论如何Date您都需要使用format()方法

于 2012-05-24T05:18:51.237 回答
0

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

于 2012-05-24T05:41:50.870 回答
0

如果您严格需要传递日期对象,那么不必担心它的格式,因为日期对象对其格式有了解,无论是 Java、任何 Java 框架还是 SQL..

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

于 2012-05-24T06:49:28.487 回答
0

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

但是,您将拥有像 dd/MM/yy 这样的标准格式的日期,而不是自定义的。模板取决于您使用的区域设置。

您可以尝试使用标准 Java 库或通过ThreeTen/JSR-310构建自己的模式

于 2012-05-29T10:59:52.277 回答
0

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

java.time

java.time框架与 Java 8 及更高版本捆绑在一起请参阅教程。这些新类受到JSR 310定义的Joda-Time的启发,并由ThreeTen-Extra项目扩展。它们是对令人困惑的旧类 java.util.Date/.Calendar 等的巨大改进。

仅日期类

新框架提供了一个类 ,LocalDate来表示没有任何时间或时区的仅日期。

顺便说一句,使用两位数表示年份是自找麻烦。我强烈建议尽可能使用四位数年份。java.time 框架假定任何两位数的年份都在20xx世纪中,包括 2000 年到 2099 年。

要解析字符串,请指定预期的格式。您没有使用任何标准的ISO 8601格式,因此我们必须定义格式模式。指定一个区域设置,其中包括我们希望为月份名称找到的语言。

// Parse String representation.
String input = "23-May-12";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "d-MMMM-yy" , Locale.ENGLISH );  // Using four "M" characters means we expect the full name of the month.
LocalDate localDate = formatter.parse ( input , LocalDate :: from );

反过来,要生成日期值的字符串表示,我们可以回收相同的格式化程序。

    // Generate String representation.
    String output = localDate.format ( formatter );

转储到控制台。

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

跑的时候。

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

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

于 2015-10-11T02:08:39.837 回答