猿问

java.time.format.DateTimeParseException:无法解析文本

我在 MySQL 中有一个类型为 timestamp 的列包含“2019-2-16 8:00:00”,我正在使用 Spring Boot 今天获取本地并与之进行比较。我在谷歌上做了很多搜索,但没有任何帮助。这是我的最终代码:


   @Override

public List<TaskDTO> getTodayTask(int employeeID) {

    Date today = getToday();

    List<Task> listOfTask = taskRepository.findByAssigneeIdAndAndStartTime(employeeID, today);

    List<TaskDTO> listOfDTO = new ArrayList<>();

    for (Task t : listOfTask) {

        listOfDTO.add(taskMapper.toDTO(t));

    }

    return listOfDTO;

}



private Date getToday() {

    Calendar calendar = Calendar.getInstance();


    Timestamp timestamp = new Timestamp(calendar.getTime().getTime());


    DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd");


    OffsetDateTime odt = OffsetDateTime.parse ( timestamp.toString() , format );


    Instant instant = odt.toInstant();


    return Date.from(instant);

}

和我的存储库:


    @Query("SELECT i FROM Task i WHERE i.assigneeId = ?1 and CAST( i.startTime as date) = ?2")

List<Task> findByAssigneeIdAndAndStartTime(int assigneeID, Date startTime);

我发现 java.util.Date 已被弃用,所以我试图找到另一种方法。


我的实体:


@Entity

我收到一个错误:

java.time.format.DateTimeParseException:无法解析文本“2019-02-16 09:29:32.959”,在索引 10 处找到未解析的文本

我做了很多搜索以找出答案,但仍然没有合适的答案。谢谢你。



森栏
浏览 580回答 2
2回答

智慧大石

你是对的,而且不止于此。虽然尚未正式弃用,但类和早已过时Date,并且由于它们的设计问题,我们不应该在可以避免的情况下使用它们。CalendarTimestamp我不是 Spring Boot 用户,也不知道将什么传递给查询而不是老式的Date. 我非常希望使用 java.time API 中的一种现代类型(其中和OffsetDateTime所属)存在更现代的解决方案。如果您只需要传递一个日期,而不是一天中的时间,那么 a将是合乎逻辑的,但正如我所说,我不知道。InstantDateTimeFormatterLocalDate如果您不可避免地需要DateSpring Boot 查询:private static Date getToday() {&nbsp; &nbsp; Instant instant = Instant.now();&nbsp; &nbsp; return Date.from(instant);}你的代码出了什么问题?要解析为OffsetDateTime您的日期时间字符串和格式模式字符串,不仅需要指定日期,还需要指定时间和 UTC 偏移量(或者您需要以其他方式提供它们)。在您的代码中,OffsetDateTime成功解析2019-02-16为yyyy-MM-dd,并且由于格式模式不再,它抱怨来自的字符串Timestamp.toString是。但是,缩短字符串不会有帮助,因为这样会丢失一天中的时间,并且无论如何都会丢失 UTC 偏移量,因此它无法正常工作。

温温酱

问题在于您使用的模式。尝试这个:-DateTimeFormatter&nbsp;format&nbsp;=&nbsp;DateTimeFormatter.ofPattern("yyyy-MM-dd&nbsp;HH:mm:ss.SSS");代替:-DateTimeFormatter&nbsp;format&nbsp;=&nbsp;DateTimeFormatter.ofPattern("yyyy-MM-dd");
随时随地看视频慕课网APP

相关分类

Java
我要回答