2015-02-17 79 views
-1

我需要驗證2日期,一個是由用戶挑選的,另一個是我從日曆中獲取的日期...這是我迄今爲止嘗試沒有成功的:在android studio上驗證兩個日期

Calendar c = Calendar.getInstance(); 
if(!DateIsOlder(txtVwAppointmentDate.getText(), c.getTime())) { 
      try { 
        //My code 
       } 

public static boolean DateIsOlder(CharSequence date1, Date date2){ 
    //SimpleDateFormat Date2 = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz -HH:mm yyyy", Locale.ENGLISH); 
    SimpleDateFormat dfDate = new SimpleDateFormat("dd/mm/yyyy", Locale.ENGLISH); 
    boolean isOlder = false; 
    try{ 
     //Date newDate = (Date)Date2.parse(date2); 
     if(dfDate.parse(String.valueOf(date1)).before(dfDate.format(date2))){ 
     isOlder = true; 
     } 
     else if (dfDate.parse(String.valueOf(date1)).equals(dfDate.format(date2))){ 
     isOlder = false; 
     } 
     else { 
      isOlder = false; 
     } 
    }catch (Exception e){ 
     e.printStackTrace(); 
    } 
    return isOlder; 
} 

錯誤發生在.before(dfDate.format(date2)),它表示: 錯誤:(484,51)錯誤:類Date中的方法不能應用於給定的類型; 要求:日期 發現:字符串 原因:實際參數字符串無法通過方法調用轉換

,如果你可以看到,如果我比較這兩個日期,如果他們是平等的,編譯器不顯示轉換爲日期,在其他在這條線的任何錯誤:

else if (dfDate.parse(String.valueOf(date1)).equals(dfDate.format(date2))) 

我也嘗試將其更改爲日期,但沒有successs ...任何想法,以幫助我解決這個問題?謝謝。

+0

你爲什麼要做'dfDate.format(date2)'? – njzk2 2015-02-17 21:46:59

+0

hi @ njzk2我這樣做是爲了改變日期的格式,因爲日曆帶給我這樣的整個日期「EEE MMM dd HH:mm:ss zzz -HH:mm yyyy」,所以我嘗試改變格式用戶選擇以這種格式「dd/mm/yyyy」 – jugger 2015-02-17 21:52:54

+0

讀取'before'方法的原型。 – njzk2 2015-02-17 22:27:47

回答

0

您可以將用戶日期轉換爲時間戳並進行比較。

DateFormat formatter = new SimpleDateFormat("MM-dd-yyyy"); 
Date date = (Date)formatter.parse(str_date); 
Timestamp timeStamp = new TimeStamp(date); 
+0

Hi @Vikas,時間戳也是不兼容的,與之前,之後或之前的方法比較 – jugger 2015-02-17 22:27:46

+0

時間戳是整數。將這兩個日期轉換爲時間戳,並比較你比較兩個將得到它的整數。 – 2015-02-18 09:15:24

0

請勿使用java.util.Date。谷歌說下面關於日期:

This class' deprecated display-related functionality is now provided by DateFormat, and this class' deprecated computational functionality is now provided by Calendar.

換句話說,它已被棄用。您應該使用日期格式,您可以在此處詳細瞭解:http://developer.android.com/reference/java/text/DateFormat.html

要執行日期比較,你再想讓兩個不同的日曆對象,要麼()之前或之後()

+0

嗨@Al Wang,android工作室沒有提到任何關於日期的消息,但我想我會使用你的建議。 – jugger 2015-02-17 22:26:50

0

你的問題是調用該dfDate.format(DATE2)返回一個字符串,而不是一個Date對象,所以你需要恰克YOUT方法:

public static boolean DateIsOlder(CharSequence date1, Date date2){ 
    SimpleDateFormat dfDate = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH); 
    boolean isOlder = false; 

    try{ 
     if(dfDate.parse(String.valueOf(date1)).before(dfDate.parse(dfDate.format(date2)))){ 
      isOlder = true; 
     } 
     else { 
      isOlder = false; 
     } 
    }catch (Exception e){ 
     e.printStackTrace(); 
    } 
    return isOlder; 
} 
+0

Hi @Adrián,我也嘗試這樣做,但調試它直接傳遞的代碼,它就像dfDate.parse(dfDate.format(date2))什麼都不做,它只是帶日期而不格式化,例如幾秒鐘前看這個測試... dfDate.parse(dfDate.format(date2))= Sat Jan 17 00:16:00 GMT-05:00 2015 – jugger 2015-02-17 22:17:01

+0

我知道,但如果你只是想比較一下如果日期在另一個日期之前,則不需要格式化它們。 當我試着上面的代碼,它適用於我。 – alcaamado 2015-02-17 22:22:37

+0

另一個問題,看看在SimpleDateFormat中,當使用'mm'時,它表示分鐘,'MM'表示幾個月。 我在之前發佈的代碼中更改它,但我不知道是否在您的代碼中進行了更改。 – alcaamado 2015-02-17 22:32:58

0

好感謝大家誰幫我想想辦法,我儘量讓簡單的方法,它的工作原理,我不需要所有的信息calendar.getTime帶來的,所以我做了以下幾點:

Calendar c = Calendar.getInstance(); 
     int year = c.get(Calendar.YEAR); 
     int month = c.get(Calendar.MONTH) + 1; 
     int day = c.get(Calendar.DAY_OF_MONTH); 
     if(!DateIsOlder(txtVwAppointmentDate.getText(), month + "/" + day + "/" + year)) { 
      try { //my code } 

public static boolean DateIsOlder(CharSequence date1, String date2){ 
    SimpleDateFormat dfDate = new SimpleDateFormat("MM/dd/yyyy"); 
    boolean isOlder = false; 
    try{ 
     //Date newDate = (Date)Date2.parse(date2); 
     if(dfDate.parse(String.valueOf(date1)).before(dfDate.parse(date2))){ 
      isOlder = true; 
     } 
     else { 
      isOlder = false; 
     } 
    }catch (Exception e){ 
     e.printStackTrace(); 
    } 
    return isOlder; 
} 

它的工作原理沒有任何問題!感謝大家:)