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

时间:2017-01-16 14:30:03

标签: java date

我将输入作为两种类型。

1.String date1 = "07/01/2017";
2.String date2 = ""2017-01-12 00:00:00.0";

如何比较两种日期格式。我希望执行一个功能,如果我得到格式为date1.If我得到date2格式然后另一个功能。如何使用字符串比较两种日期格式。

例如:

 if( date1.equals('dd/mm/yyyy')){

    //perform functionality

    }

4 个答案:

答案 0 :(得分:2)

使用RegEx:

    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.");
    }

答案 1 :(得分:1)

如果你想知道日期的格式是mm / dd / yyyy还是mm-dd-yyyy或同样的想法,你可能需要使用正则表达式。

您可以查看此方法以实现它What is the regular expression for Date format dd\mm\yyyy?

答案 2 :(得分:0)

使用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;
        }
    }
}

答案 3 :(得分:0)

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

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.");
        }
    }
}