【问题标题】:Parsing date in from string in java从java中的字符串解析日期
【发布时间】:2014-03-23 16:43:14
【问题描述】:

嗨,所以我知道这里有很多关于这个的话题,我已经经历了很多我无法掌握整个日期格式的事情,所以我在这里寻求你的帮助:)

我有一个 json 对象给我这个日期“2014-01-10T02:01:42.657Z”,我不知道那是什么格式。我确实知道它来自 mssql 数据库的日期时间,我希望在我使用此代码的 java 中解析它。

 DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date result = null;
        try {
            result = df.parse(last_active);
        } catch (ParseException e) {
            Log.i("Date Parser problem (Friend.java): ", e.toString());
            e.printStackTrace();
        }  
        Log.i("Date: ", result.toString());

我知道“yyyy-MM-dd HH:mm:ss”是解析此日期的错误格式,但我无法找到正确的格式字符串类型来格式化以下日期。

“2014-01-10T02:01:42.657Z”

感谢您的帮助:)

谢谢

【问题讨论】:

  • 我不知道 T 和 Z 在这里应该是什么意思,但我们需要将其转换为您知道的格式然后解析。
  • 这也是让我失望的地方,我尝试过类似的格式,但 T 和 Z 可能是可变的,可能不是很奇怪。
  • 这是国际标准化的日期格式 (ISO 8601)。 T 是日期和时间之间的分隔符。末尾的 Z 表示 UTC+0 时区。
  • T用来分隔日期和时间,Z用来表示时间是UTC
  • 这是一个 ISO 8601 格式的日期。 T 向您显示日期的结束位置和时间的开始位置。 Z 告诉您时区是 UTC。谷歌“在 Java 中解析 ISO 8601 日期”以获取更多信息。

标签: java date datetime date-format


【解决方案1】:

这只是一个标准的 ISO 格式日期。中间的T只是一个分隔符,最后的Z表示“UTC”。

要解析它,只需使用yyyy-MM-dd'T'HH:mm:ss.SSSX 作为模式。

【讨论】:

    【解决方案2】:

    试试这个

    SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    

    【讨论】:

    • Z 是相关的。它表示日期已使用 UTC 时区转换为字符串。
    • 无需在 Joda-Time 中解析该字符串。只需将字符串传递给DateTime 构造函数。 Joda-Time 使用 ISO 8601 标准作为其默认值。 DateTime 会自动解析一个有效的 ISO 字符串。
    【解决方案3】:

    ISO 8601

    该字符串是标准格式,由 ISO 8601 定义。在各种协议中,这种格式逐渐变为replacing 愚蠢的formats of yesteryear,例如Sun, 06 Nov 1994 08:49:37 GMT

    避免使用 java.util.Date/Calendar

    捆绑的类 java.util.Date 和 .Calendar 是出了名的麻烦。避开他们。随着 Java 8 中 java.time package 的到来,它们实际上已被弃用。如果您无法使用 Java 8,请使用 Joda-Time(启发了 java.time)。

    乔达时间

    Joda-Time 库(第三方、开源、免费)默认使用 ISO 8601。所以 Joda-Time 类DateTime 会自动解析这样的字符串。

    DateTime dateTime = new DateTime( "2014-01-10T02:01:42.657Z" );
    

    转储到控制台...

    System.out.println( "dateTime: " + dateTime );
    

    运行时……

    dateTime: 2014-01-09T18:01:42.657-08:00
    

    时区

    注意 Joda-Time 应用了我的 JVM 的默认时区,从而适当地调整了时间。如果您希望将 DateTime 对象保留为 UTC,请在该构造函数中传递一个 DateTimeZone 对象。

        DateTime dateTime = new DateTime( "2014-01-10T02:01:42.657Z", DateTimeZone.UTC );
    

    运行时……

    dateTime: 2014-01-10T02:01:42.657Z
    

    java.time

    java.time package 也使用 ISO 8601 作为其默认值,并自动解析此类标准字符串。

    Instant instant = Instant.parse( "2014-01-10T02:01:42.657Z" );
    

    转储到控制台...

    System.out.println( "instant: " + instant );
    

    运行时……

    instant: 2014-01-10T02:01:42.657Z
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多