Java中对两个日期时间的比较方法 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 技术分享 >

Java中对两个日期时间的比较方法

发表时间:2021-1-4

发布人:葵宇科技

浏览次数:42


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

相关案例查看更多