偏移量为的日期的DateTime ParseException



如何解析像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")

这是标准的ISO 8601格式。如果您使用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();

如果您使用旧的JDK-SimpleDateFormat,请尝试以下Java7模式:

yyyy-MM-dd'T'HH:mm:ss.SSSXXX

原因在javadoc:中给出

三个字母ISO8601时区:签署TwoDigit小时:分钟

如果你使用JodaTime,你不应该使用SimpleDateFormat,而应该使用Joda解决方案,否则你只会以一种令人困惑的方式混合JDK和Joda类型:

DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

由于您对Jespers的评论而更新答案:

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

DateTime dt = ...;
java.util.Date jdkDate = dt.toDate();

相关内容

  • 没有找到相关文章