前言
开发中会遇到这样一个场景,一般交易发送会有一个流水。流水一般采用递增的形式、如果流水不做处理,随着时间的累积,流水会越来越大。为了避免流水过大、需要再新的一天重置流水【流水可以按照一定规则拼接】。
判断两个时间是否为同一天,即判断它们的年、月、日是否相同,可以利用Java中的日期类来实现。下面是两种方法。
获取当前日期
/**
* 获取当前时间 日期:20230912 年:2023 月:9 日:12
*/
public static void testData02(){
Date currentDate = new Date();
//int currentYear = currentDate.getYear(); //该方法已经过时
SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
Calendar calender = Calendar.getInstance();
calender.setTime(currentDate);
String currentTime = ft.format(calender.getTime());
int currentYear = calender.get(Calendar.YEAR);
int currentMonth = calender.get(Calendar.MONTH)+1;
int currentDay = calender.get(Calendar.DATE);
System.out.println("日期:" + currentTime +" " + " 年:" + currentYear + " "
+ " 月:" + currentMonth + " " +" 日:" + currentDay);
}
方法一【使用Calendar类】
我们通过获取两个时间实例的年、月、日信息来进行比较,如果三个信息相同,则认为这两个时间为同一天。
/**
* 方法一:使用Calendar类
* 判断两个时间是否为同一天
* @param date1 时间1
* @param date2 时间2
* @return 是否为同一天
*/
public static boolean isSameDay1(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR)
&& cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH)
&& cal1.get(Calendar.DAY_OF_MONTH) == cal2.get(Calendar.DAY_OF_MONTH);
}
方法二【使用SimpleDateFormat类】
我们使用 SimpleDateFormat 类将日期格式化为 “yyyyMMdd” 格式,然后对比两个时间的字符串形式是否相等,来判断这两个时间是否为同一天
/**
* 方法二:使用SimpleDateFormat类
* 判断两个时间是否为同一天
* @param date1 时间1
* @param date2 时间2
* @return 是否为同一天
*/
public static boolean isSameDay2(Date date1, Date date2) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return sdf.format(date1).equals(sdf.format(date2));
}
测试
public static void main(String[] args) throws ParseException {
CompareTimeisEquall.testData02();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
Date date1 = sdf.parse("2021-07-01");
Date date2 = sdf.parse("2021-07-01");
Date date3 = sdf.parse("2021-07-02");
Date date4 = sdf1.parse("20230912");
Date date5 = sdf1.parse("20230912");
Date date6 = sdf1.parse("20230911");
// 方法一示例
System.out.println(isSameDay1(date1, date2)); // true
System.out.println(isSameDay1(date1, date3)); // false
// 测试 20230912 类型的日期
System.out.println(isSameDay1(date4, date5)); // true
System.out.println(isSameDay1(date5, date6)); // false
// 方法二示例
System.out.println(isSameDay2(date1, date2)); // true
System.out.println(isSameDay2(date1, date3)); // false
}