【问题标题】:Finding Timestamp pattern from a String从字符串中查找时间戳模式
【发布时间】:2012-02-06 07:09:41
【问题描述】:

我想将字符串转换为时间戳,其模式未知。 java 是否有任何 API 允许我们输入字符串并返回可以使用它的可能模式?我知道可以有一些预定义的模式,可以根据这些模式来解析和检查字符串。但是,由于这是一个时间戳,不同日期和时间的组合数量会非常多。因此,正在寻找一种找出字符串时间戳模式的有效方法。

【问题讨论】:

  • 一个小例子:03.04.2011 将如何处理?作为 MM/dd/yyyy 还是 dd/MM/yyyy?或者您是否想要一种方法来返回两者,例如作为时间戳的可能模式?
  • 我正在考虑获得可能的结果并进一步手动处理。

标签: java timestamp


【解决方案1】:

从来没有听说过这样的现成库,正如@Eugene 指出的那样,所有模式的可能组合是巨大的,所以可能没有这样的库。 我建议重新考虑您的架构。

如果您只想玩这样的东西,您可以创建自己的实现。 假设您解析输入,然后找出整数数组 (09, 21, 12, 0, 44, 33) ,您可以假设该数组包含年、日、月、分钟、小时和秒(不确定您是否可以假设 - 这只是一个示例)

一旦你有了这个数组,你就可以创建这个数组的所有可能的排列 - example here

然后你可以为每个组合创建一个 Date 对象:

DateTime dt = new DateTime(09, 12, 21, 0, 44, 33, 0);

(以上示例适用于JodaTime

例如,如果您知道年份值将始终以 4 个字符发送,那么可能的组合数量当然会减少,进一步您可以假设“26”不会是月份的值等。您可能明白了。

【讨论】:

  • 是的,这可能是一种方法。但我相信会有很多代码试图用这种方法找出正确的模式。
【解决方案2】:

在这种情况下,首先我会切换到 Joda Time:http://joda-time.sourceforge.net/

然后我会生成一些(尝试尽可能减少可能性,因为有太多的可能性)模式并尝试在它们上面设置日期。如果它没有抛出错误(又名它适合,把它放在一个数组中),然后返回这个数组。这可能是一个非常未优化的解决方案,但这是我要开始的地方。

我真的不认为有这样的库。此外,您可能想解释为什么要这样做。可能解决方案更简单一些。

干杯, 尤金。

【讨论】:

  • 我已经在这样做了,有一个预定义的哈希图,其中包含几种格式,我交叉检查传入的字符串。我为什么要这样做?因为数据以文本格式提供,没有任何有关格式的信息。
  • @akkyy 我认为这是你现在能做的最好的事情。你应该做一些小技巧,比如看看最常用的模式是什么,然后先检查一下(那些),然后你可能会稍微按摩一下数据,看看它可能不适合某些格式非常快......跨度>
猜你喜欢
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 2016-08-31
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多