繁体   English   中英

将人类可读的日期转换为Java Date对象

[英]Converting human readable date to java date object

这是我的问题-我需要解析一个字符串并查找它是否包含日期。 字符串示例:

“明天2AM”“ 2010年2月16日16:00”“今天16:00”

您是否知道任何解决人类可读日期转换的Java库?

在此处查看解决方案Java中的PHP的strtotime()

它基本上是PHP的strtotime在Java中的实现

这是两个问题,一个关于识别,另一个在转换。

识别可能的日期上下文是(相对)容易的,但是由于多种原因,转换存在很大的问题,尤其是人们可以用多种方式语义表达日期的方式,以及随之而来的歧义和错误陈述。 让我们在这里看一些明显的陷阱:

  • “后天下午2点。” 如果我们只是简单地在“明天下午2点”进行评估,那将是一天的漂泊。

  • “ 2010年10月16日之后两天”。情况变得越来越糟...

  • “ 2013年3月13日,星期五,晚上9点之前不多”,我们可以追溯到日期,但是上下文使它变得非常模棱两可。

假设您只想在字符串中标识潜在的日期匹配,则可以执行以下操作...

private final String[] datePatterns = {"Yesterday","Today","Tomorrow", //etc
        "Sunday","Monday","Tuesday","Thursday","Friday", // etc
         "Lundi","Mardi","Mercredi", //etc in French
        "2001","2002", // all the years 
        "AM","PM",
        "January","February","March","August"};
private List lx  = new ArrayList();


public boolean mayContainDates(String toCheck)
{
toCheck = toCheck.toUpperCase();

// irl we'd build this list 1 time in the constructor
for(int i = 0; i < datePatterns.length; i++)
{
lx.add(datePatterns[i].toUpperCase()); 
}

   Iterator lit = lx.iterator();

    while(lit.hasNext())
    {    
    if (toCheck.contains((String) lit.next())
    {
    return true;
    }
    }

    return false;
}

这实际上是关于如何设置比较器的datePattern String数组的问题。 或者,您可以以某种相似的方式迭代一组正则表达式,但速度会很慢。 您可能会得到很多误报,但显然可以在此简单模型上进行改进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM