将数据保存到MySql时,日期时间值不正确

时间:2016-10-27 08:10:33

标签: java mysql spring hibernate

我遇到了一个将java Date对象保存到MySql db的奇怪问题。这是我得到的错误:

Incorrect datetime value: '1970-01-01 02:55:00' for column 'start_time' at row 1

我的sql脚本

CREATE TABLE `schedules` (
            `id` bigint(20) NOT NULL AUTO_INCREMENT,
            `start_time` timestamp NOT NULL,
            `end_time` timestamp NOT NULL,
            PRIMARY KEY (`id`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8

我的部分实体:

 @Column(name = "start_time")
 private Date startTime;

当我尝试做类似

的事情
String time = "02:55"
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
scheduleEntity.setStartTime(sdf.parse(time));

repository.save(scheduleEntity);

它有误。但是,当我使用"16:00"字符串进行解析时,它可以完美地工作。我使用Spring Boot,Spring Data with Hibernate。有人能帮我吗?

2 个答案:

答案 0 :(得分:0)

显然,您只想在表格中存储一个时间部分,但是您使用timestamp数据类型,它同时存储日期和时间,并具有其他特殊功能。

如果您只想存储时间,请使用MySQL的time data type

  

MySQL以'HH:MM:SS'格式(或大小时值的'HHH:MM:SS'格式)检索并显示TIME值。 TIME值的范围可以从'-838:59:59'到'838:59:59'。小时部分可能太大,因为TIME类型不仅可以用来表示一天中的时间(必须小于24小时),还可以用于表示两个事件之间的经过时间或时间间隔(可能远大于24小时,甚至是负面的。)

链接的文档包含一个解释time literals are interpreted

的链接

答案 1 :(得分:-1)

您的列类型是TIMESTAMP

11.3.1 The DATE, DATETIME, and TIMESTAMP Types

  

TIMESTAMP数据类型用于包含日期和时间部分的值。 TIMESTAMP的范围为'1970-01-01 00:00:01'UTC到'2038-01-19 03:14:07'UTC。

<强>解决方案 您可以直接在DB或drop table中将start_time和end_time列类型更改为DATETIME,并像这样更改实体

@Column(name = "start_time", columnDefinition="DATETIME")
@Temporal(TemporalType.TIMESTAMP)
private Date startTime;
希望它会有所帮助