为什么错误不可解析的日期发生在Android中?

时间:2019-10-14 07:30:13

标签: java android datetime simpledateformat datetime-parsing

我正尝试将字符串转换为Date,如下所示:

val inputFormat = SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss", Locale.getDefault())
val s = "Mon, 14 Oct 2019 07:10:28"
val time = inputFormat.parse(s)
Log.d("HttpTools", "time server:$time")

但是显示错误

java.text.ParseException: Unparseable date: "Mon, 14 Oct 2019 07:10:28"

我错过了什么吗? 预先感谢。

5 个答案:

答案 0 :(得分:1)

使用以下格式: EEE, dd MMM yyyy hh:mm:ss

答案 1 :(得分:1)

格式错误。

根据to the documentation,您的格式应为

EEE, dd MMM yyyy HH:mm:ss

请注意:

  • DDD变为EEE,因为您需要3个字母的天名

  • hh变为HH,因为您需要白天(0-23)。 hh仅在您使用am/pm

  • 时有效

答案 2 :(得分:1)

如果您使用的是Java-8,则可以使用LocalDateTimeDateTimeFormatter

String text = "Mon, 14 Oct 2019 07:10:28";

DateTimeFormatter format = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss", Locale.getDefault());

LocalDateTime dateTime = LocalDateTime.parse(text, format);

System.out.println(dateTime);    // 2019-10-14T07:10:28

答案 3 :(得分:0)

您必须使用此格式来获取日期

EEE, dd MMM yyyy HH:mm:ss

答案 4 :(得分:0)

遇到了同样的问题,答案与@Meno Hochschild和其他人在评论中建议的一样, 不要使用Locale.getDefault(),因为您的字符串中包含英文文本(月份名称),因此,如果Locale.getDefault()中的本地语言不返回英文,则即使模式为对。 这仅仅是因为语言环境与输入字符串语言不匹配。 在我的情况下,我有一个与您的字符串相似的字符串,只是日期有所不同,并使用Locale.getDefault()在我的情况下返回了德语,但我的日期字符串中的月份名称是用英语写的,因此我总是收到此异常。 如果您知道传入的日期字符串始终以英语进行本地化,则只需将Locale.ENGLISH设置为SimpleDateFormat的第二个参数。