【问题标题】:Unparsable Date exception with SimpleDateFormatSimpleDateFormat 的不可解析日期异常
【发布时间】:2019-12-04 14:19:20
【问题描述】:

我正在尝试从日期中获取毫秒数,但出现异常

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

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

我使用“EEE MMM dd HH:mm:ss zzz yyyy”模式从 DatePicker 中获取日期,然后将其传递给获取毫秒数的方法:

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。我不知道出了什么问题。谢谢

【问题讨论】:

  • 我尝试运行相同的代码 parseIso8601("Thu Jul 25 10:56:29 GMT+02:00 2019") 它正在我的机器上运行
  • 我也无法复制。您的代码在我的桌面 Java 11 上运行良好。顺便考虑扔掉长期过时且臭名昭著的麻烦 SimpleDateFormat 和朋友,并将 ThreeTenABP 添加到您的 Android 项目中,以便使用 java.time,现代 Java 日期和时间 API。使用起来感觉好多了。
  • 日期选择器中的日期可能已经是 Date 对象。没有理由将其转换为字符串并将该字符串解析回Date。另外,您的方法名称parseIso8601 具有误导性。您正在解析的格式与 ISO 8601 没有相似之处。

标签: java android date simpledateformat milliseconds


【解决方案1】:

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

适合您的情况的正确模式:

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

【讨论】:

  • 我不明白。 The docsGMT-08:00 为例,作为与模式字母 z 匹配的时区示例,所以我应该说它应该可以工作。
【解决方案2】:

您可以使用 DatePicker 和 TimePicker 中的值创建一个 Calendar 对象:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-11
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多