我在 Oracle SQL 中遇到了这个奇怪的时间戳到日期转换问题。
下面是 SQL 语句:
String INSERT_SQL = String.format("INSERT INTO AUDIT_TASK (%s, %s, %s, %s) VALUES (AUDIT_TASK_SEQ.nextval,?,?,?)",ID,CLASS_NAME,TASK_STEP_TIMESTAMP,OPERATOR);
java.util.Calendar utcCalendarInstance = Calendar.getInstance(TimeZone .getTimeZone("UTC"));
java.util.Calendar cal = Calendar.getInstance();
final PreparedStatement stmt = con.prepareStatement(INSERT_SQL);
stmt.setString(1, audit.getClassName().getValue());
// Save the timestamp in UTC
stmt.setTimestamp(2,new Timestamp(cal.getTimeInMillis()), utcCalendarInstance);
当我执行此语句时,虽然大多数时候 creation_date 和 task_step_timestamp 日期是相同的,但有时我会生成带有一些虚假日期的 task_step_timestamp - 例如“25-APR-0000”或“00-Jan-0001”等。
- 身份证 | 创建日期 | Task_step_timestamp
- 1 |2018 年 4 月 27 日 17:58:53| 25-APR-0000 09:00:45
- 2 |2018 年 4 月 27 日 18:06:25| 00-1-0001 09:18:25
Oracle DB 中 task_step_timestamp 列的数据类型为“DATE”。
有人可以提出时间戳到日期的这种不一致转换的原因吗?