今天朋友问我怎么方便的比较两个日期之间的差,想了下日期方面用的还是比较多的,晚上回来简单写了下
其中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 ——您的每个关注和评论都对我意义重大