字符串到日期转换 - Java

时间:2017-06-16 10:35:15

标签: java string date

我遇到了将字符串转换为日期的问题,我想插入格式化数据库的日期" dd.MM.yy"使用此代码:

SimpleDateFormat f = new SimpleDateFormat("dd.MM.yy");
String d = f.format(new Date());
System.out.println("String: " + d);
Date d1 = f.parse(d);
System.out.println("Date: " +d1);

输出:

String: 16.06.17
Date: Fri Jun 16 00:00:00 EEST 2017

我尝试了其他方法,但日期始终以这种格式打印" EE MMM dd HH:mm:ss z yyyy"。

3 个答案:

答案 0 :(得分:0)

您的代码运行正常。 Date类会覆盖.toString()方法,因此当您执行System.out.println("Date: " +d1)时,您实际上正在执行System.out.println("Date: " + d1.toString());

如果您想以您提供的格式打印日期,则需要使用format()中的SimpleDateFormat

SimpleDateFormat f = new SimpleDateFormat("dd.MM.yy");
String d = f.format(new Date());
System.out.println("String: " + d);
Date d1 = f.parse(d);
System.out.println("Date: " + f.format(d1));

答案 1 :(得分:0)

dd.MM.YY 不是有效的sql类型日期。因此,您无法将此格式直接用于数据库。如果需要,您可以通过将数据库字段设置为varchar来使用替代方法,以便它可以接受您的格式化日期。当您想要使用此日期时,您可以简单地格式化它。

    // For example retrieved from database.
    String date = "2012/12/12";

    SimpleDateFormat f = new SimpleDateFormat("dd.MM.yy");

    Date newDate = f.format(new Date(date)); // Will hold date 12.12.12

答案 2 :(得分:0)

对不起,但你做错了很多。

虽然在明确的世纪中,向用户显示两位数的年份是可以的,但是您永远不应该将两位数的年份存储到数据库中。您正在创建另一个Y2K problem。如果您想将年份存储为字符串,请存储四位数字。

但不要存储字符串。毫无疑问,您的RDBMS具有完全适用于存储日期的date数据类型。改为使用它。

在Java中,不要使用长期过时的类SimpleDateFormatDate。他们的替代品于2014年问世。因此,请使用LocalDate作为日期。获取新的JDBC驱动程序(它应符合JDBC 4.2)并将LocalDate直接存储到数据库的date类型列中。无需任何格式化。

如果您需要以dd.MM.yy格式向用户显示日期,请使用DateTimeFormatter

LocalDate myDate = LocalDate.of(2017, Month.JUNE, 16);
System.out.println("The date is "
        + myDate.format(DateTimeFormat.ofPattern("dd.MM.yy")));

(我没有测试过;如果有错误你自己无法修复,请恢复。)

PS

  

日期总是以这种格式打印" EE MMM dd HH:mm:ss z yyyy"。

是的,java.util.Date以这种方式打印。总是。 Date对象不包含格式(LocalDate也是如此)。许多地方已经解释过这一点。例如,请参阅All about java.util.Date,向下滚动到如何将Date转换为其他格式?