Joda无效的格式异常

时间:2011-11-20 15:29:55

标签: java jodatime

我正在尝试将字符串转换为Joda DateTime对象。日期来自SQLlite日期字段,例如:

 2011-11-19 18:29:41

我正在使用的代码是:

 DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("2011-11-19 18:29:41").withZone(DateTimeZone.getDefault());

但我得到了这个例外:

 java.lang.IllegalArgumentException: Invalid format: "2011-11-19 18:29:41" is malformed at "11-11-19 18:29:41"
编辑:这是我正在做的更多细节:

我有一个实用工具类,它有一个我用来将字符串转换为DateTime的方法:

public static DateTime GetItemDate(final String date, String pattern)
{
    return DateTimeFormat.forPattern(pattern).parseDateTime(date).withZone(DateTimeZone.getDefault());
}

然后我打电话给:

 Utilities.GetItemDate("2011-11-19 18:29:41", "YYYY-MM-dd HH:mm:ss");

1 个答案:

答案 0 :(得分:4)

你给出的两种模式实际上都适用于我(我冒昧地使方法名称遵循Java命名约定,但主体是相同的。)

虽然 的模式不同,但是“y”是“年”(可能是负面的)而“Y”是“年代的年代”,这是没有价值的。

import org.joda.time.*;
import org.joda.time.format.*;

public class Test {
    public static void main(String[] args) {
        // Works
        DateTime dateTime = getItemDate("2011-11-19 18:29:41",
                                        "yyyy-MM-dd HH:mm:ss");

        System.out.println(dateTime);

        // Works for me too...
        dateTime = getItemDate("2011-11-19 18:29:41",
                               "YYYY-MM-dd HH:mm:ss");

        System.out.println(dateTime);
    }

    public static DateTime getItemDate(String date, String pattern) {
        return DateTimeFormat.forPattern(pattern)
            .parseDateTime(date)
                .withZone(DateTimeZone.getDefault());
    }
}

我机器上的输出:

2011-11-19T18:29:41.000Z
2011-11-19T18:29:41.000Z

我实际上建议您同时指定格式化程序的时区 - 否则它将使用默认时区。

你在哪个地方?也许这会导致问题...