Java中对两个日期时间的比较方法
发表时间:2021-1-4
发布人:葵宇科技
浏览次数:72
package com.raipeng.test;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class TestTime {
public static void main(String[] args) {
// TODO Auto-generated method stub
String firstTime = "2015-01-07 08:52";
String secondTime = "2015-01-07 11:53";
CompareDateTime(firstTime, secondTime);
String thirdTime = "2015-01-07 08:52";
String fourthTime = "2015-01-07 12:53";
CompareDateTime(thirdTime, fourthTime);
String fifthTime = "2015-01-07 08:52";
String sixthTime = "2015-01-07 13:53";
CompareDateTime(fifthTime, sixthTime);
String date1 = "2014-12-03";
String date2 = "2015-01-07";
System.out.println("天数=="+daysBetween(date1, date2));
System.out.println("后一天=="+getSpecifiedDayAfter(date1));
}
public static boolean CompareDateTime(String time1, String time2) {
boolean isFirstBig = false;
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
Date date1 = dateFormat.parse(time1);
Date date2 = dateFormat.parse(time2);
System.out.println("date1==" +date1.getTime());
System.out.println("date2==" +date2.getTime());
// Method 1
if (date1.getTime() > date2.getTime()) {
System.out.println("M1--date1在date2后");
isFirstBig = true;
} else if (date1.getTime() < date2.getTime()) {
System.out.println("M1--date1在date2前");
isFirstBig = false;
}
// Method 2
if (date1.compareTo(date2) == 1) {
System.out.println("M2--date1在date2后");
isFirstBig = true;
} else if (date1.getTime() < date2.getTime()) {
System.out.println("M2--date1在date2前");
isFirstBig = false;
}
// Method 3
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
if (cal1.after(cal2)) {
System.out.println("M3--date1在date2后");
} else {
System.out.println("M3--date1在date2前");
}
} catch (Exception exception) {
exception.printStackTrace();
}
return isFirstBig;
}
/**
* 计算两天之间的天数
* @param startStr
* @param endStr
* @return
*/
public static int daysBetween(String startStr, String endStr) {
int daysBetween = 0;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse(startStr);
Calendar startDate = Calendar.getInstance();
startDate.setTime(date1);
Date date2 = sdf.parse(endStr);
Calendar endDate = Calendar.getInstance();
endDate.setTime(date2);
Calendar date = (Calendar) startDate.clone();
while (date.before(endDate)) {
date.add(Calendar.DAY_OF_MONTH, 1);
daysBetween++;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return daysBetween;
}
/**
* 获得指定日期的后一天
*
* @param specifiedDay
* @return
*/
public static String getSpecifiedDayAfter(String specifiedDay) {
Calendar c = Calendar.getInstance();
Date date = null;
try {
date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
} catch (ParseException e) {
e.printStackTrace();
}
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day + 1);
String dayAfter = new SimpleDateFormat("yyyy-MM-dd")
.format(c.getTime());
return dayAfter;
}
}
在Java中比较时间或者日期基本上都要转换成Date类型,以上代码主要提供三个比较的方法,compareTo、getTime、after,另外还提供计算两个日期之间的间隔天数,以及根据当前日期获取后一天的日期的方法
代码虽然简单,但粗心大意的我却在这上面耗费了近半天的时间
问题描述:如上,有三组时间对,其中第二组的第二个时间为12点多,在没改之前,只有这组的返回结果是错误的,调试半天找不到原因,后来有网友建议把gettime的值打印出来看看,打出来后发现12点多返回的long值确实比其他几个都小很多,然后把年月日去掉直接比较时间还是同样的结果,然后就突然意识到可能是“时”这个单位的问题,然后就看到了这行代码
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");下意识的将这行代码改为DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");看来区别只在于hh的大小写,然后运行结果就正确了
然后在博客园看到这样一篇文章 日期格式化{0:yyyy-MM-dd HH:mm:ss.fff}和{0:yyyy-MM-dd hh:mm:ss.fff}的区别
{0:yyyy-MM-dd HH:mm:ss.fff}:使用24小时制格式化日期
{0:yyyy-MM-dd hh:mm:ss.fff}:使用12小时制格式化日期
原来就是24小时制和12小时制格式的区别,所以大家以后要注意了
同理还有这个Calendar.HOUR_OF_DAY和Calendar.HOUR,前者是24小时,后者是12小时
上面java代码运行后控制台输出如下:
date1==1420591920000 date2==1420602780000 M1--date1在date2前 M2--date1在date2前 M3--date1在date2前 date1==1420591920000 date2==1420606380000 M1--date1在date2前 M2--date1在date2前 M3--date1在date2前 date1==1420591920000 date2==1420609980000 M1--date1在date2前 M2--date1在date2前 M3--date1在date2前 天数==35 后一天==2014-12-04








