具有偏移量的日期的DateTime ParseException

时间:2014-04-22 13:41:10

标签: 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;
}

但是,结果是错误:

  

java.text.ParseException:无法解析的日期:   " 2014-04-25T01:50:00.000-06:00"

3 个答案:

答案 0 :(得分:0)

尝试以这种方式定义格式:

 DateFormat mdyFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")

答案 1 :(得分:0)

如果你使用旧的JDK - SimpleDateFormat试试这个Java7模式:

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

原因在javadoc

  

ThreeLetterISO8601TimeZone:                签署TwoDigitHours:分钟

如果您使用JodaTime,则不应使用SimpleDateFormat而应使用Joda-solution,否则您将只会以混乱的方式混合使用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();

答案 2 :(得分:0)

该标准的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();