Java中对于日期大小先后时间差的比较的解决方法

今天朋友问我怎么方便的比较两个日期之间的差,想了下日期方面用的还是比较多的,晚上回来简单写了下
其中localeStringToDate这个方法原本只是为了将情况1中的字符串转为date,后来想着都用这个算了
结果这个方法最终比较冗杂,有时间会简化 下面是代码

import org.jetbrains.annotations.NotNull;

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

/***
 * 日期大小比较工具类
 * @author psyduck
 * @version 1.0
 */
public class DateComparison {
    
    

    /***
     * main方法
     * @param args
     * @throws ParseException 控制台输入错误的情况下引发
     */
    public static void main(String[] args) throws ParseException {
    
    
        //假设从前端接到参数 日期A 日期B(分别以js tolocaleString所得日期和layui日期控件所得日期举例)或从控制台获取日期
        DateComparison dc = new DateComparison();

        //js tolocaleString所得日期解决方案
        String TimeStartFromJs = "2020/11/29 上午10:18:01";
        String TimeEndFromJs = "2019/1/21 下午3:12:27";

        Date dateTimeStartFromJs = dc.localeStringToDate(TimeStartFromJs);
        Date dateTimeEndFromJs = dc.localeStringToDate(TimeEndFromJs);

        String Comparison = dc.dateComparison(dateTimeStartFromJs,dateTimeEndFromJs);
        System.out.println(Comparison);
        //layui所得日期解决方案
//        String timeStartFromLayui = "2020-11-02";
//        String timeEndFromLayui = "2020-11-25";
//
//        timeStartFromLayui = timeStartFromLayui.replaceAll("-","/");
//        timeEndFromLayui = timeEndFromLayui.replaceAll("-","/");
//
//        timeStartFromLayui += " 00:00:00";
//        timeEndFromLayui += " 00:00:00";
//
//        Date dateTimeStartFromLayui = dc.localeStringToDate(timeStartFromLayui);
//        Date dateTimeEndFromLayui = dc.localeStringToDate(timeEndFromLayui);
//        String Comparison = dc.dateComparison(dateTimeStartFromLayui,dateTimeEndFromLayui);
//        System.out.println(Comparison);
        //从控制台获取日期解决方案
//        Scanner sc = new Scanner(System.in);
//        System.out.println("请输入第一个时间:格式yyyy/MM/dd HH:mm:ss");
//        String timeStart = sc.nextLine();
//        System.out.println("请输入第二个时间:格式yyyy/MM/dd HH:mm:ss");
//        String timeEnd = sc.nextLine();
//
//        Date dateTimeStart = dc.localeStringToDate(timeStart);
//        Date dateTimeEnd = dc.localeStringToDate(timeEnd);
//
//        String Comparison = dc.dateComparison(dateTimeStart,dateTimeEnd);
//        System.out.println(Comparison);

    }

    /***
     * 这个方法用于把在JS中通过localeString方法所得的日期字符串
     * 处理为yyyy-MM-dd HH:mm:ss 格式的日期并返回
     * @param localeString 在JS中通过localeString方法所得的日期字符串
     * @return 格式化过的Date
     */
    public Date localeStringToDate(String localeString) throws ParseException {
    
    
        Date date;
        SimpleDateFormat sdf;
        if(localeString.contains("下午")){
    
    
            localeString = localeString.replaceAll("下午","");
            sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            date = sdf.parse(localeString);
            date.setTime(date.getTime()+(1000*3600*12));
            return date;
        }else if (localeString.contains("上午")){
    
    
            localeString = localeString.replaceAll("上午","");
            sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            date = sdf.parse(localeString);
        }
        sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        date = sdf.parse(localeString);
        return date;
    }

    /***
     * 通过比较毫秒数得出差额再转换为天/时/分/秒
     * @param dateTimeA 比较的第一个日期
     * @param dateTimeB 比较的第二个日期
     * @return 比较结果
     */
    public String dateComparison(@NotNull Date dateTimeA, @NotNull Date dateTimeB){
    
    
        long small = dateTimeA.getTime();
        long big  = dateTimeB.getTime();
        long num = big-small;
        long day =num/1000/3600/24;
        long hour = (num - day*24*3600*1000)/1000/3600;
        long min  =(num-day*24*3600*1000-hour*3600*1000)/1000/60;
        long second  = (num-day*24*3600*1000-hour*3600*1000-min*60*1000)/1000;
        return "你的日期输入时间差为:"+day+"天"+hour+"小时"+min+"分"+second+"秒";
    }
}

最后更新于2020年11月30日凌晨0:36分
原创不易,如果该文章对你有所帮助,望左上角点击关注~如有任何技术相关问题,可通过评论联系我讨论,我会在力所能及之内进行相应回复以及开单章解决该问题.

该文章如有任何错误请在评论中指出,感激不尽,转载请附出处!
个人博客首页:https://blog.csdn.net/yjrguxing ——您的每个关注和评论都对我意义重大

猜你喜欢

转载自blog.csdn.net/yjrguxing/article/details/110359225