Java 带有偏移量的日期的DateTime ParseException

Java 带有偏移量的日期的DateTime ParseException,java,date,datetime,Java,Date,Datetime,如何解析日期字符串,如2014-04-25T01:50:00.000-06:00?我正在使用Joda DateTime,并尝试了以下方法: public static String formatDate(Date d){ SimpleDateFormat mdyFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.00'0Z'"); String mdy = mdyFormat.format(d); return mdy

如何解析日期字符串,如2014-04-25T01:50:00.000-06:00?我正在使用Joda DateTime,并尝试了以下方法:

public static String formatDate(Date d){
    SimpleDateFormat mdyFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.00'0Z'");
    String mdy = mdyFormat.format(d);
    return mdy;
}
但是,结果是一个错误:

java.text.ParseException:不可解析日期: 2014-04-25T01:50:00.000-06:00


请尝试以以下方式定义格式:

 DateFormat mdyFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
如果使用旧的JDK SimpleDataFormat,请尝试以下Java7模式:

yyyy-MM-dd'T'HH:mm:ss.SSSXXX
原因如下:

三字母ISO8601时区: 签署两位数:分钟

如果使用JodaTime,则不应使用SimpleDataFormat,而应使用a,否则,您只能以令人困惑的方式混合使用JDK和Joda类型:

DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
由于您对Jespers的评论而更新答案:

如果您只想将DateTime转换为java.util.Date,那么这既不是格式问题,也不是解析问题。解决方案要简单得多。只需使用:


这是标准的ISO8601格式。如果您使用的是Joda Time:

DateTimeFormatter fmt = ISODateTimeFormat.dateTimeParser();
DateTime dateTime = fmt.parseDateTime("2014-04-25T01:50:00.000-06:00");

// Convert it to java.util.Date
Date date = dateTime.toDate();

Try:yyyy-MM-dd'T'HH:MM:ss.ssszey-Larme,我已经尝试过了,但它也不起作用。为什么你的问题是如何解析,而你的代码是关于格式化日期的?谢谢Jesper的建议,这对我以后会很有用。然而,我当前的问题是,我需要将DateTime转换为java.util.Date,当我尝试将值解析为Date时,会出现此异常;你只要打电话给托德就行了。我会更新我的答案。
DateTimeFormatter fmt = ISODateTimeFormat.dateTimeParser();
DateTime dateTime = fmt.parseDateTime("2014-04-25T01:50:00.000-06:00");

// Convert it to java.util.Date
Date date = dateTime.toDate();