[英]How do I retrieve the right timestamp from a MySQL database in Java?
我將測量結果存儲在MySQL數據庫中。 度量包含一個時間戳字段,該字段以以下格式存儲時間戳:
2015-10-10 10:10:10.11 (所以有兩位毫秒)
在我的Java代碼中,我使用以下方法檢索此值:
resultSet.getTimestamp(id)
當我打印此值時,它會給我:
2015-10-10 11:11:11.000000011
因此,我試圖弄清楚為什么它的行為如此,應該如何解決這個問題,以便獲得正確的價值?
編輯:
使用測量中的select *值時,這些值會正確顯示在數據庫內部
我猜它應該在Java / JDBC檢索方式的某個位置。 getTimestamp和getString都給我相同的結果。
編輯2:
resultSet = statement.executeQuery("select * from measurement");
Measurement m;
while(resultSet.next()) {
m = new Measurement(
resultSet.getString(1),
resultSet.getString(2),
resultSet.getDouble(4),
resultSet.getTimestamp(3));
System.out.println(m);
}
我從不喜歡MySQL的JDBC驅動程序如何處理TIMESTAMP類型。 我會用:
select ROUND(UNIX_TIMESTAMP(col1)*1000) FROM measurement
然后用
java.util.Date d = new java.util.Date(resultSet.getLong(1));
我一直在研究實施。 即使有點麻煩,我還是發現了一些“有趣”的信息。
com.mysql.jdbc.ResultSet.getTimestamp()
的實現有一些線索:
int year = 0;
int month = 0;
int day = 0;
int hour = 0;
int minutes = 0;
int seconds = 0;
int nanos = 0; <<< CLUE
和
if (numDigits < 9) {
int factor = (int) (Math.pow(10, 9 - numDigits));
nanos = nanos * factor;
}
和
TimeUtil.fastTimestampCreate(tz, year, month, day, hour, minutes, seconds, nanos);
因此,它似乎可以解析“。”之后的所有內容。 以納秒為單位,以前導零結尾。 因此.11
變成.000000011.
所以我認為這可以解釋為什么會這樣...
解決此問題的方法可能有很多,其中包括:
UNIX_TIMESTAMP
作為user5449350的答案。 UNIX_TIMESTAMPS
而不是TIMESTAMP
/ DATETIME
更正有問題的Date對象並使用Calendar
對其進行更正
Date t = resultSet.getTimestamp(3); Calendar c = Calendar.getInstance(); c.setTime(t); c.set(Calendar.MILLISECOND, ((Timestamp)t).getNanos()); t = c.getTime();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.