【问题标题】:What is the Time format for this "date": "2014-08-20 00:00:00 -0500"?这个“日期”的时间格式是什么:“2014-08-20 00:00:00 -0500”?
【发布时间】:2014-06-20 19:24:23
【问题描述】:

我尝试通过以下方式转换此日期:

SimpleDateFormat fromFormat  = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSSZ");

但我得到了:

 java.text.ParseException: Unparseable date: "2014-09-20 00:00:00 -0500" (at offset 20)

【问题讨论】:

    标签: java android date


    【解决方案1】:

    “-0500”是与 UTC 的偏移量,采用 RFC822 格式。你只需要Z,没有SSS

    Android SimpleDateFormat docs 在表中有这样的:

    • 符号:Z
    • 含义:时区 (RFC 822)
    • 种类:(时区)
    • 示例:Z/ZZ/ZZZ:-0800 ZZZZ:GMT-08:00 ZZZZZ:-08:00

    当然,我也会亲自指定语言环境:这是一种机器可读的格式,而不是面向人类的格式,所以我通常会指定Locale.US

    SimpleDateFormat format  = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z",
                                                    Locale.US);
    String text = "2014-08-20 00:00:00 -0500";
    System.out.println(format.parse(text));
    

    【讨论】:

      【解决方案2】:

      answer by Jon Skeet 是正确的。

      标准日期时间格式

      这里是一些示例代码,展示了如何将您的字符串转换为符合ISO 8601

      String inputRaw = "2014-08-20 00:00:00 -0500";
      String input = inputRaw.replaceFirst( " ", "T" ).replaceFirst( " ", "" ); // Replace first SPACE with a 'T', and delete second SPACE.
      // input is "2014-08-20T00:00:00-0500".
      

      乔达时间

      您可以将该兼容字符串直接传递给 Joda-Time 中的 DateTime 的构造函数。 Java 8 中 java.time package 中的等效项同上(受 Joda-Time 启发)。

      DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" ); // Specify it rather than have JVM's default applied.
      DateTime dateTimeMontréal = new DateTime( input, timeZone );
      DateTime dateTimeUtc = dateTimeMontréal.withZone( DateTimeZone.UTC );
      

      转储到控制台。

      System.out.println( "inputRaw: " + inputRaw );
      System.out.println( "input: " + input );
      System.out.println( "dateTimeMontréal: " + dateTimeMontréal );
      System.out.println( "dateTimeUtc: " + dateTimeUtc );
      

      运行时……

      inputRaw: 2014-08-20 00:00:00 -0500
      input: 2014-08-20T00:00:00-0500
      dateTimeMontréal: 2014-08-20T01:00:00.000-04:00
      dateTimeUtc: 2014-08-20T05:00:00.000Z
      

      【讨论】:

        猜你喜欢
        • 2023-03-07
        • 2020-07-05
        • 2015-01-10
        • 2020-11-28
        • 1970-01-01
        • 1970-01-01
        • 2015-02-03
        • 2021-03-25
        • 2014-12-02
        相关资源
        最近更新 更多