【问题标题】:SimpleDateFormat parseSimpleDateFormat 解析
【发布时间】:2017-11-09 16:20:56
【问题描述】:

我对 SimpleDateFormat 有疑问:

错误:

无法解析的日期:“Thu, 09 Nov 2017 16:17:42 GMT”

代码:

DF_SERVER_FORMAT="EEE, dd MMM yyyy HH:mm:ss'Z'"
....
var formater=SimpleDateFormat(DF_SERVER_FORMAT)
formater.parse(source)

【问题讨论】:

  • 也许是缺少逗号?也许时区周围的多余撇号是个问题?
  • 值中有逗号,但模式中缺少逗号。
  • 谢谢,但没有帮助。
  • 你不应该使用引号,它将被视为一个字母而不是解释。

标签: java android kotlin simpledateformat utc


【解决方案1】:

根据SimpleDateFormat documentationZ(大写)适用于 RFC 822 时区,例如-0800

一般时区使用z

这应该可行:

DF_SERVER_FORMAT="EEE, dd MMM yyyy HH:mm:ss z"

【讨论】:

  • "EEE, dd MMM yyyy HH:mm:ss z" 和 "EEE, dd MMM yyyy HH:mm:ss 'z'" 不起作用
  • 为我工作!你一定是在做不同的事情。
  • SimpleDateFormat 提供英语区域设置(例如Locale.ROOTLocale.ENGLISH)以确保它理解英语中的“Thu”和“Nov”可能会有所帮助。
  • 是的,帮助设置区域设置
【解决方案2】:

试试"EEE, d MMM yyyy HH:mm:ss z" 这个模式适合我。

【讨论】:

    【解决方案3】:

    您可以尝试使用您的模式格式化一些日期,以查看差异,然后相应地修复您的模式。这是我在 J2SE 中所做的:

    SimpleDateFormat df = new SimpleDateFormat("EEE dd MMM yyyy HH:mm:ss'Z'");
    System.out.println(df.format(new Date()));
    

    这正在生产:

    2017 年 11 月 9 日星期四 17:49:07Z

    但是,当我使用模式“EEE, dd MMM yyyy HH:mm:ss z”时,它产生了预期的结果:

    2017 年 11 月 9 日星期四 17:51:09 CET

    【讨论】:

      【解决方案4】:

      对于那些对外部依赖(暂时)很好或正在使用 Java 8 或更高版本的人来说,我想提供现代答案。因为我认为SimpleDateFormat 已经过时了。

      现代 Java 日期和时间 API 通常更易于使用。此外,您的字符串采用 RFC 1123 格式,并且现代 API 带有此格式的格式化程序。所以不需要自己构建格式模式字符串(我的代码是纯 Java,我相信你会采用 Kotlin):

          String dateString = "Thu, 09 Nov 2017 16:17:42 GMT";
          OffsetDateTime dateTime = OffsetDateTime.parse(dateString, 
                  DateTimeFormatter.RFC_1123_DATE_TIME);
      

      这会按预期产生OffsetDateTime2017-11-09T16:17:42Z

      要在 Android 上使用此功能,请获取 ThreeTenABP,请参阅 this question: How to use ThreeTenABP in Android Project。 Java 8 及更高版本带有内置的现代 API。如果在非 Android 上使用 Java 6 或 7,则需要 the ThreeTen Backport

      您的代码出了什么问题? 使用您的格式模式字符串,您要求在几秒钟后立即输入文字 Z,中间没有空格。由于您的输入字符串没有Z,因此解析失败(取而代之的是一个空格和偏移ID GMT)。此外,您的代码似乎对语言环境很敏感:如果您的默认语言环境是星期四的缩写不是 Thu 或十一月的缩写不是 Nov,则解析将失败(相反,RFC_1123_DATE_TIME 期望(并要求)日和月独立于语言环境的英文缩写)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-30
        • 2013-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多