将日期解析成 yyyy-MM-dd HH:mm:ss 的格式。
将日期解析成 yyyy-MM-dd HH:mm:ss 的格式。
这个问题已经在这里有了答案:
我想使用LocalDateTime.parse()方法解析日期,格式为yyyy-MM-dd HH:mm:ss,但实际上我得到的日期格式是yyyy-MM-ddTHH:mm:ss。我不需要那个“T”。请查看下面的代码。
LocalDateTime.parse("2016-10-31 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
我得到的结果是2016-10-31T23:59:59。请注意那个“T”。这个“T”导致了问题,从而使我无法将它持久化到我的数据库中。我尝试将值持久化到datetime
类型的列中;我得到了错误——org.springframework.jdbc.BadSqlGrammarException:PreparedStatementCallback;bad SQL grammar
。
看一下这些可以工作的值
VALUES('US','101','test','firstname','middleName','preferedName','lastName', '1989-01-01','M',1,'11221123','test@test.com','address1','address2','Bloomingdale','IL','US','689850', 1,1,'11111','2016-12-31 23:59:59')
(在最后一个值中没有T
)
这是不起作用的:
VALUES('US','101','test','firstname','middleName','preferedName','lastName', '1989-01-01','M',1,'11221123','test@test.com','address1','address2','Bloomingdale','IL','US','689850', 1,1,'11111','2016-12-31T23:59:59')
(在最后一个值中带有T
)。
LocalDateTime 不以字符串形式存储,而是作为对象存储。
你得到了一个 "T",因为 toString() 方法默认返回 ISO 格式,如下所述:
https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html
toString
public String toString()
将此日期时间输出为字符串,例如 2007-12-03T10:15:30。
输出将是以下 ISO-8601 格式之一:
uuuu-MM-dd'T'HH:mm
uuuu-MM-dd'T'HH:mm:ss
uuuu-MM-dd'T'HH:mm:ss.SSS
uuuu-MM-dd'T'HH:mm:ss.SSSSSS
uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSS使用的格式将是最短的,输出完整值的时间,省略部分被认为是零。
要按照你的需要输出,请使用 format 函数。
LocalDateTime d = LocalDateTime.parse("2016-10-31 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); System.out.println("toString: " + d.toString()); //toString: 2016-10-31T23:59:59 System.out.println("format: " + d.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); //format: 2016-10-31 23:59:59