2014-04-22 67 views
0

如何解析日期字符串,如2014-04-25T01:50:00.000-06:00?我使用的乔达DateTime和尝试是这样的:带偏移量的日期的DateTime ParseException

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: Unparseable date: "2014-04-25T01:50:00.000-06:00"

+0

尝试:'YYYY-MM-dd'T'HH:MM:ss.SSSZ' – Larme

+0

嘿Larme,我已经试过了,它也不能工作。 – user3560635

+1

为什么你的问题是“如何解析**”,​​但你的代码是关于**格式化**日期? – Jesper

回答

0

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

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

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

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

原因是在javadoc给出:

ThreeLetterISO8601TimeZone: Sign TwoDigitHours : Minutes

如果使用JodaTime你不应该使用SimpleDateFormatJoda-solution否则你只能在一个混乱的方式混合JDK和乔达类型:

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

因为你对Jespers的评论而更新:

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

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

这是标准的ISO 8601格式。如果您在使用约达时间:

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(); 
+0

谢谢Jesper的建议,将来对我有用。不过,我目前的问题是,我需要将DateTime转换为java.util.Date,并且当我尝试将值解析为Date时,我得到此异常。 – user3560635

+0

将Joda'DateTime'转换为'java.util.Date'非常简单;你只需调用'toDate()'就可以了。我会更新我的答案。 – Jesper