2014-10-22 31 views
1

我有一個文本文件中的字符串這樣的日子進行的注日期:String string = 2014-10-03 00:58:59.765 所以我分析這種方式:解析字符串與SimpleDateFormat的,毫秒改變

Date timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") 
         .parse(string); 

然而,一些時間戳較少在毫秒上超過3位,並且我得到一個ParseException,試圖對它們使用相同的SimpleDateFormat。編輯:它發生在幾個毫秒000例如:java.text.ParseException: Unparseable date: "2014-10-03 00:59:49"

這是在我的工作:

if (string.length() == 23) { 
        timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") 
          .parse(string); 
       } else if (string.length() == 22) { 
        timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS") 
          .parse(string); 
       } else if string.length() == 21) { 
        timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS") 
          .parse(string); 
       } else if (string.length() == 19) { 
        timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 
          .parse(string); 
       } 

是不是有更好的辦法來做到這一點?

+1

2014-10-03 00:58:59.7 2014-10-03 00:58:59.71 2014-10-03 00:58:59.716應該用yyyy-MM-dd HH:mm:ss.SSS 。你能粘貼你的字符串與你解析異常? – SMA 2014-10-22 11:35:51

+0

是的,它在這種情況下毫秒爲000:java.text.ParseException:Unparseable date:「2014-10-03 00:59:49」 – George 2014-10-22 11:37:18

回答

1

您可以通過.字符串中的幫助包含SSS決定,並注意它並不總是安全的,所以一定要小心,因爲對於SSS它可以解析.767.76.7毫秒。這裏

Date timestamp = null; 

    if(string.contains(".")) { 
     timestamp =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") 
     .parse(string); 
    } else { 
     timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 
     .parse(string); 
    } 

    System.out.println(timestamp); 

注意,如果您解析milisecond.76.SSS比檢索過程中你必須將它與.SS格式化否則返回.076而不是.76同樣的事情發生與其他。所以,小心!

+0

謝謝,這很完美! – George 2015-01-14 12:28:21