2011-06-17 22 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; 
} 
相关问题