无法解析字符串到目前为止

时间:2015-01-14 21:44:37

标签: java parsing date

服务器以格式“星期六,2015年1月10日07:24:00 +0100”返回日期。

我尝试将此字符串解析为日期,但它没有成功。

这是我的解析代码:

    SimpleDateFormat format = new SimpleDateFormat("dd.Mm.yyyy");
        try {
            Date date = format.parse("Sat, 10 Jan 2015 07:24:00 +0100");
            tvDate.setText(date.toString());
        } catch (ParseException e) {
            e.printStackTrace();
        }

3 个答案:

答案 0 :(得分:4)

这是您要使用的格式:

SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");

为什么?

The documentation goes over the symbols,但在大多数情况下......

  • EEE与简写日相匹配
  • dd匹配两位数的日期(因此01到31)
  • MMM匹配一个三个字母的月份(1月份)
  • yyyy匹配四个字母的年份
  • HH:mm:ss Z是完整的24小时制的简写(足够),Z表示与GMT的偏移。

答案 1 :(得分:1)

如果你不关心+0100:

,你应该使用这样的格式
SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss");
< - > E - 是星期几,如“星期六”

d - 每月的某一天

M - 是月份

y - 是年份

h - 是小时

m - 是分钟

s - 是第二个

答案 2 :(得分:-1)

如果您真的关心时区,您需要做的是将SimpleDateFormat实例的String格式更改为表示要返回的日期字符串的内容。

以下是一个例子:

public static Date stringToDate(String dateString) throws ParseException {
    final SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");
    return format.parse(dateString);

}

public static void main(final String[] args) throws ParseException {
    Date example = stringToDate(
            "Sat, 10 Jan 2015 07:24:00 +0100");
}

您可能还需要考虑SimpleDateFormat不是线程安全的,如果使用不当可能会导致意外行为。这是一个非常有用的解释:

http://javarevisited.blogspot.com/2012/03/simpledateformat-in-java-is-not-thread.html