【发布时间】:2015-02-07 08:32:51
【问题描述】:
我花了几个小时才弄清楚我的代码中 TimeStamps 发生了什么。
Oracle DB 和 java 应用程序都在 PDT 中
从数据库中选择:
select id, time_stamp from some_Table where id = '3de392d69c69434eb907f1c0d2802bf0';
3de392d69c69434eb907f1c0d2802bf0 09-DEC-2014 12.45.41.354000000 PM
select id, time_stamp at time zone 'UTC' from some_Table where id = '3de392d69c69434eb907f1c0d2802bf0';
3de392d69c69434eb907f1c0d2802bf0 09-DEC-2014 12.45.41.354000000 PM
Oracle 数据库中的字段是TimeStamp,因此没有存储时区信息。
Timestamp dbTimeStamp = dbRecord.getLastLoginTime();
System.out.println(dbTimeStamp.toString()); // 2014-12-09 12:16:50.365
System.out.println(dbTimeStamp.getTime()); // 1418156210365 --> Tue Dec 09 2014 20:16:50 UTC?
根据documentation,getTime()
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数 由这个 Timestamp 对象表示。
为什么在getTime() 的响应中增加了8 hours (PDT - UTC) 的额外时间?
【问题讨论】:
-
因为您会从引用的文本中注意到:
since January 1, 1970, 00:00:00 GMT。注意到那里的GMT了吗?