Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.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_Android - Fatal编程技术网

Java 比较两个日期()的正确方法是什么?

Java 比较两个日期()的正确方法是什么?,java,android,Java,Android,我想将日期与当前日期和时间进行比较,以了解日期和时间是否已经过了。 以下是两个日期对象: currentDateTime=2019-11-22 05:25:19 AM eventEndDateTime=2019-11-22 05:45:00 AM 两者都是Date()对象。 我比较如下:currentDateTime.after(eventEndDateTime) 所以它给了我真实的。 但是我们可以看到我的当前日期早于eventEndDateTime SimpleDateFormat endFo

我想将日期与当前日期和时间进行比较,以了解日期和时间是否已经过了。 以下是两个日期对象:

currentDateTime=2019-11-22 05:25:19 AM
eventEndDateTime=2019-11-22 05:45:00 AM

两者都是Date()对象。 我比较如下:
currentDateTime.after(eventEndDateTime)
所以它给了我真实的。 但是我们可以看到我的当前日期早于eventEndDateTime

SimpleDateFormat endFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss aa");
        TimeZone endTz = TimeZone.getTimeZone("UTC");
        endFormatter.setTimeZone(endTz);
        Date eventEndTime = null;
        try {
            eventEndTime = endFormatter.parse(endFormatter.format(new Date(eventDetailsResponce.getData().getEndMillis() * 1000)));
        } catch (ParseException e) {
            e.printStackTrace();
        }

        SimpleDateFormat currentFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss aa");
        TimeZone currentTz = TimeZone.getTimeZone(eventDetailsResponce.getData().getTimeZone());
        currentFormatter.setTimeZone(currentTz);
        Date currentTime = null;
        try {
            currentTime = currentFormatter.parse(currentFormatter.format(new Date()));
        } catch (ParseException e) {
            e.printStackTrace();
        }

        if (currentTime.after(eventEndTime)) {
        //here i am getting true. 
        }

我尝试了
Calendar=Calendar.getInstance()
,但找不到任何解决方案

currentDateTime.after(eventEndDateTime)
如果
currentDateTime
的时区,即
eventDetailsResponse.getData().getTimeZone()
为UTC+6小时,则返回true是正确的

为了比较两个日期,您需要将它们转换为同一时区

您还可以简化设置
eventEndTime
的方式,如下所示:

Date eventEndTime = new Date(eventDetailsResponce.getData().getEndMillis() * 1000);

currentDateTime.after(eventEndDateTime)
如果
currentDateTime
的时区,即
eventDetailsResponse.getData().getTimeZone()
为UTC+6小时,则返回true是正确的

为了比较两个日期,您需要将它们转换为同一时区

您还可以简化设置
eventEndTime
的方式,如下所示:

Date eventEndTime = new Date(eventDetailsResponce.getData().getEndMillis() * 1000);
试试看

if (date1.compareTo(date2) > 0) {
   Log.i("app", "Date1 is after Date2");
 } else if (date1.compareTo(date2) < 0) {
   Log.i("app", "Date1 is before Date2");
 } else if (date1.compareTo(date2) == 0) {
   Log.i("app", "Date1 is equal to Date2");
}
if(日期1.与(日期2)>0比较){
Log.i(“应用程序”,“日期1在日期2之后”);
}如果(日期1)比(日期2)<0{
Log.i(“应用程序”,“日期1在日期2之前”);
}如果(日期1.compareTo(日期2)==0){
Log.i(“应用程序”,“日期1等于日期2”);
}
试试看

if (date1.compareTo(date2) > 0) {
   Log.i("app", "Date1 is after Date2");
 } else if (date1.compareTo(date2) < 0) {
   Log.i("app", "Date1 is before Date2");
 } else if (date1.compareTo(date2) == 0) {
   Log.i("app", "Date1 is equal to Date2");
}
if(日期1.与(日期2)>0比较){
Log.i(“应用程序”,“日期1在日期2之后”);
}如果(日期1)比(日期2)<0{
Log.i(“应用程序”,“日期1在日期2之前”);
}如果(日期1.compareTo(日期2)==0){
Log.i(“应用程序”,“日期1等于日期2”);
}
,非常适合日期比较。我尝试了你的代码,做了一些修改,它给了我预期的结果

