【问题标题】:How to parse dates from general purpose strings?如何从通用字符串中解析日期?
【发布时间】:2013-10-05 00:07:13
【问题描述】:

我有以下形式的输入字符串数组 -

stringArray1 = {"Vidya", "Balan", "born", "1", "January","1978","is","an","Indian", "actress."}

stringArray2 = {"President", "Franklin", "D.", "Roosevelt","to","proclaim","December", "7,",            "1941,","'a","date","which", "will","live", "in","infamy'"}

stringArray3 = {"The", "Academy", "operated", "until","it","was","destroyed", "by", "Lucius",                               "Cornelius","Sulla","in", "84", "BC"}

我希望能够将以下规则应用于这些字符串数组:

任何出现的日期都应转换为 yyyymmdd 格式的日期和 HH:mm:ss 格式的时间戳(yyyymmdd HH:mm:ss 的组合)。时区可以忽略。如果缺少任何字段,则应使用以下默认值: • 年份应设置为 1900。 • 月份应该是一月 • 日期应为第一天 • 小时、分钟或秒应为 00。

因此上述字符串的输出必须是:

stringOutput1 = { "Vidya", "Balan", "born","19780101","is","an", "Indian","actress." }

stringOutput2 = { "President", "Franklin", "D.","Roosevelt","to","proclaim", "19411207,",   "'a","date","which", "will", "live", "in", "infamy'"}

stringOutput3 = { "The", "Academy", "operated","until", "it", "was", "destroyed", "by","Lucius","Cornelius", "Sulla", "in","-00840101"}

我尝试为此使用 SimpleDateFormatter,但我认为 SimpleDateFormatter 在没有特定格式的情况下没有这样的功能,而且我实际上对如何找到一个纯 Java 的解决方案来解决这个问题一无所知,请有人帮帮我。时间也是如此,也就是说,如果我有一个由日期和时间组合组成的通用字符串,我该如何转换这些字符串。

【问题讨论】:

  • 你有什么规则来确定什么是约会?
  • 另外,看起来您将多个数组元素组合成一个字符串之一。具体来说,“1”、“一月”、“1978”变成了“19780101”。这使事情变得非常复杂,特别是因为如果不进行更深入的分析,您将无法知道第一个“1”是否实际上是一个日期(这又会使事情变得更加困难。
  • 是的,这正是问题所在,我该如何弄清楚,可悲的是,它实际上是项目中的要求:(
  • 这更像是一个算法设计问题而不是编程问题。
  • 我不知道是否有某种算法可以做到这一点,这是一个非常奇怪的要求,我想它需要更多的语言分析和机器学习,不是吗?

标签: java json string date datetime


【解决方案1】:

除非您对日期的写入方式(即格式)有特定的规则,否则不可能将任意字符串转换为日期。其原因是模棱两可。例如:

01/02/03

yy/mm/dd 的格式是 2001 年 2 月 3 日(我们暂时忽略 1901 的可能性)。

mm/dd/yy 格式中,这是 2003 年 1 月 1 日。

等等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 2011-04-16
    • 2013-07-06
    • 1970-01-01
    相关资源
    最近更新 更多