簡體   English   中英

將數據保存到MySql時日期時間值不正確

[英]Incorrect datetime value while saving data to MySql

我遇到了一個有關將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和Hibernate。 有人能幫我嗎?

顯然,您只想在表中存儲一個時間部分,但是您使用了timestamp數據類型,該數據類型既存儲日期和時間,又具有其他特殊功能。

如果只想存儲時間,則使用MySQL的時間數據類型

MySQL檢索並以'HH:MM:SS'格式顯示TIME值(或對於大型小時值顯示為'HHH:MM:SS'格式)。 TIME值的范圍可能是'-838:59:59'到'838:59:59'。 小時部分可能是如此之大,因為“時間”類型不僅可以用來表示一天中的某個時間(必須少於24小時),而且可以用來表示經過的時間或兩個事件之間的時間間隔(可能遠大於24小時,甚至是負面的)。

鏈接的文檔包含一個解釋時間字面量如何解釋的鏈接。

您的列類型為TIMESTAMP

11.3.1 DATE,DATETIME和TIMESTAMP類型

TIMESTAMP數據類型用於包含日期和時間部分的值。 TIMESTAMP的UTC范圍為'1970-01-01 00:00:01'至UTC'2038-01-19 03:14:07'。

解決方案,您可以直接在數據庫或刪除表中將start_time和end_time列類型更改為DATETIME,並像這樣更改您的實體

@Column(name = "start_time", columnDefinition="DATETIME")
@Temporal(TemporalType.TIMESTAMP)
private Date startTime;

希望對你有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM