2017-10-04 2 views
-1

J'utilise le code ci-dessous pour voir si ma date d'entrée (format mm/dd/yyyy HH:mm:ss) est comprise entre startDate et endDate. J'ai utilisé compareTo() dans cette logique. Mais avec le format mm/dd/yyyy, il compare le mois seul et imprime la sortie en "MYLOGIC methood". Mais j'ai besoin de comparer l'année pour voir si la date d'entrée est dans les limites startDate et endDate.Java DateComparison

public class DateLogicNew { 

    public static void main(String[] args) { 
     String startDate[] = new String[1]; 
     String endDate[] = new String[1]; 
     startDate[0] = "01/01/0600 00:00:00"; 
     endDate[0] = "11/27/3337 00:00:00"; 

     String inputArr[] = { "05/01/0500 01:00:00", "11/27/3337 00:00:00", 
       "05/05/0700 00:00:00", "11/27/2337 00:00:00", 
       "06/05/4000 00:00:00" }; 

     String protectedArr[] = new String[inputArr.length]; 
     int temp[] = new int[inputArr.length]; 

     System.out.println(inputArr.length); 

     System.out.println("Length of the inputArr: " + inputArr.length); 
     // System.out.println(""); 

     for (int i = 0; i < inputArr.length; i++) { 

      if (inputArr[i] 
        .matches("^([0-1][0-9])/([0-3][0-9])/([0-9]{4})(?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$")) { 
       System.out.println("Inside if loop"); 

       if (inputArr[i].compareTo(startDate[0]) > 0 
         && inputArr[i].compareTo(endDate[0]) < 0) { 
        System.out.println("inside the compare condition"); 
        temp[i] = 1; 
        protectedArr[i] = inputArr[i]; 
        System.out 
          .println("Values of the inputArr in MYLOGIC method : " 
            + protectedArr[i]); 
       } 
      } else { 
       temp[i] = 0; 
      } 
     } 
     System.out.println(""); 

     for (int i = 0; i < inputArr.length; i++) { 
      if (temp[i] == 1) { 
       inputArr[i] = protectedArr[i]; 
      } 
      System.out 
        .println("Final Value to the output port: " + inputArr[i]); 
     } 
    } 
} 
+1

Vous devez être plus clair pour décrire votre problème - ce qui se passe, ce que vous attendez d'arriver, comment ils diffèrent, une entrée d'échantillonnage et de sortie, etc. Vous pouvez également trouver plus facile à utiliser la date intégrée analyse et gestion des bibliothèques. – pvg

+1

Pourquoi n'utilisez-vous pas les instances 'Date' actuelles pour faire la comparaison? Comparer des dates basées sur des chaînes est forcément difficile. Les comparaisons de chaînes sont faites caractère par caractère et donc '10/31/9999' serait toujours" plus petit "que' 11/27/3337', parce que les caractères de l'index 1 (0 et 1) sont comparés indépendants du reste. – Thomas

+0

Vous souciez-vous vraiment de 1 AM en l'an 500? Ou est quelque chose d'autre qui se passe ici? Cet exemple de données est étrange. –

Répondre

0

java.time

Parse comme des objets de date-heure. Regex est exagéré.

L'approche moderne utilise les classes java.time plutôt que les anciennes classes date-heure héritées.

String input = "05/01/0500 01:00:00" ; 
DateTimeFormatter f = DateTimeFormatter.ofPattern("MM/dd/uuuu HH:mm:ss") ; 
LocalDateTime ldt = LocalDateTime.parse(input , f) ; 

Comparer les méthodes isBefore, isAfter, isEqual.

if((! x.isBefore(start)) && x.isBefore(stop)) { … } 
0

J'ai moi-même trouvé la solution à ma question. Veuillez vérifier le code ci-dessous pour voir la logique avant de comparer les dates.

Chaîne startDate = "0600/01/01 00:00:00"; Chaîne endDate = "3337/11/27 00:00:00";

try { 

     for (int i = 0; i < inputArr.length; i++) { 
      String newDateInput = inputArr[i]; 
      // System.out.println("NewInput:" + newInput); 

      DateFormat parser = new SimpleDateFormat("MM/dd/yyyy"); 
      DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); 

      Date convertedDate = parser.parse(newDateInput); 
      String newFormattedInput = formatter.format(convertedDate); 
      // System.out.println("newFormattedInput: " + 
      // newFormattedInput); 
      if (newFormattedInput 
        .matches("^([0-9]{4})/([0-1][0-9])/([0-3][0-9])(?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$")) { 
       if (newFormattedInput.compareTo(startDate) > 0 
         && newFormattedInput.compareTo(endDate) < 0) { 
        temp[i] = 1; 

        protectedArr[i] = inputArr[i]; 
        System.out 
          .println("Values of the inputArr in PROTECT method : " 
            + protectedArr[i]); 

       } else { 
        temp[i] = 0; 
       } 
      } 
     } 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    }