将人类可读日期转换为java日期对象

时间:2010-02-12 02:55:02

标签: java date

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

“明天凌晨2点” “2010年2月16日16:00” “今天16:00”

你知道任何解决人类可读日期转换的java库吗?

2 个答案:

答案 0 :(得分:2)

点击此处查看解决方案PHP's strtotime() in Java

它基本上是java中的strtotime的实现

答案 1 :(得分:-1)

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

确定可能的日期上下文(相对)容易,但转换因为多种原因而存在严重问题,特别是人们可以在语义上表达日期的各种方式,以及可能出现的伴随的歧义和误传。让我们看看这里有一些明显的陷阱:

  • “后天下午2点。”如果我们只是在“明天下午2点”进行评估,那么我们将会是一个漂泊的日子。

  • “2010年10月16日后两天”......情况变得更糟......

  • “在2013年3月13日星期五晚上9点之前不多”我们可以回复日期,但背景却很模糊。

假设您只想在String中识别潜在的日期匹配,您可以执行以下操作......

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数组比较器的问题。或者,您可以以类似的方式迭代一组正则表达式,但它会很慢。你可能会得到很多误报,但你可以明显改进这个简单的模型。