我正在使用Java的java.sql.timestamp和java.util.date在Oracle的不同表中存儲時間。所有的Oracle列都是時間戳。Java時間戳在Oracle中存儲12位不同情況下的怪異行爲時間戳
保存12:02 PM時間(12:00至12:59 PM之間的時間)時出現問題。在一些表中它存儲正確的,在它的一些錯誤,即12:02
這裏有情況:
1)在java中:
java.sql.TimeStamp timestamp = new Timestamp(new Date().getTime());
以上新的Date()返回 - 「 Mon May 16 12:02:02 EST 2016「
Oracle列映射僅包含Timestamp。在此特定表中,它將Oracle時間戳存儲爲 - >「16/MAY/16 12:02:02.000000000 AM」。 這是錯誤的,因爲它應該是PM而不是AM,因爲在中午執行的交易是 。
在上表中,Oracle中的所有時間戳都有尾隨000000000毫秒。
2)在Java:
java.sql.TimeStamp timestamp2 = new Timestamp(new Date().getTime());
以上新的Date()返回 - 「週一5月16日12時51分01秒EST 2016」
Oracle列映射只有時間戳。在此特定表中,它將Oracle時間戳存儲爲 - >「16/MAY/16 16/MAY/16 12:51:01.170000000 PM」。這是正確的,因爲它應該只是PM。 在上面的表格中,Oracle中的所有時間戳都有一些值,以ms爲單位。
3)在Java
Date date = new Date();
專賣店在甲骨文timestamp列直接日期和工作正常。它在Oracle列中存儲 「16/MAY/16 12:02:03.446000000 PM」。
我不明白爲什麼時間戳的使用有這樣的差異。
我正在使用Hibernate在數據庫中插入對象。
任何人都可以請在這裏幫忙嗎?
感謝 尼廷
你如何將它插入數據庫?你是否將它作爲綁定參數傳遞?或者作爲一個字符串使用動態SQL? – MT0
顯示錯誤時間的列是實際日期而不是時間戳嗎?我知道你說他們都是時間戳,但這似乎並不完全正確 - 失去秒數表明他們可能並不全是。或者是一些簡單的時間戳,其他都與時區或當地時區?如果是這樣,你可以檢查會話的NLS設置 - 我懷疑有一個隱式轉換或轉換從12小時轉換爲24小時格式。但是,您的實際NLS值將有助於正確解釋。 –
@ MT0:我使用Hibernate進行數據庫插入。 –