2014-12-08 2 views
0

У меня этот метод isFormatDateCorrect, чтобы вернуть true, если этот формат ([email protected]) даты верен, и эти методы являются правильными.манипулировать строкой date в Java

public boolean isFormatDateCorrect(String date) { 
    if (date == null || date.length() == 0) { 
      return false; 
    }     //[email protected] 
    return date.matches("([0-9]{4})@([0-9]{4})-([0-9]{2})-([0-9]{2})"); 
} 

и здесь у меня есть другие методы isValidDate, но у меня есть ошибки, когда я получаю номер процесса, и год, месяц и день, я использую date.substring(); но это методы возвращают только ложные

public boolean isValidDate(String date) { 

     int process_number, day, month, year, max_days = 0; 

     if (date == null || date.length() == 0) { 
      return false; 
     } 

     //The correct format of date is [email protected] 
     if (isFormatDateCorrect(date) != true) { 
      return false; 
     } 
     //[email protected]([email protected]) 
     process_number = Integer.parseInt(date.substring(0, date.indexOf("@")));//get process number 
     year = Integer.parseInt(date.substring(date.indexOf("@") + 1, date.indexOf("-")));// get year 
     month = Integer.parseInt(date.substring(date.indexOf("-") + 1, date.lastIndexOf("-")));// get month 
     day = Integer.parseInt(date.substring(date.lastIndexOf("-") + 1, date.lenght()));//get day 

     if (month < 1 || month > 12) { 
      return false; 
     } else { 
      switch (month) { 
       case 1: 
       case 3: 
       case 5: 
       case 7: 
       case 8: 
       case 10: 
       case 12: 
        max_days = 31; 
        break; 

       case 4: 
       case 6: 
       case 9: 
       case 11: 
        max_days = 30; 
        break; 

       case 2: 
        if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { 
         max_days = 29; 
        } else { 
         max_days = 28; 
        } 
        break; 
      } 
      if (day < 1 || day > max_days) { 
       return false; 
      } 
     } 
     return true; 
    } 

Для Exemple в Main, когда я испытываю

String date = "[email protected]" 
if(isValidDate(date) != true){ 
    System.out.println("This date is invalid"); 
}else{ 
System.out.println("This date is valid"); 
} 

и выход:

System.out.println ("Эта дата инвалид");

+3

Зачем изобретать колесо? Используйте «SimpleDateFormat» для проверки правильности даты (после удаления номера процесса и @). –

+0

Это тип проблемы, которую можно легко решить, пройдя через отладчик – jalynn2

ответ

0

На самом деле я запустил ваш код, и он печатает «Эта дата для меня». Вы уверены, что не пропустили никаких сообщений на экране? Я скопировал ваш код и должен был исправить орфографическую ошибку «длина» -> «длина». Возможно, ваш код не был перекомпилирован успешно, а затем вы запустили старую версию.

Однако, в случае, если вы не делаете этот материал в качестве кода ката, я предлагаю вам использовать java.util.Date, или даже лучше java.util.Calendar, или даже лучше новый java.time пакет, вместо того, чтобы изобретать колесо.

API Java предоставляет множество методов анализа и расчета дат и времени. Он поддерживает локаль, различные календари, часовые пояса. И в случае, если метеорит ударит по земле на немного другую орбиту, изменив что-то примерно на длительность дней или лет (скачок секунд, високосные годы и прочее), обновление Java исправит ваш код - если вы использовали API. Или в случае, если атеисты возьмут верх и изменят год назад до своего первоначального определения с 13 месяцами вместо 12 (12 - только из-за этих эгоистических римских императоров). Я имею в виду, нечего, но вы никогда не знаете, зачем дублировать усилия, изобретая колесо.

1
public static boolean isValidDate(String inDate) { 
SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-DD"); 
dateFormat.setLenient(false); 
try { 

    dateFormat.parse(inDate.substring(0,(inDate.indexOf("@") - 1)); 
} catch (ParseException pe) { 
    return false; 
} 
return true; 
} 

Используйте этот трюк.

Смежные вопросы