嘗試從格式字符串去掉小數秒。我遇到了同樣的問題,但格式略有不同。我的輸入格式不是ISO格式(不是「T」,也沒有「Z」),但症狀是相同的 - 時間是隨機分佈的幾分鐘和幾秒鐘,但其他一切都很好。這是我的日誌結果看起來像:
當使用小數第二格式:
SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");
# Parsed date: 2011-05-27 17:11:15.271816 => Fri May 27 17:15:46 EDT 2011
# Parsed date: 2011-05-27 17:09:37.750343 => Fri May 27 17:22:07 EDT 2011
# Parsed date: 2011-05-27 17:05:55.182921 => Fri May 27 17:08:57 EDT 2011
# Parsed date: 2011-05-27 16:55:05.69092 => Fri May 27 16:56:14 EDT 2011
# Parsed date: 2011-05-27 16:38:35.50348 => Fri May 27 16:39:25 EDT 2011
我從格式取下分數秒固定它。
SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
# Parsed date: 2011-05-27 17:11:15.271816 => Fri May 27 17:11:15 EDT 2011
# Parsed date: 2011-05-27 17:09:37.750343 => Fri May 27 17:09:37 EDT 2011
# Parsed date: 2011-05-27 17:05:55.182921 => Fri May 27 17:05:55 EDT 2011
# Parsed date: 2011-05-27 16:55:05.69092 => Fri May 27 16:55:05 EDT 2011
# Parsed date: 2011-05-27 16:38:35.50348 => Fri May 27 16:38:35 EDT 2011
我認爲正在發生的是,輸入字符串的我的「小數秒」的部分過長(同樣是在OP例如真)。它似乎只有三個小數位。如果你做數學(取第一個例子):
- 分數秒=0.271816秒
- 日期格式所看到的是第二
- 一千分之二十七萬一千八百一十六==的
271816/1000
271秒
- 六十〇分之二百七十一=4分鐘
- 271%60 =31秒
- 17時11分15秒到17點15分46秒正是4分鐘,31秒關閉
來源
2011-05-27 21:25:54
Joe
是,SimpleDateFormat的無法處理微秒。最簡單的方法是去掉額外的3位數字,例如date = date.substring(0,date.length() - 4)+「Z」; – 2012-04-05 10:51:16
@scottw:除了不會總是有效的,就像你在我的例子中看到的那樣,最後2個項目只有5個數字,而不是6個;所以在某些情況下,可能只有1位小數,這是完全錯誤的!如果你簡單地截斷字符串只有3個小數位,那麼它也可以正常工作。在我們的例子中,我們不需要微秒(我想很多人也會同意這一點),所以事實證明,從格式字符串中刪除'S'就足以從中獲得可用的時間。如果你確實需要小數秒,那麼是的,你必須做一些字符串操作。 – Joe 2012-04-10 19:02:26
多數民衆贊成在一個好點喬 - 我的解決方案只工作,因爲我正在從一個服務,總是提供小數秒的6位數(包括零填充),所以我可以擺脫字符串操作。 – 2012-05-17 19:23:42