我有一个包含日期表示形式的字符串。看起来像:

2006 年 11 月 30 日星期四 19:00:00 美国东部时间

我正在尝试使用 SimpleDateFormat 创建一个 Date 对象,但有两个问题。

1.)我无法找出将解决方案硬编码到 SimpleDateFormat 构造函数中的模式

2.) 我找不到使用 API 解析字符串以确定模式的方法,因此我可以将其重用于不同的日期输出模式

如果有人知道使用 API 的解决方案或自定义解决方案,我将不胜感激。

有帮助吗?

解决方案

可以查看传递给 SimpleDateFormat 的格式 http://java.sun.com/javase/6/docs/api/java/text/SimpleDateFormat.html

new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy")

至于你的第二个问题,我不知道有任何Java库可以在不事先知道格式是什么的情况下找出日期格式并解析它。

其他提示

POJava 日期解析器 org.pojava.datetime.DateTime 是一个不可变且强大的解析器,支持多种语言、时区和格式。

最重要的是,解析器是启发式的,不需要预先存在的“格式”即可工作。您只需向其传递一个日期/日期时间文本字符串即可得到 java.util.Date!

我不确定是否有任何简单的方法来解析日期并计算出其模式,但我认为您发布的模式是:

EEE MMM dd HH:mm:ss zzz yyyy

如果您想要执行除解析或格式化日期之外的任何操作,则没有太多可用于处理模式本身。不久前,我正在编写一个 Swing 组件,用于将日期输入到格式化文本字段中。您提供了一个模式,它将文本输入光标移动到该模式的元素中,只允许有效值。

作为其中的一部分,我写了一个 DateFormatParser 作为 OpenHarmonise 开源项目的一部分可在此处获取.

将日期解析为模式将是一个非常有趣的问题。您必须做出某些假设(例如用于 :时间而不是日期),但您将面临 2 位数年份和日/月或月/日安排的永恒问题。

值得一提的是,您给出的日期格式不是任意的。它是内置 Date.toString() 方法的输出(至少在英国和美国语言环境中)。并非巧合的是,它也是 unix 'date' 命令的格式(至少在 Linux 上,我也相信其他实现) - 尽管很迂腐,Date.toString() 用零填充一位数的日期数字,而Unix 日期没有。

这意味着当您将未格式化的日期输出到用户可修改的字段(例如,HTML INPUT 字段)并按原样接收它。因此,仅仅因为输入采用这种格式,并不意味着用户将输入上千种其他任意格式。

当然,他们仍然可能。我处理日期输入的方式通常是使用一堆 try/catch 块,我在其中尝试一种格式,然后是另一种格式,然后是另一种格式。我们的标准框架现在默认支持大约 20 种不同的格式。当然它还不是完美的;前几天我发现有人输入“03 Sept”作为日期(非标准月份缩写,没有年份),但我们没有处理这种情况。

参见 Apache Commons 的 日期工具. 。有一个 parseDate 方法需要你的 String 以及多种模式来尝试并吐出 Date 实例。

正如其他人所说,该模式看起来应该是这样

new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"

至于解析任意格式的日期,我不知道有任何库可以在 Java 中执行此操作。如果你热衷于开发这样的东西,我会首先看看 perl 字符串2时间 功能。

我必须说我发现另一个问题非常有趣。但有一个严重的问题 - 解析这个:08/07/06!如果您将自己限制在预期格式的子集上,那么您可能可以通过使用正则表达式来解决问题,您可以构建一堆预期模式,然后在空格或其他地方打破字符串,并部分匹配。

您只是询问给定日期的模式吗?如果是这样,我认为应该这样做:

"EEE MMM d HH:mm:ss z yyyy"

或者您是否尝试获取任何格式化日期,推断格式并解析它?

怎么样:

EEE MMM dd HH:mm:ss zzz yyyy

只需将字符串传递到 SimpleDateFormat 的构造函数中即可。要使用该对象,只需调用解析方法,传入要转换为日期的字符串。

你可以看一下:

http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html

这实际上并不相同,但您可能想看看类似的东西 慢性病杂志, ,它可以对日期进行自然语言处理。因此,输入日期可能类似于“明天”或“下周二后两周”。

这可能对您的应用程序没有任何帮助,但话又说回来,它可能会。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top