比較兩個java.util.Date 的日期(年月日)是否相同(忽略時、分、秒)的多種方法
介紹幾種比較Date年月日的方法
1、需求:
1)下面兩個時間進行比較:
Thu Jan 01 08:59:00 CST 1970
Thu Jan 01 08:48:00 CST 1970
=》比較結果:same
2)下面兩個時間進行比較:
Thu Jan 01 08:00:00 CST 1970
Fri Jan 01 08:00:00 CST 2016
=>比較結果:diff2、比較方法
這裡就直接上程式碼了~列了五種只比較年月日,忽略時分秒的日期比較方式,以及各種方法的效能比較:
method 1:
public static boolean sameDate(Date d1, Date d2) { if(null == d1 || null == d2) return false; Calendar cal1 = Calendar.getInstance(); cal1.setTime(d1); cal1.set(Calendar.HOUR_OF_DAY, 0); cal1.set(Calendar.MINUTE, 0); cal1.set(Calendar.SECOND, 0); cal1.set(Calendar.MILLISECOND, 0); Calendar cal2 = Calendar.getInstance(); cal2.setTime(d2); cal2.set(Calendar.HOUR_OF_DAY, 0); cal2.set(Calendar.MINUTE, 0); cal2.set(Calendar.SECOND, 0); cal2.set(Calendar.MILLISECOND, 0); return cal1.getTime().equals(cal2.getTime()); }
method 2:
public static boolean sameDate(Date d1, Date d2){
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
//fmt.setTimeZone(new TimeZone()); // 如果需要設定時間區域,可以在這裡設定
return fmt.format(d1).equals(fmt.format(d2));
}
method 3:
DateUtils提供的方法原始碼如下:import org.apache.commons.lang.time.DateUtils; public static boolean sameDate(Date d1, Date d2){ DateUtils.isSameDay(date1, date2); }
public static boolean sameDate(Date d1, Date d2) { if(null == d1 || null == d2) return false; //return getOnlyDate(d1).equals(getOnlyDate(d2)); Calendar cal1 = Calendar.getInstance(); cal1.setTime(d1); Calendar cal2 = Calendar.getInstance(); cal2.setTime(d2); return cal1.get(0) == cal2.get(0) && cal1.get(1) == cal2.get(1) && cal1.get(6) == cal2.get(6); }
其實上面的方法就是直接獲取並比較了Calendar物件的紀元、年份和所在年份的第幾天,這樣來比較日期會比上面兩種方法快。
method 4:
import org.joda.time.LocalDate;
import org.joda.time.DateTime;
public static Boolean sameDate(Date dt1 , Date dt2 )
{
LocalDate ld1 = new LocalDate(new DateTime(dt1));
LocalDate ld2 = new LocalDate(new DateTime(dt2));
return ld1.equals( ld2 );
}
如果是Maven,需要新增下面的依賴:
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.2</version>
</dependency>
method 5:
這個是Java8中java.time提供的方法
private static boolean sameDate(Date d1, Date d2) {
LocalDate localDate1 = ZonedDateTime.ofInstant(d1.toInstant(), ZoneId.systemDefault()).toLocalDate();
LocalDate localDate2 = ZonedDateTime.ofInstant(d2.toInstant(), ZoneId.systemDefault()).toLocalDate();
return localDate1.isEqual(localDate2);
}
通過效能比較,method 4和method 5的速度較其他幾種方法顯著提升,其中method 4較method 5快一點點,method 2最慢。
所以如果程式中需要多次比較日期的話,建議用method 4和5。
相關推薦
比較兩個java.util.Date 的日期(年月日)是否相同(忽略時、分、秒)的多種方法
介紹幾種比較Date年月日的方法 1、需求: 1)下面兩個時間進行比較: Thu Jan 01 08:59:00 CST 1970 Thu Jan 01 08:48:00 CST 1970 =》比較結果:same 2)下面兩個時間進行比較: Thu Jan
java.util.Date日期類通過java語句轉換成Sql(這裡測試用的是oracle)語句可直接插入(如:insert into)的日期型別
public void add(Emp emp) throws Exception{ QueryRunner runner = new QueryRunner(JdbcUtil.getDataSource()); String sql = "insert
js根據當前時間和結束時間做倒計時(還有XXX天XXX時XXX分XXX秒)
js根據當前時間和結束時間做倒計時(還有XXX天XXX時XXX分XXX秒),當天,不需要XXX天數,剩餘0小時,不需要顯示XXX時,剩餘0分鐘,不需要顯示XXX分 1. js方法 2. HTML程式碼 1. js方法 /*
時間(秒)轉時間字串(x天x時x分x秒)
前言 通常為了直觀表現時間會把時間數字轉成時間字串 eg: 輸入時間(秒):123456 輸出時間字串:1天10小時17分鐘36秒 直接上程式碼 public class NumToDateString { public static void main
java實現計算兩個日期相差多少月、比較兩個日期大小 等常用日期操作
import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.u
JAVA 比較兩個日期相差的天數,隔天計算
JAVA 比較兩個日期相差的天數 在工作中我們經常遇到需要計算兩個日期相差的天數的問題,一個是通過得到兩個日期之間的毫秒數,換算成天數得到究竟差了多少天.但是這種問題會出現隔天問題,既: 2017.11.16 4:35 到 2017.11.17 3:35
如何用java比較兩個時間或日期的大小
有一個字串的時間,比如"2012-12-31 16:18:36" 與另一個時間做比較,如果前者比後者早,則返回true,否則返回false。 為此,我設計了一個方法。 import java.uti
java 比較兩個日期大小日期型別和字元型別
/** * 比較兩個日期之間的大小 * * @param d1 * @param d2 * @return 前者大於後者返回true 反之false */ public static b
java比較兩個字串完全不同處高亮顯示(過濾了某些字串前面不不相干字元)
java比較兩個字串完全不同處高亮顯示(過濾了某些字串前面不相干字元) 歡迎各位使用並優化,因為我也不太清楚這裡面是不是有嚴重的問題,後期我會再度優化的,寫這個東西主要是因為在網上很難找到類似的東西= =。 再說一句,請各位大佬帶我飛好嘛!!畢竟我是個小碼農
NSDate的使用方法及步驟(比較兩個日期的前後)
NSDate這個類接觸的時候很像Java中Date,所以很多方法似乎都是一樣,只是名字不同而已。 下面是幾個典型時間操作: 1、系統時間按照設定的格式以字串形式輸出: // 建立一個時間物件 NSDate *date = [NSDated
JAVA 比較兩個日期相差的天數
在測試工作中經常會使用到比較兩個日期相差的天數,我之前用過實現這一功能的兩個版本的方法,原始碼如下: 版本一:public static int getIntervalDays(Date fDate, Date oDate) { if (null == fDa
shell腳本學習(2)比較兩個數字大小
$1 num centos7 錯誤 you equal shel 腳本 語句 註意:shell中對比字符串只能使用==、<、>、!=、-z、-n。對比字符串時,末尾一定要加上x(或者a、b等)一個字符,因為if [ $1x == "ab"x ]時如果沒有了x
C#代碼中如何比較兩個日期的大小?
inf div return 比較 action tco date string 技術 C#中比較兩個日期大小的方法 /// <summary> /// 比較兩個日期大小 /// </summary>
比較兩個物件是否相等(淺比較)
function isObjEqual (o1, o2) { var props1 = Object.getOwnPropertyNames(o1); var props2 = Object.getOwnPropertyNames(o2); if (props1.length !
java 比較兩個物件屬性值變化情況,用於記錄日誌使用
package com.cdc.console.controller; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; public cl
js-比較兩個日期的大小
第一種方法: function CompareDate(d1,d2) { return ((new Date(d1.replace(/-/g,"\/"))) > (new Date(d2.replace(/-/g,"\/")))); } var current_time = "20
比較兩個陣列的不同 java
// 返回不相同的元素 public static Set<String> getdiff(String[] a, String[] b){ Set<String> diff = new HashSet<String>(); //用
java中比較兩個double型別值的大小
非整型數,運算由於精度問題,可能會有誤差,建議使用BigDecimal型別,具體 BigDecimal的詳細說明參考jdk開發幫助文件。 import java.math.BigDecimal; public class DoubleCompare { public String co
Oracle--Oracle資料庫中插入日期,日期帶有時分秒(java.util.Date型別)
通過JDBC向oracle資料庫中插入時間型別時間時,可以直接向資料庫中插入java.sql.Date型別的時間,但是時間只包含年月日,沒有時分秒。如果需要通過JDBC向oracle中插入java.util.Date型別的時間,先將Date轉換成格式化字串,再進
Java方法案例--比較兩個值是否相等
package com.zhangxueliang.demo; import java.util.Scanner; @SuppressWarnings("all") public class Met