[英]Comparing two Dates in Java
我有一個帶有必要的訪問器和更改器的Identity
類。
在一個單獨的程序中,我將“標識的日期”與今天的日期進行比較,該日期始終返回<= 10
。 但是,無論何時打印,我都會得到相同的結果。 有沒有其他方法可以訪問正確的日期?
我需要獲取兩個日期之間的天數,但格式有問題:
Date today = new Date();
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
Date a = df.parse("06/18/2015");
Date b = df.parse("01/04/2015");
Date c = df.parse("02/04/2015");
Date d = df.parse("03/04/2015");
Date e = df.parse("07/04/2015");
if(a.compareTo(today) == 30{
//do stuff
}
我嘗試了多種方法都無濟於事。
您的代碼中有兩個錯誤:
如果日期相同,則compareTo()
僅返回0;如果日期在參數之后,則返回正值;如果日期在參數之前,則返回負值。 它不會返回兩個日期之間的差額。 要獲得差異,您可以編寫:
today.getTime() - expiration.getTime()
獲取兩個日期之間的毫秒數,然后將其與以毫秒為單位轉換的10天進行比較。
您沒有正確初始化日期: Date a = new Date(06/18/2015);
將無法正常工作。 應該以毫秒為單位創建一個新的Date作為參數。 因此,您的代碼將6除以18並在2015年前得到毫秒數...您可以使用:
Date a = new GregorianCalendar(2015, 06, 18).getTime();
您可以采用一種更簡單的方式來獲取今天: Date today = new Date();
您正在執行整數除法,而不是調用您認為的Date
構造函數。
Date a = new Date(06/18/2015);
使用類似的DateFormat
public static void main(String[] args) {
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
try {
Date a = df.parse("06/18/2015");
System.out.println("1. " + a);
System.out.println("2. " + df.format(a));
} catch (ParseException e) {
e.printStackTrace();
}
}
注意 Date
是即時時間,因此它的默認文本表示可能與您期望的不同。 請參見下面第一行和第二行的區別,
1. Thu Jun 18 00:00:00 EDT 2015
2. 06/18/2015
我做了一個方法,它接受兩個日期,將它們轉換並返回可以正常工作的long
。 86400000是一天中的毫秒數。 我正在使用GregorianCalendar
格式
public long compareDates(Date exp, Date today){
return (exp.getTime()-today.getTime())/86400000;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.