簡體   English   中英

比較日期的方法似乎根本不起作用

[英]Method to compare dates doesn't seem to work — at all

public void display(Date date) {
        for (int i = 0; i < this.position; i++) {
            schedule[i].init();
            while (schedule[i].hasMoreOccurrences()) {
                Date tmp = schedule[i].nextOccurrence();
                if (tmp.compareTo(date) == 0) {
                    System.out.println(schedule[i].toString());
                    schedule[i].init();
                    break;
                }

            }
        }
    }

基本上,上面經歷了一系列“事件”。 每個事件都有一個方法來檢查它是否有更多的出現次數以及獲取下一次出現的方法(類型為date)。

該方法接受日期並遍歷數組並檢查每個事件。 對於每個事件,它會檢查是否有更多事件。 如果是,則檢查該事件是否與指定的日期“相等”。 如果是,則打印事件並跳出循環並移動到數組中的下一個事件。 如果下一次出現不等於給定的日期,只要事件有更多要檢查的事件,它就會繼續檢查。

我知道這個方法是支持打印事件,但我沒有錯誤,沒有輸出。 我一直在玩它一段時間無濟於事。

我100%確定我的hasMoreOccurrences()和nextOccurrence()方法正常工作,因為依賴於它們的代碼的其他部分非常有用。

我很難過:/感謝您的幫助:)

編輯我已經打印了tmp和日期,我發現它們都出現在相同的日期但不是同一時間。 我不關心時間,只關心日期。 有任何想法嗎?

有幾種方法可以比較兩個Date實例而不考慮時間。

  1. 將兩者都轉換為日歷並重置desinterest字段。

     Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); 

    然后比較它們。

     if (calendar1.equals(calendar2)) 

    (是的,這太可怕了,這就是為什么JodaTime存在且JSR-310正在進行中)

  2. 格式化為String而沒有時間然后再解析。

     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); date = sdf.parse(sdf.format(date)); 

    然后比較它們。

     if (date1.equals(date2)) 
  3. 從一開始就使用JodaTime

     if (dateTime1.toLocalDate().equals(dateTime2.toLocalDate())) 

請注意,我使用x.equals(y)而不是x.compareTo(y) == 0因為這就是你應該如何比較Java中相等的對象。

暫無
暫無

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

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