Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串到日期为止,未指定格式_Java - Fatal编程技术网

Java 字符串到日期为止,未指定格式

Java 字符串到日期为止,未指定格式,java,Java,我想把字符串转换成日期,这很简单。但我想做的是不知道日期格式 这里有一种情况:假设我有100个日期,所有日期的格式都相同,但我想编写一个Java程序来为我找出这种格式。这个程序的结果应该给我一个所有可能格式的列表 例如: 06-06-2006 06-06-2009 ... 06-13-2001 <- 99th record 06-06-2006 06-06-2009 ... 06-13-2001尝试使用“准备所有可能的格式”并计算解析结果。尝试使用“准备所有可能的格式”并计

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

这里有一种情况:假设我有100个日期,所有日期的格式都相同,但我想编写一个Java程序来为我找出这种格式。这个程序的结果应该给我一个所有可能格式的列表

例如:

 06-06-2006
 06-06-2009

 ...

 06-13-2001 <- 99th record 
06-06-2006
06-06-2009
...

06-13-2001尝试使用“准备所有可能的格式”并计算解析结果。

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

解决方案可以是功能性Java,如中所述。解决方案可以是功能性Java,如中所述,创建您知道的一组格式(日期格式),然后测试每一行,看看哪些格式可以理解每一行。你应该有一系列的可能性

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;
    }
}
公共类DateFormatDetector{
私有静态最终设置日期\格式=新HashSet();
静止的{
添加日期格式(“yyyy-MM-dd”);
添加日期格式(“dd-MM-yyyy”);
添加日期格式(“MM dd yyyy”);
}
公共静态集getPossibleDateFormats(列表日期){
Set候选者=新的HashSet();
for(字符串df:DATE\u格式){
SimpleDataFormat候选者=新SimpleDataFormat(df);
候选人。setLenient(假);
候选人。添加(候选人);
}
用于(字符串日期:日期){
Iterator it=candidates.Iterator();
while(it.hasNext()){
SimpleDataFormat candidate=it.next();
试一试{
//尝试将字符串解析为日期
候选解析(日期);
}
捕获(解析异常){
//无法分析,因此此格式不适用
it.remove();
}
}
}
Set results=new HashSet();
for(SimpleDataFormat候选者:候选者)
results.add(candidate.toPattern());
返回结果;
}
}

创建一组您知道的格式(日期格式),然后测试每一行,看看哪些格式可以理解每一行。你应该有一系列的可能性

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;
    }
}
公共类DateFormatDetector{
私有静态最终设置日期\格式=新HashSet();
静止的{
添加日期格式(“yyyy-MM-dd”);
添加日期格式(“dd-MM-yyyy”);
添加日期格式(“MM dd yyyy”);
}
公共静态集getPossibleDateFormats(列表日期){
Set候选者=新的HashSet();
for(字符串df:DATE\u格式){
SimpleDataFormat候选者=新SimpleDataFormat(df);
候选人。setLenient(假);
候选人。添加(候选人);
}
用于(字符串日期:日期){
Iterator it=candidates.Iterator();
while(it.hasNext()){
SimpleDataFormat candidate=it.next();
试一试{
//尝试将字符串解析为日期
候选解析(日期);
}
捕获(解析异常){
//无法分析,因此此格式不适用
it.remove();
}
}
}
Set results=new HashSet();
for(SimpleDataFormat候选者:候选者)
results.add(candidate.toPattern());
返回结果;
}
}

这个问题太宽泛了,你能告诉我们你为什么需要这样做的背景,或者你到目前为止尝试过的一些示例代码吗?如果你的问题是家庭作业/项目,请将其标记为家庭作业/项目。我现在已经给它加了标签,但是事先知道是很有用的,因为答案可以被框起来更有用。一、 例如,这里可能没有提供完整的解决方案。这个问题太广泛了,你能告诉我们你为什么需要这样做的背景,或者你到目前为止尝试过的一些示例代码吗?如果你的问题是家庭作业/项目,那么请将其标记为家庭作业/项目。我现在已经给它加了标签,但是事先知道是很有用的,因为答案可以被框起来更有用。一、 例如,此处可能没有提供完整的解决方案。请看一看ptomli示例。请看一看ptomli示例。HII我添加了另一个类,当我输入20-12-1988或任何日期时,它会提供所有日期格式。。即使我输入了一个错误的日期,它仍然会给我date_格式中提到的所有可能的日期。我已经使用你的类在我的主类中调用了我的函数。对不起,我忽略了将Lenence设置为off。请参阅
candidate.setLenient(false)
现在在创建
SimpleDataFormat
时添加。这里的一个快速测试似乎很好。谢谢你,ptmoli。它现在工作得很好。但是,如果我有一个输入字符串,如20-12-1988 IST 00:00:00,它会给我一个尽可能的输出日期格式==[dd-MM-yy,dd-MM-yyyy-zzz hh:MM:ss,dd-MM-yyyy]。即使我不包括时间戳并输入一个字符串06-06-06,它也会给我一个输出dd-MM-yyyy,dd-MM-yy,即使输出应该只为dd-MM-yyy
DateFormat。parse(string)
不一定使用整个字符串,这意味着一个简单的格式可能,例如,在忽略时间的情况下解析出日期。如果“yyy”与“06”匹配,则这符合SimpleDataFormat的文档。“对于格式化(一年),如果模式字母数为2,则年份将被截断为2位;否则它将被解释为一个数字。”您可能会发现,仅用格式解析字符串可能不足以过滤模式。您可以尝试比较字符串长度,并重新格式化解析的日期。我怀疑它是否会准确我添加了另一个类,当我输入20-12-1988或任何日期时,它会给出所有的日期格式。。即使我输入了一个错误的日期,它仍然会给我所有的时间