2011-06-17 46 views
0

我試圖輸出也包含時間的日曆對象。我已經編寫了一個使用SimpleDateFormat來完成此操作的方法。字符串日曆對話,同時保持時間

public static Calendar stringToCalendar(String string) 
{ 
    Calendar cal = Calendar.getInstance(); 
    DateFormat formatter = new SimpleDateFormat("yyyyMMdd - HHmmss"); 
    Date date = new Date(); 
    try { 
     date = formatter.parse(string); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    cal.setTime(date); 
    return cal; 
} 

我的輸入字符串爲 「20110614-15:05:00」

但是它不喜歡這種價值並給了我以下錯誤:

java.text.ParseException: Unparseable date: "20110614-15:05:00" 
at java.text.DateFormat.parse(DateFormat.java:337) 
at transformer.Converter.stringToCalendar(Converter.java:22) 

爲何不能檢測15:05:00作爲一個時間?

回答

5

你需要讓你指定的日期格式相匹配的數據實際格式。在這種情況下,你錯過了冒號,你期待空間不存在。它看起來像你的格式應該是"yyyyMMdd-HH:mm:ss"

此外,捕獲並只記錄一個錯誤,但隨後繼續當前日期,如果沒有發生任何事情幾乎肯定是錯誤的事情。爲什麼不只是宣佈stringToCalendar拋出ParseException

(最後,我個人認爲Joda Time是日期和時間的工作更好的API。如果你正在做這樣的工作顯著,你至少應該看看它和考慮切換。)

1

您是否錯過了冒號,如yyyyMMdd - HH:mm:ss?你也可以看額外的空間。

0

「年月日 - HHMMSS」 - > 「YYYYMMDD-HH:MM:SS

+0

這會失敗,「15」爲「hh」意味着12小時制。 – 2011-06-17 10:10:12

1
public static Calendar string2Calendar(String string) { 
    SimpleDateFormat formatter; 
    Date date = null; 
    formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
    try { 
     date = (Date) formatter.parse(string); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    Logger.printMessage("tag", String.format("%tc", cal), 
      Logger.DEBUG); 
    return cal; 
}