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的给定时区,然后我要进行比较。