无法从String转换为Timestamp;格式错误

时间:2018-06-26 09:33:54

标签: java angularjs spring date querydsl

尝试将日期对象从AngularJS传递到Java Spring后端时遇到以下错误:

  

无法从类型[java.lang.String]转换为类型       [@ javax.persistence.Column java.sql.Timestamp]的值       '2018-06-12T22:00:00.000Z';嵌套异常为       java.lang.IllegalArgumentException:时间戳格式必须为        yyyy-mm-dd hh:mm:ss [.fffffffff]

到目前为止,我尝试将日期对象格式化为预期格式的字符串:

$filter('date')(date, "yyyy-MM-dd hh:mm:ss");

这会导致错误提示:

  

错误:[ngModel:datefmt]预期2018-06-13 12:00:00是一个日期

好像我需要传递一个日期对象,但是我找不到一种方法来影响AngularJS尝试转换为的日期格式。

2 个答案:

答案 0 :(得分:3)

java.time.Instant

使用旧类java.sql.Timestamp,您的后端服务已过时。该类在多年前被java.time.Instant取代。

如果您将后端更改为使用Instant,则可以毫无问题地传递2018-06-12T22:00:00.000Z之类的字符串。该字符串使用ISO 8601中定义的标准格式。这种格式是将日期时间值作为文本交换的理想方式。

java.time 类默认使用ISO 8601格式。因此,无需指定格式化模式。

我知道Hibernate已更新为支持 java.time 类。我不了解JPA。 (我也不使用。)

答案 1 :(得分:-1)

您可以使用以下任何格式将日期字符串转换为日期对象:

Date parseDateString(String dateString){
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    Date date = dateFormat.parse(dateString);
}

您可以在documentation

中了解更多信息