如何比较Java中的两个字符串日期?

joh*_*ohn 12 java string calendar date

我有两个日期的字符串格式如下 -

String startDate = "2014/09/12 00:00";

String endDate = "2014/09/13 00:00";
Run Code Online (Sandbox Code Playgroud)

我想确保startDate应该小于endDate.startDate不应大于endDate.

如何比较这两个日期并相应地返回布尔值?

Mak*_*oto 33

将它们转换为实际Date对象,然后调用before.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd h:m");
System.out.println(sdf.parse(startDate).before(sdf.parse(endDate)));
Run Code Online (Sandbox Code Playgroud)

回想一下,parse抛出一个ParseException,所以你应该在这个代码块中捕获它,或者声明它作为方法签名的一部分被抛出.


sid*_*ith 9

这是一个完全有效的演示.有关日期格式,请参阅 - http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

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

public class Dating {

    public static void main(String[] args) {

        String startDate = "2014/09/12 00:00";
        String endDate = "2014/09/13 00:00";

        try {
            Date start = new SimpleDateFormat("yyyy/MM/dd HH:mm", Locale.ENGLISH)
                    .parse(startDate);
            Date end = new SimpleDateFormat("yyyy/MM/dd HH:mm", Locale.ENGLISH)
                    .parse(endDate);

            System.out.println(start);
            System.out.println(end);

            if (start.compareTo(end) > 0) {
                System.out.println("start is after end");
            } else if (start.compareTo(end) < 0) {
                System.out.println("start is before end");
            } else if (start.compareTo(end) == 0) {
                System.out.println("start is equal to end");
            } else {
                System.out.println("Something weird happened...");
            }

        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

}
Run Code Online (Sandbox Code Playgroud)


Bas*_*que 6

tl;博士

使用现代java.timeLocalDateTime通过使用 定义格式化模式DateTimeFormatter并通过调用 进行比较来将输入解析为对象isBefore

时间

现代方法使用java.time类。

定义格式模式以匹配您的输入。

解析为LocalDateTime对象,因为您的输入缺少时区或 UTC 偏移量的指示符。

String startInput = "2014/09/12 00:00";
String stopInput = "2014/09/13 00:00";

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu/MM/dd HH:mm" );

LocalDateTime start = LocalDateTime.parse( startInput , f ) ;
LocalDateTime stop = LocalDateTime.parse( stopInput , f ) ;
boolean isBefore = start.isBefore( stop ) ;
Run Code Online (Sandbox Code Playgroud)

转储到控制台。

System.out.println( start + " is before " + stop + " = " + isBefore );
Run Code Online (Sandbox Code Playgroud)

查看此代码在 IdeOne.com 上实时运行

2014-09-12T00:00 早于 2014-09-13T00:00 = true

Java 中的日期时间类型表,包括现代的和传统的。


关于java.time

java.time框架是建立在Java 8和更高版本。这些类取代了麻烦的旧的遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat

要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范是JSR 310

现在处于维护模式Joda-Time项目建议迁移到java.time类。

您可以直接与您的数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC 驱动程序。不需要字符串,不需要类。java.sql.*

从哪里获得 java.time 类?

哪个 java.time 库与哪个 Java 或 Android 版本一起使用的表。

ThreeTen-额外项目与其他类扩展java.time。该项目是未来可能添加到 java.time 的试验场。你可能在这里找到一些有用的类,比如IntervalYearWeekYearQuarter,和更多