得到一個以此格式進入的字符串:YYYY-MM-DD-HH.MM.SS.NNNNNN時間戳記來自DB2數據庫。我需要將它解析成java.sql.Timestamp並且不會失去任何準確性。到目前爲止,我一直無法找到現有的代碼來解析這一點到微秒。 SimpleDateFormat返回一個Date並且僅解析爲毫秒。簡短地看了一下JodaTime,並沒有看到這可以起作用。將Java字符串轉換爲sql.Timestamp
26
A
回答
58
您是否嘗試過使用Timestamp.valueOf(String)
?它看起來像它應該做幾乎正是你想要的東西 - 你只需要您的日期和時間之間的分隔符更改爲空間,小時和分鐘,分鐘和小時之間的,以冒號:
import java.sql.*;
public class Test {
public static void main(String[] args) {
String text = "2011-10-02 18:48:05.123456";
Timestamp ts = Timestamp.valueOf(text);
System.out.println(ts.getNanos());
}
}
假設你已經驗證字符串的長度,這將轉化爲正確的格式:
static String convertSeparators(String input) {
char[] chars = input.toCharArray();
chars[10] = ' ';
chars[13] = ':';
chars[16] = ':';
return new String(chars);
}
另外,通過採取串並使用約達時間或SimpleDateFormat
解析到毫秒(我喜歡極大時間約達,但你的里程可能會有所不同)。然後將字符串的其餘部分作爲另一個字符串並使用Integer.parseInt
進行解析。然後您可以很容易地將這些值組合起來:
Date date = parseDateFromFirstPart();
int micros = parseJustLastThreeDigits();
Timestamp ts = new Timestamp(date.getTime());
ts.setNanos(ts.getNanos() + micros * 1000);
+0
Timestamp.valueOf(String)如何處理時區? – fudy
7
您可以使用Timestamp.valueOf(String)
。該文檔聲明它瞭解格式爲yyyy-mm-dd hh:mm:ss[.f...]
的時間戳,因此您可能需要更改傳入字符串中的字段分隔符。
然後,如果你打算這樣做,那麼你可以自己解析它,並使用setNanos
方法來存儲微秒。
1
我相信你需要這樣做:
- 使用的SimpleDateFormat等來everythingDate轉換everythingButNano。使用Long.valueof(納米)
- 轉換everythingDate用新的時間戳時間戳(everythingDate.getTime())
- 將TIMESTAMP納秒與Timestamp.setNano()
選項
4
這裏是預期的方式做到這一點:
String timestamp = "2011-10-02-18.48.05.123";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd-kk.mm.ss.SSS");
Date parsedDate = df.parse(timestamp);
誠然,它只有毫秒的分辨率,但在比Twitter更慢的所有服務,這是所有你需要的,尤其是因爲大多數機器甚至不追蹤到實際的納秒。
1
如果你有時間的格式字符串,如1441963946053,你根本就做一些事情如下:
//String timestamp;
Long miliseconds = Long.valueOf(timestamp);
Timestamp ti = new Timestamp(miliseconds);
相關問題
- 1. Java - 將字符串轉換爲字符[]
- 2. Java - 將字節[]轉換爲字符串
- 3. 將NSData轉換爲Java字符串
- 4. java將字符串轉換爲UTF
- 5. Java - 將字符串轉換爲列表
- 6. 將對象轉換爲字符串(java)
- 7. 將字符串轉換爲blob java
- 8. 將流轉換爲字符串Java/Groovy
- 9. java將inputStream轉換爲base64字符串
- 10. Java:將字符串轉換爲日期
- 11. Java:將字符串轉換爲org.eclipse.uml2.uml.Type
- 12. 將Unicode轉換爲字符串Java
- 13. 將字符串轉換爲浮點Java
- 14. 將字符串轉換爲char [] - Java
- 15. 將Java字符串轉換爲Json
- 16. 將字符串「3,55」轉換爲「3.55」java
- 17. Android/Java - 將DataInputStream轉換爲字符串
- 18. Java將字符串轉換爲整數
- 19. Java:將double轉換爲字符串
- 20. java將元素轉換爲字符串
- 21. 將Java字符串轉換爲數組
- 22. 將字符串轉換爲double(java/android)
- 23. Java - CoreNLP將字符串轉換爲樹
- 24. 將Java字符串轉換爲數組
- 25. 將字符串轉換爲byte []和byte []轉換爲JAVA中的字符串
- 26. 將字符串轉換爲字符串
- 27. 將字符串轉換爲字符串
- 28. 將字符串轉換爲字符串
- 29. 將字符串轉換爲int,int轉換爲字符串
- 30. Java - 將轉義字符串轉換爲字符
如果時間戳來自一個DB2數據庫,你爲什麼要讀它作爲一個字符串,而不是看它作爲時間戳直接? –
時間戳記來自數據庫,客戶端將其返回給我們進行密鑰讀取。 – Dan
如果您使用時間戳進行鍵讀,並且您大概首先將其發送給客戶端,則可以考慮將其轉換爲長納秒,然後將其讀回,而不是字符串值。即發出'long l = ts.getTime()',然後用'new Timestamp(l)'讀回它。你甚至可以序列化這個值來節省線上的空間(但在這種情況下你會失去人的可重寫性)。 – Luciano