我正在尝试将字符串转换为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");
答案 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
我实际上建议您同时指定格式化程序的时区 - 否则它将使用默认时区。
你在哪个地方?也许这会导致问题...