【问题标题】:String to Date conversion - Java字符串到日期的转换 - Java
【发布时间】:2017-11-19 02:31:50
【问题描述】:

我在将字符串转换为日期时遇到此问题,我想使用以下代码将格式为“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”。

【问题讨论】:

  • 日期没有自定义格式。所以重新考虑你实际上想要做什么。在数据库中以特定格式存储日期也是没有意义的。请改用正确的列类型。
  • 您错过了重点:Date 类型变量 d1 具有正确的 ,只是它在 println 语句中使用的默认 toString 使用了其他格式。除非您将日期值作为字符串插入数据库中(无论如何这将是一个非常糟糕的主意),否则一切都应该没问题。

标签: java string date


【解决方案1】:

您的代码运行良好。 Date 类覆盖了 .toString() 方法,所以当您执行 System.out.println("Date: " +d1) 时,您实际上是在执行 System.out.println("Date: " + d1.toString());

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

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));

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

    • 要在数据库中存储日期,您应该更喜欢date 数据类型而不是varchar。这就是它的用途。
    【解决方案3】:

    对不起,你做错了很多事情。

    虽然在世纪明确的情况下向用户显示两位数的年份是可以的,但您永远不应该将两位数的年份存储到您的数据库中。您正在创建另一个 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 转换为其他格式?

    部分

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      相关资源
      最近更新 更多