繁体   English   中英

迄今未指定格式的字符串

[英]String to date with no format specified

我想将字符串转换为日期,这很简单。 但是我想做的是不知道日期格式。

这是一种情况:假设我有100个日期,并且所有日期都采用相同的格式,但是我想编写一个Java程序来为我查找这种格式。 该程序的结果应为我提供所有可能格式的列表。

例如:

 06-06-2006
 06-06-2009

 ...

 06-13-2001 <- 99th record 

结果将给我日期格式可以是mm-dd-yyyy

如果99 记录也就是06-06-2006的结果应该是mm-dd-yyyydd-mm-yyyy

有人可以帮我举个例子吗?

似乎明智的做法是创建一组您知道的格式(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;
    }
}

尝试使用SimpleDateFormat准备所有可能的格式并计算解析的结果。

该解决方案可以是功能性的Java,例如在堆栈溢出中所述

暂无
暂无

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

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