Java SimpleDataFormat的不可解析日期异常

Java SimpleDataFormat的不可解析日期异常,java,android,date,simpledateformat,milliseconds,Java,Android,Date,Simpledateformat,Milliseconds,我试图从日期中获取毫秒,但我得到了异常 java.text.ParseException:无法解析的日期:“Thu Jul 25 10:56:29 GMT+2019年02:00” 这就是我到目前为止所做的: 我从一个日期选择器获取日期,模式为“EEE-MMM-dd-HH:mm:ss-zzz-yyy”,然后传递给一个方法以获取毫秒: long milliDate = parseIso8601(dateTimeCalendar.getTime().toString()); private stat

我试图从日期中获取毫秒,但我得到了异常

java.text.ParseException:无法解析的日期:“Thu Jul 25 10:56:29 GMT+2019年02:00”

这就是我到目前为止所做的:

我从一个日期选择器获取日期,模式为“EEE-MMM-dd-HH:mm:ss-zzz-yyy”,然后传递给一个方法以获取毫秒:

long milliDate = parseIso8601(dateTimeCalendar.getTime().toString());

private static long parseIso8601(String value) {
    try {
        return new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US).parse(value).getTime();
    } catch (ParseException ignored) {
        return 0;
    }
}

我得到了异常,它返回0。我不知道怎么了。谢谢

您可以使用日期选择器和时间选择器中的值创建日历对象:

Calendar calendar = Calendar.getInstance();
calendar.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), 
             timePicker.getCurrentHour(), timePicker.getCurrentMinute(), 0);
long startTime = calendar.getTimeInMillis();

区域中的问题,zzz期望时区名称,例如EST、GMT或其他

您的案例的正确模式:

EEE MMM dd HH:mm:ss 'GMT'XXX yyyy

我尝试运行您的相同代码parseIso8601(“Thu Jul 25 10:56:29 GMT+2019 02:00”),它正在我的机器上运行,但也无法复制。您的代码在我的桌面Java 11上运行良好。作为一个旁白,考虑扔掉长期过时和臭名昭著的麻烦代码< SimpleDateFormat >代码>和朋友,并添加到Android项目中,以便使用<代码> java.时间>代码>,java java日期和时间API。使用它会更好。来自日期选择器的日期可能已经是
date
对象。没有理由将其转换为字符串并将该字符串解析回日期。另一方面,你的方法名
parseIso8601
是误导性的。您正在解析的格式与ISO 8601没有相似之处。我不明白。以GMT-08:00
z
模式字母匹配的时区为例,我认为它应该是有效的。