Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/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_Date - Fatal编程技术网

如何与java中的字符串日期格式进行比较?

如何与java中的字符串日期格式进行比较?,java,date,Java,Date,我得到两种类型的输入 1.String date1 = "07/01/2017"; 2.String date2 = ""2017-01-12 00:00:00.0"; 如何比较两种日期格式。如果将格式设置为date1,我想执行一个功能。如果将格式设置为date2,则执行另一个功能。如何使用字符串比较两种日期格式 例: 如果您想知道日期的格式是mm/dd/yyyy还是mm-dd-yyyy,或者类似的格式,您可能需要使用正则表达式 您可以检查这一点以了解实现它的方法使用正则表达式: St

我得到两种类型的输入

1.String date1 = "07/01/2017";
2.String date2 = ""2017-01-12 00:00:00.0";
如何比较两种日期格式。如果将格式设置为date1,我想执行一个功能。如果将格式设置为date2,则执行另一个功能。如何使用字符串比较两种日期格式

例:


如果您想知道日期的格式是mm/dd/yyyy还是mm-dd-yyyy,或者类似的格式,您可能需要使用正则表达式

您可以检查这一点以了解实现它的方法

使用正则表达式:

    String date1 = "07/01/2017";
    if (date1.matches("^([0-9]{1,2}/){2}[0-9]{2,4}$")) {
        System.out.println("Date in MM/dd/yyyy format");
    } else if (date1.matches("^[0-9]{2,4}(-[0-9]{1,2}){2}\\s[0-9]{1,2}(:[0-9]{1,2}){2}\\.[0-9]{1,}$")) {
        System.out.println("Date in yyyy-MM-dd hh:mm:ss.t format");
    } else {
        System.err.println("Unsupported Date format.");
    }

使用RegEx的解决方案很好,但您也可以这样做:

第一个参数是日期的字符串表示形式。下一个参数是var arg。因此,您可以根据需要传递任意多个日期格式。它将尝试解析,如果成功,则返回正确的格式

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Stream;

public class Test {
    public static void main(String[] args) {
        Optional<String> format = test("07-01-2017", "dd/mm/yyyy", "dd-mm-yyyy");
        if (format.isPresent())
            System.out.println(format.get());
    }

    public static Optional<String> test(String date, String... formats) {
        return Stream.of(formats)
                .map(format -> new Pair<>(new SimpleDateFormat(format), format))
                .map(p -> {
                    try {
                        p._1.parse(date);
                        return p._2;
                    } catch (ParseException e) {
                        return null;
                    }
                })
                .filter(Objects::nonNull)
                .findFirst();
    }

    public static class Pair<F, S> {
        public final F _1;
        public final S _2;

        public Pair(F _1, S _2) {
            this._1 = _1;
            this._2 = _2;
        }
    }
}
import java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.Objects;
导入java.util.Optional;
导入java.util.stream.stream;
公开课考试{
公共静态void main(字符串[]args){
可选格式=测试(“07-01-2017”、“dd/mm/yyyy”、“dd-mm-yyyy”);
if(format.isPresent())
System.out.println(format.get());
}
公共静态可选测试(字符串日期、字符串…格式){
返回流.of(格式)
.map(格式->新对(新SimpleDataFormat(格式),格式))
.map(p->{
试一试{
p、 _1.解析(日期);
返回p._2;
}捕获(解析异常){
返回null;
}
})
.filter(对象::非空)
.findFirst();
}
公共静态类对{
公开决赛F_1;
公开决赛S_2;
公共对(F_1,S_2){
这个._1=_1;
这个._2=_2;
}
}
}

我想,我们可以声明两种日期格式,解析日期并比较两个日期实例。以下是示例代码:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateCompare {

    private static final String FORMAT1 = "MM/dd/yyyy";
    private static final String FORMAT2 = "yyyy-MM-dd hh:mm:ss";

    private Date parseDate(String format1, String format2, String dateStr) throws ParseException {
        boolean isException = false;
        Date date = null;
        try {
            date = parseDate(format1, dateStr);
        } catch (ParseException e) {
            isException = true;
        }
        if (isException) {
            date = parseDate(format2, dateStr);
        }
        return date;
    }

    private Date parseDate(String format1, String dateStr) throws ParseException {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format1);
        return dateFormat.parse(dateStr);
    }

    public static void main(String[] args) throws ParseException {
        DateCompare compare = new DateCompare();
        Date date1 = compare.parseDate(FORMAT1, FORMAT2,"07/01/2017");
        Date date2 = compare.parseDate(FORMAT1, FORMAT2, "2017-07-01 00:00:00");

        if (date1.compareTo(date2) == 0) {
            System.out.println("Dates are equal.");
        } else {
            System.out.println("Dates are not equal.");
        }
    }
}

比较日期格式,或者比较不同格式的两个日期?但是我需要比较字符串,如何使用字符串比较日期格式“比较
DateFormat
”是什么意思?它们本质上是不可比的,就像一个勺子本质上既不比另一个大也不比另一个小一样。你能给我举个例子吗?@SaiKishoreMani你能回答你被问到的问题吗?你太宽泛了,这不清楚这个答案没有抓住要点:在OP中,我们不知道日期字符串是否匹配
FORMAT1
FORMAT2
。您的回答将导致未捕获的
ParseExceptions
@SME\u Dev我已尝试解决您的问题。请查收。谢谢你的反馈。这也是可行的解决方案,但这取决于你的品味。一般来说,我不喜欢在正常的逻辑流中使用异常,只是从性能和过载的角度来看。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateCompare {

    private static final String FORMAT1 = "MM/dd/yyyy";
    private static final String FORMAT2 = "yyyy-MM-dd hh:mm:ss";

    private Date parseDate(String format1, String format2, String dateStr) throws ParseException {
        boolean isException = false;
        Date date = null;
        try {
            date = parseDate(format1, dateStr);
        } catch (ParseException e) {
            isException = true;
        }
        if (isException) {
            date = parseDate(format2, dateStr);
        }
        return date;
    }

    private Date parseDate(String format1, String dateStr) throws ParseException {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format1);
        return dateFormat.parse(dateStr);
    }

    public static void main(String[] args) throws ParseException {
        DateCompare compare = new DateCompare();
        Date date1 = compare.parseDate(FORMAT1, FORMAT2,"07/01/2017");
        Date date2 = compare.parseDate(FORMAT1, FORMAT2, "2017-07-01 00:00:00");

        if (date1.compareTo(date2) == 0) {
            System.out.println("Dates are equal.");
        } else {
            System.out.println("Dates are not equal.");
        }
    }
}