我正在使用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进行数据库插入。 –