将日期解析为 yyyy-MM-dd HH:mm:ss 格式 [重复]

Posted

技术标签:

【中文标题】将日期解析为 yyyy-MM-dd HH:mm:ss 格式 [重复]【英文标题】:Parse date to yyyy-MM-dd HH:mm:ss format [duplicate] 【发布时间】:2017-09-06 10:33:37 【问题描述】:

我想使用 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','preferedN‌​ame','lastName',
       '198‌​9-01-01','M',1,'1122‌​1123','test@test.com‌​','address1','addres‌​s2','Bloomingdale','‌​IL','US','689850',
       1,‌​1,'11111','2016-12-3‌​1 23:59:59')

(最后一个值中没有T

这不起作用:

VALUES('US','101','test','firstname','middleName','preferedN‌​ame','lastName',
       '198‌​9-01-01','M',1,'1122‌​1123','test@test.com‌​','address1','addres‌​s2','Bloomingdale','‌​IL','US','689850',
       1,‌​1,'11111','2016-12-3‌​1T23:59:59')

(最后一个值为T)。

【问题讨论】:

你看到的是日期的内部表示。因为Date 没有格式 列的类型是什么,如何尝试存储日期,错误信息是什么? 日期/时间对象 DO NOT 有格式化的概念,它们是从给定时间点开始的毫秒数的容器。这就是为什么有日期/时间格式化程序 - 我建议看看Parsing and Formatting trail 列的类型是 datetime ,我收到错误 - org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;糟糕的 SQL 语法 所以显示相关代码。它与日期无关 【参考方案1】:

LocalDateTime 不存储为字符串,而是存储为对象。

你得到一个 "T" 因为 .toString() 方法默认返回 ISO 格式,如下所述: https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html

toString

公共字符串 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  

【讨论】:

以上是关于将日期解析为 yyyy-MM-dd HH:mm:ss 格式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法解析这种日期格式 yyyy-MM-dd'T'HH:mm:ss.SSSZ?

数据库数据库操作

如何将长口头日期时间转换为雪花中的时间戳(YYYY-MM-DD HH:MM:SS)?

Actionscript 3 - 将 yyyy-mm-dd hh:mm:ss 解析为 Date 对象的最快方法?

Java将字符串解析为日期返回不正确的日期

在 Java 中以不同的格式将字符串解析为日期