我想将字符串转换为日期,这很简单。但是我想在不知道日期格式的情况下做到这一点。
这是一种情况:说我有100个日期,所有格式都相同,但我想编写一个Java程序来为我找到这种格式。该程序的结果应该为我提供所有可能格式的列表。
例如:
06-06-2006
06-06-2009
...
06-13-2001 <- 99th record
这样的结果会让我的日期格式为mm-dd-yyyy
如果99 th 记录也是06-06-2006
,则结果应为mm-dd-yyyy
和dd-mm-yyyy
。
有人可以帮我举个例子吗?
答案 0 :(得分:5)
似乎可以创建一组您知道的格式(DATE_FORMATS),然后测试每一行以查看哪些格式了解每一行。你最终应该有一套可能性。
public class DateFormatDetector {
private static final Set<String> DATE_FORMATS = new HashSet<String>();
static {
DATE_FORMATS.add("yyyy-MM-dd");
DATE_FORMATS.add("dd-MM-yyyy");
DATE_FORMATS.add("MM-dd-yyyy");
}
public static Set<String> getPossibleDateFormats(List<String> dates) {
Set<SimpleDateFormat> candidates = new HashSet<SimpleDateFormat>();
for (String df : DATE_FORMATS) {
SimpleDateFormat candidate = new SimpleDateFormat(df);
candidate.setLenient(false);
candidates.add(candidate);
}
for (String date : dates) {
Iterator<SimpleDateFormat> it = candidates.iterator();
while (it.hasNext()) {
SimpleDateFormat candidate = it.next();
try {
// try to parse the string as a date
candidate.parse(date);
}
catch (ParseException e) {
// failed to parse, so this format is not suitable
it.remove();
}
}
}
Set<String> results = new HashSet<String>();
for (SimpleDateFormat candidate : candidates)
results.add(candidate.toPattern());
return results;
}
}
答案 1 :(得分:1)
尝试使用SimpleDateFormat准备所有可能的格式并计算解析结果。
答案 2 :(得分:0)
解决方案可以是功能性Java,例如stack overflow
中所述