【问题标题】:Normalizing any date string into a given format in Java将任何日期字符串规范化为 Java 中的给定格式
【发布时间】:2014-02-18 05:00:00
【问题描述】:

我正在处理包含多种日期字符串(例如 Atom/RSS 提要)的网站内容。我想知道是否有一个库可以标准化这些字符串,或者是否有人为此目的隐藏了一个宝石。

这是我想要实现的一个示例:

2014-02-14T12:11:03-05:00
2014-02-14T02:08:00Z

变成:

// Only an example format, all that matters is they're the same
YYYY-MM-DD - HH:MM:SS

让我知道您的建议,任何格式化程序都将不胜感激 :) 我用谷歌搜索了一段时间,找不到任何东西!

哦,另外,即使我标记了这个 Java(这是我正在使用的),请随时用其他语言发布答案 - 我相信我或线程上的某个人可以帮助转换它们。

【问题讨论】:

  • 你可以看一下Apache Commons Language,它有一个DateUtils 类,可以传递格式列表以解析给定的Date
  • 我对这个问题投了赞成票,因为我在这里寻找同样的东西。

标签: java date datetime formatting


【解决方案1】:

AFAIK,没有以任何语言开发的这样的 API,它接受一个人感兴趣的日期字符串输入并识别和/或返回其日期格式字符串。

在我看来,应该是内容/提要生成器应该让接收者知道,它将数据保存在特定的 date_field 中,type="date"format="YYYY-MM-DD - HH:MM:SS" (例如)。如果需要,这实际上有助于接收器 API 或渲染器(浏览器)将其转换为本地/区域格式,然后应用。

这种格式指令在移动浏览器的 XML 数据中可见。我的观察和实践是关于数字格式、字母数字组合。没有检查日期。我不确定这是否仍在实践中。

<input type="text" name="m0" maxlength="22" format="*N" />

让我们希望有人也为日期实现这一点。

【讨论】:

    【解决方案2】:

    用于将日期字符串从一种格式转换为另一种格式(例如:2014-02-14T12:11:03-05:00 到 2014-02-14 - 12:11:03):

    SimpleDateFormat oldFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    Date d = old.parse("2014-02-14T12:11:03-05:00");
    SimpleDateFormat destFormat = new SimpleDateFormat("yyyy-MM-dd - HH:mm:ss");
    
    destFormat.format(d);
    

    【讨论】:

      【解决方案3】:

      如果“规范化”是指将所有日期时间字符串转换为单个一致的,那么您绝对应该按照您在第一对示例行中显示的方式进行操作。这两行都使用ISO 8601 标准。虽然还有其他日期格式,但 ISO 8601 是最明智和有用的。

      您需要的“宝石”是用于 Java 的免费开源 Joda-Time 库。或者在 Java 8 中使用受 Joda-Time 启发并由 JSR-310 定义的新 java.time.* 包。

      Joda-Time 和 java.time 都使用 ISO 8601 作为其默认格式,并且可以直接解析此类字符串。对于其他格式,您可以定义用于解析或生成字符串的格式化程序。

      在 StackOverflow 中搜索“joda”以找到许多类似的问题和答案。

      【讨论】:

        【解决方案4】:

        查看 java.text.SimpleDateFormat 的 javadocs,它描述了您需要的一切。

        【讨论】:

          【解决方案5】:

          将其转换为系统接受的时间戳,然后转换为人类可读的时间戳。这是一个php示例。

          date("m/d/Y", strtotime($date))
          

          $date 的以下值产生以下标准化值

          6/1/74     => 06/01/1974
          6/1/1974   => 06/01/1974
          Jan 1 2013 => 01/01/2013
          

          【讨论】:

            猜你喜欢
            • 2018-08-30
            • 2022-01-09
            • 1970-01-01
            • 2018-06-01
            • 2017-04-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多