这是我的问题 - 我需要解析一个字符串并查找它是否包含日期。字符串示例:
“明天凌晨2点” “2010年2月16日16:00” “今天16:00”
你知道任何解决人类可读日期转换的java库吗?
答案 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数组比较器的问题。或者,您可以以类似的方式迭代一组正则表达式,但它会很慢。你可能会得到很多误报,但你可以明显改进这个简单的模型。