try{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
Date parsedDate = dateFormat.parse(tm);
timestamp = new java.sql.Timestamp(parsedDate.getTime());
}
catch (Exception pe) {
System.out.println("unexpected exception");
System.out.println(pe);
pe.printStackTrace();
}
控制台显示“意外错误”(在我的catch块中)。我试图将客户端输入日期的“tm”转换为时间戳。 tm的值类似于“YYYY-MM-DD HH:MM:SS”(字符串)。但控制台继续显示Unparseable日期。我是Java新手。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
String tm = "2019-02-09 07:35:54";
LocalDateTime dateTime = LocalDateTime.parse(tm, formatter);
System.out.println(dateTime);
这会产生以下输出:
2019-02-09T07:35:54
我不鼓励使用SimpleDateFormat
,Date
和Timestamp
。这些课程的设计很差,而且已经过时了,第一课特别是出了名的麻烦。相反,我使用的是java.time,即现代Java日期和时间API。
如果您认为您的数据库需要Timestamp
,则可能不需要。假设您的JDBC驱动程序符合JDBC 4.2,您可以直接为它提供我们刚刚生成的LocalDateTime
对象。例如:
PreparedStatement ps = yourConnection.prepareStatement(
"insert into your_table(your_timestamp_col) values (?);");
ps.setObject(1, dateTime);
格式模式字符串yyyy-MM-dd hh:mm:ss.SSS
中有两个错误:
HH
来解析它们,正如LppEdd已经在评论中说的那样(小写hh
是AM或PM从01到12的小时当然需要存在AM或PM标记)。.SSS
(这可能是导致您的异常的原因)。Oracle tutorial: Date Time解释如何使用java.time。
也许你想尝试一下
String tm = "2014-01-01 00:00:00";
String frontEndFormat = "yyyy-MM-dd HH:mm:ss";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(frontEndFormat);
LocalDateTime localDateTime = LocalDateTime.parse(tm, formatter);
Timestamp timestamp = Timestamp.valueOf(localDateTime);
//prints 2014-01-01 00:00:00.0
System.out.println(timestamp);
您可以注意到大写字母HH用了几个小时,小写字母mm用了几分钟。