【问题标题】:Parse date to yyyy-MM-dd HH:mm:ss format [duplicate]将日期解析为 yyyy-MM-dd HH:mm:ss 格式 [重复]
【发布时间】: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 语法
  • 所以显示相关代码。它与日期无关

标签: java database datetime spring-jdbc


【解决方案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  

【讨论】:

    猜你喜欢
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2013-05-01
    相关资源
    最近更新 更多