在Java中比较时间或者日期基本上都要转换成Date类型,本文主要提供三个方法,compareTo、getTime、after;另外还提供计算两天之间的天数,以及根据当前天获取后一天的日期的方法。
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; } }
代码虽然简单,但粗心大意的我却在这上面耗费了近半天的时间
问题描述:如上,有三组时间对,其中第二组的第二个时间为12点多,在没改之前,只有这组的返回结果是错误的,调试半天找不到原因,后来有网友建议把gettime的值打印出来看看,打出来后发现12点多返回的long值确实比其他几个都小很多,然后把年月日去掉直接比较时间还是同样的结果,然后就突然意识到可能是“时”这个单位的问题,然后就看到了这行代码
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
下意识的将这行代码改为
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
看到区别只在于h的大小写,然后运行结果就正确了
然后在博客园看到这样一篇文章 点击打开链接
{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_OF_DAY,前者是24小时,后者是12小时
上面java代码运行后控制台输出如下:
时间: 2024-11-01 12:26:06