在Java中将任何日期字符串规范化为给定格式

时间:2014-02-18 05:00:01

标签: java date datetime formatting

我正在处理网站内容,其中包括几种类型的日期字符串(例如Atom / RSS Feed)。我想知道是否有一个库来规范化这些字符串,或者是否有人将宝石藏在这个目的中。

以下是我想要实现的一个例子:

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

让我知道你的建议,任何格式化工具都将不胜感激:)我google了一段时间,找不到任何东西!

哦,即使我标记了这个Java(我正在使用它),也可以随意发布其他语言的答案 - 我确信我或者线程上的某个人可以帮助转换它们。 / p>

5 个答案:

答案 0 :(得分:1)

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

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

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

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

让我们希望有人在日期中实现这一点。

答案 1 :(得分:1)

将日期字符串从格式转换为其他格式(例如: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);

答案 2 :(得分:1)

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

您需要的“gem”是Java的开源免费Joda-Time库。或者在Java 8中使用新的java.time。*包,其灵感来自Joda-Time并由JSR-310定义。

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

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

答案 3 :(得分:0)

检查javadocs java.text.SimpleDateFormat它描述了你需要的一切。

答案 4 :(得分:0)

将其转换为系统接受的时间戳,然后转换为人类可读的时间戳。这是一个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