字符串到日历转换,同时保持时间

时间:2011-06-17 10:02:58

标签: java string formatting calendar

我正在尝试输出一个也包含时间的日历对象。我已经使用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检测到它?

4 个答案:

答案 0 :(得分:5)

您需要使指定的日期格式与数据的实际格式匹配。在这种情况下,你错过了冒号,你期望不存在的空格。看起来您的格式应为"yyyyMMdd-HH:mm:ss"

此外,捕获并记录错误但随后继续当前日期,好像什么都没发生几乎肯定是错误的做法。为什么不宣布stringToCalendar抛出ParseException

(最后,我个人发现Joda Time是一个很多更好的API用于日期和时间工作。如果你正在做这样的重要工作,你至少应该看一下并且考虑切换。)

答案 1 :(得分:1)

你是不是错过了冒号,比如yyyyMMdd - HH:mm:ss?您也可以观看额外的空间。

答案 2 :(得分: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;
}

答案 3 :(得分:0)

“yyyyMMdd - HHmmss” - > “的 YYYYMMDD-HH:MM:SS