簡體   English   中英

在Java中比較兩個日期

[英]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
}

我嘗試了多種方法都無濟於事。

您的代碼中有兩個錯誤:

  1. 如果日期相同,則compareTo()僅返回0;如果日期在參數之后,則返回正值;如果日期在參數之前,則返回負值。 它不會返回兩個日期之間的差額。 要獲得差異,您可以編寫:

    today.getTime() - expiration.getTime()

    獲取兩個日期之間的毫秒數,然后將其與以毫秒為單位轉換的10天進行比較。

  2. 您沒有正確初始化日期: Date a = new Date(06/18/2015); 將無法正常工作。 應該以毫秒為單位創建一個新的Date作為參數。 因此,您的代碼將6除以18並在2015年前得到毫秒數...您可以使用:

    Date a = new GregorianCalendar(2015, 06, 18).getTime();

  3. 您可以采用一種更簡單的方式來獲取今天: 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

最后,您需要計算兩個日期之間差額 compareTo會告訴您大小,而不是大小。

我做了一個方法,它接受兩個日期,將它們轉換並返回可以正常工作的long 86400000是一天中的毫秒數。 我正在使用GregorianCalendar格式

public long compareDates(Date exp, Date today){

         return (exp.getTime()-today.getTime())/86400000;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM