我遇到了将字符串转换为日期的问题,我想插入格式化数据库的日期" 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"。
答案 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中,不要使用长期过时的类SimpleDateFormat
和Date
。他们的替代品于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
转换为其他格式?