private void doCheckDate() {

        String dateFormat = "yyyy-MM-dd HH:mm:ss aa";
        SimpleDateFormat dateFormatter = new SimpleDateFormat(dateFormat);

        String dateCurrentString = "2019-11-22 05:25:19 AM";
        String dateEndString = "2019-11-22 05:45:00 AM";

        TimeZone zone = TimeZone.getTimeZone("UTC");
        dateFormatter.setTimeZone(zone);

        Date currentTime = null;
        Date eventEndTime = null;

        try {
            currentTime = dateFormatter.parse(dateCurrentString);
            eventEndTime = dateFormatter.parse(dateEndString);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        boolean isAfter = currentTime.after(eventEndTime);

        Log.d(TAG, "Current Time: " + currentTime);
        Log.d(TAG, "Event Time: " + eventEndTime);

        Log.d(TAG, "Is current time after event time: " + isAfter);
    }
产生以下输出

当前时间:周五11月22日05:55:19格林尼治标准时间+2019年05:30
活动时间:11月22日星期五06:15:00 GMT+2019年5:30
事件时间后的当前时间:false

并且非常适合日期比较。我尝试了你的代码,做了一些修改,它给了我预期的结果

private void doCheckDate() {

        String dateFormat = "yyyy-MM-dd HH:mm:ss aa";
        SimpleDateFormat dateFormatter = new SimpleDateFormat(dateFormat);

        String dateCurrentString = "2019-11-22 05:25:19 AM";
        String dateEndString = "2019-11-22 05:45:00 AM";

        TimeZone zone = TimeZone.getTimeZone("UTC");
        dateFormatter.setTimeZone(zone);

        Date currentTime = null;
        Date eventEndTime = null;

        try {
            currentTime = dateFormatter.parse(dateCurrentString);
            eventEndTime = dateFormatter.parse(dateEndString);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        boolean isAfter = currentTime.after(eventEndTime);

        Log.d(TAG, "Current Time: " + currentTime);
        Log.d(TAG, "Event Time: " + eventEndTime);

        Log.d(TAG, "Is current time after event time: " + isAfter);
    }
产生以下输出

当前时间:周五11月22日05:55:19格林尼治标准时间+2019年05:30
活动时间:11月22日星期五06:15:00 GMT+2019年5:30
事件时间后的当前时间:false


要添加到已有答案中的另一个解决方案是以毫秒为单位进行比较:

currentTime.getTime() > eventEndTime.getTime()

要添加到已有答案中的另一个解决方案是以毫秒为单位进行比较:

currentTime.getTime() > eventEndTime.getTime()

以毫秒和比较器为单位进行转换currentDateTime的可能重复项。如果currentDateTime的时区(即EventDetailsResponse.getData().getTimeZone()为空,则(eventEndDateTime)之后返回true可能是正确的比如说UTC+6小时您从
事件详细信息响应
中得到了哪个时区?类
简化格式
时区
日期
的设计很差,很早就过时了。考虑使用JavaTime,而不是现代java日期和时间API。如果API级别低于26,则通过ThreeTenABP库。搜索它以及日期和时间教程。以毫秒和比较器为单位进行转换currentDateTime可能存在的重复项。如果currentDateTime的时区为EventDetailsResponse.getData().getTimeZone(),则在(eventEndDateTime)之后返回true可能是正确的比如说UTC+6小时您从
事件详细信息响应
中得到了哪个时区?类
简化格式
时区
日期
的设计很差,很早就过时了。考虑使用JavaTime,而不是现代java日期和时间API。如果API级别低于26,则通过ThreeTenABP库。搜索它以及日期和时间教程。似乎您将两个日期都与一个时区进行了比较。实际情况是:首先:eventEndDate需要转换为UTC时区,当前系统时间需要转换为非UTC的给定时区,然后我要进行比较。似乎您将两个日期与一个时区进行比较。实际情况是:首先:eventEndDate需要转换为UTC时区,当前系统时间需要转换为非UTC的给定时区,然后我要进行比较。