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