字符串到日期的转换-Java

字符串到日期的转换-Java,java,string,date,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.1

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

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

对不起,你做了很多错事

在世纪不含糊的情况下,向用户显示两位数的年份是可以的,但永远不要将两位数的年份存储到数据库中。您正在创建另一个。如果要将年份存储为字符串,请存储四位数字

但不要存储字符串。毫无疑问,您的RDBMS有一个
日期
数据类型,它完全适合存储日期。用它代替

在Java中,不要使用过时的类
SimpleDateFormat
Date
。他们的替代品于2014年问世。因此,使用
LocalDate
作为日期。获取一个新的JDBC驱动程序(它应该与JDBC 4.2兼容),并将
LocalDate
直接存储到数据库的
date
typed列中。不需要任何格式

如果您需要以
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
,情况也是如此)。这在很多地方都有解释。例如,请参阅,向下滚动至如何将
日期转换为其他格式?

日期没有自定义格式。所以,重新想想你到底在做什么。在数据库中以特定格式存储日期也是没有意义的。使用正确的列类型。您缺少一点:日期类型变量d1具有正确的值,只是println语句中使用的默认toString使用了其他格式。除非您将日期值作为字符串插入数据库(无论如何这是一个非常糟糕的主意),否则一切都应该正常。要在数据库中存储日期,您应该选择
date
数据类型而不是
varchar
。这就是它的用途。