Java中對兩個(gè)日期時(shí)間的(de)比較方法
發表時(shí)間:2021-1-4
發布人(rén):融晨科技
浏覽次數:62
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在(zài)date2後"); isFirstBig = true; } else if (date1.getTime() < date2.getTime()) { System.out.println("M1--date1在(zài)date2前"); isFirstBig = false; } // Method 2 if (date1.compareTo(date2) == 1) { System.out.println("M2--date1在(zài)date2後"); isFirstBig = true; } else if (date1.getTime() < date2.getTime()) { System.out.println("M2--date1在(zài)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在(zài)date2後"); } else { System.out.println("M3--date1在(zài)date2前"); } } catch (Exception exception) { exception.printStackTrace(); } return isFirstBig; } /** * 計算兩天之(zhī)間的(de)天數 * @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; } /** * 獲得指定日期的(de)後一天 * * @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; } }
在(zài)Java中比較時(shí)間或者日期基本上(shàng)都要(yào / yāo)轉換成Date類型,以(yǐ)上(shàng)代碼主要(yào / yāo)提供三個(gè)比較的(de)方法,compareTo、getTime、after,另外還提供計算兩個(gè)日期之(zhī)間的(de)間隔天數,以(yǐ)及根據當前日期獲取後一天的(de)日期的(de)方法
代碼雖然簡單,但粗心大(dà)意的(de)我卻在(zài)這(zhè)上(shàng)面耗費了(le/liǎo)近半天的(de)時(shí)間
問題描述:如上(shàng),有三組時(shí)間對,其中第二組的(de)第二個(gè)時(shí)間爲(wéi / wèi)12點多,在(zài)沒改之(zhī)前,隻有這(zhè)組的(de)返回結果是(shì)錯誤的(de),調試半天找不(bù)到(dào)原因,後來(lái)有網友建議把gettime的(de)值打印出(chū)來(lái)看看,打出(chū)來(lái)後發現12點多返回的(de)long值确實比其他(tā)幾個(gè)都小很多,然後把年月日去掉直接比較時(shí)間還是(shì)同樣的(de)結果,然後就(jiù)突然意識到(dào)可能是(shì)“時(shí)”這(zhè)個(gè)單位的(de)問題,然後就(jiù)看到(dào)了(le/liǎo)這(zhè)行代碼
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");下意識的(de)将這(zhè)行代碼改爲(wéi / wèi)
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");看來(lái)區别隻在(zài)于(yú)hh的(de)大(dà)小寫,然後運行結果就(jiù)正确了(le/liǎo)
然後在(zài)博客園看到(dào)這(zhè)樣一篇文章 日期格式化{0:yyyy-MM-dd HH:mm:ss.fff}和(hé / huò){0:yyyy-MM-dd hh:mm:ss.fff}的(de)區别
{0:yyyy-MM-dd HH:mm:ss.fff}:使用24小時(shí)制格式化日期
{0:yyyy-MM-dd hh:mm:ss.fff}:使用12小時(shí)制格式化日期
原來(lái)就(jiù)是(shì)24小時(shí)制和(hé / huò)12小時(shí)制格式的(de)區别,所以(yǐ)大(dà)家以(yǐ)後要(yào / yāo)注意了(le/liǎo)
同理還有這(zhè)個(gè)Calendar.HOUR_OF_DAY和(hé / huò)Calendar.HOUR,前者是(shì)24小時(shí),後者是(shì)12小時(shí)
上(shàng)面java代碼運行後控制台輸出(chū)如下:
date1==1420591920000 date2==1420602780000 M1--date1在(zài)date2前 M2--date1在(zài)date2前 M3--date1在(zài)date2前 date1==1420591920000 date2==1420606380000 M1--date1在(zài)date2前 M2--date1在(zài)date2前 M3--date1在(zài)date2前 date1==1420591920000 date2==1420609980000 M1--date1在(zài)date2前 M2--date1在(zài)date2前 M3--date1在(zài)date2前 天數==35 後一天==2014-12-04