2014-04-24 33 views
2
String s = 19.17.38.008000; 
DateFormat f = new SimpleDateFormat("HH.mm.ss.SSSSSS"); 
Date d = f.parse(s); 
system.out.println(d); 

這是我正在運行時,它打印它打印的時間 十九點17分46秒,除了精細的代碼。請人給我講解一下SimpleDateFormat的正確分析串

補充說明:

String s = 19.17.38.008000; 
DateFormat f = new SimpleDateFormat("HH.mm.ss"); 
Date d = f.parse(s); 
system.out.println(d); 

這個代碼將正確打印相同的串減去毫秒。有人請告訴我我在這裏錯過了什麼。

編輯:感謝您的答案我認爲這裏的問題是我讀38.008000爲0.008秒,但sdf讀取SSS爲8000毫秒,這是不一樣的事情。

+0

如果我正確理解答案,它將忽略前導2個零並將尾隨3註冊爲8000毫秒,然後將其添加到時間。是否有一個已知的解決方法,將顯示毫秒,而不是添加它們,因爲我比較2次,有時會有毫秒中的6位數 –

回答

3

SSSSSS仍然是毫秒,即使你把其中的6。 19:17:38 + 008000毫秒是19:17:46所以它是正確的,如果令人驚訝的話。

AFAIK Java 8中的java.time庫支持微秒(和納秒)時間戳。

謝謝@Meno的更正。

+0

謝謝大家的幫助,只是爲了澄清每個人都在說的問題。 當我讀3.01秒時,我將其解釋爲3秒和1秒1秒。 simpleDateFormat中的'S'表示完全不同的毫秒。所以3.33455解釋爲「s。SSSSS「與3 secons相同,33455毫秒不是3秒和33.455%秒。 –

+0

感謝您提供的更多信息,這是一個尚未更新到java 8的企業框架 –

+0

@ user3570467有一個backport for Java 7 https://github.com/ThreeTen/threetenbp –

5

SimpleDateFormat課程將008000解釋爲8000毫秒或8秒,並將其添加到已解釋的38秒。

如果我們有這樣的:

String s = "19.17.38.009000"; 

然後我們會得到這樣的輸出,用滴加9秒時:

Thu Jan 01 19:17:47 PST 1970 

從字符串的結尾處刪除3個額外的零。如果有6位數字,那麼他們看起來應該代表微秒(百萬分之一秒),而不是毫秒(千分之一秒)。

String s = "19.17.38.008"; 

輸出:

Thu Jan 01 19:17:38 PST 1970 
+0

我喜歡這個答案,但我無法更改字符串本身我正在接收字符串從一個數據庫,並且必須將其與另一個日期進行比較,確切精度爲6毫秒。但是,這個答案確實解釋了我正在發生的事情,我只能解決它。 –

+0

您不必更改來自數據庫的'String'的源,但您可以隨時從數據庫中刪除最後3位數字 - 就像's = s.substring(0,s .length() - 3);'。 – rgettman

+0

我想到了,但不幸的是,這將只適用於這種確切的情況下,我做了成千上萬的這些,將會有很多說.334887或沒有尾隨或領先0的東西,因此不能被截斷相同的方式 –

相關問題