2013-11-28 4 views
0

Я написал код, который проверяет дату, но почему он не проверяет год? см. Недействительный год даже не дает ошибки.Как я могу проверить год использования API дат в java

try { 
     SimpleDateFormat df = new java.text.SimpleDateFormat("MM/dd/yyyy"); 
     df.setLenient(false); 
     Date date=df.parse("10/4/1234"); 
     System.out.println("date------->"+date); 
    } catch (java.text.ParseException e) { 
     e.printStackTrace(); 
    } 

Ошибка в процедуре SQL Server:

ВЫБОР @CONVERT_DATETIME = новообращенный (DateTime, @DB_DATE, 103);

SET @STORE_DB = CAST (((CAST (DATEIFF (s, '1970-01-01', ltrim (rtrim (@CONVERT_DATETIME))) как bigint)) * 1000 - @ GMT5) как varchar (MAX));

+2

Почему вы думаете, что 1234 год недействителен? – sergeyan

+4

[1234 * is a a valid year] (http://en.wikipedia.org/wiki/1234). –

+1

Вы говорите, что не было 1234 года? +1 @ ChrisMantle-не знал, что есть статьи wiki по годам;) – Melquiades

ответ

2

1234, конечно, год.

Если вы хотите больше ограничений, вы можете использовать GregorianCalendar для проверки года. Например:

Calendar cal = GregorianCalendar.getInstance(); 
cal.setTime(myDate); 
if (cal.get(Calendar.YEAR) < 1970) { 
    throw new ParseException("Date under 1970 are not allowed!", 6); 
} 
1

Как уже упоминалось 1234 является действительным год. Я предполагаю, что вы хотите определить 1234 как не год, который нужно использовать.

Вы можете извлечь год из строки и выполнить простое сравнение.

try { 
     SimpleDateFormat df = new java.text.SimpleDateFormat("MM/dd/yyyy"); 

     Calendar c = Calendar.getInstance(); 
     c.setTime(df.parse("10/4/1234")); 

     System.out.println("Year = " + c.get(Calendar.YEAR)); 
     // check the condition whether year is valid 
     if(c.get(Calendar.YEAR) < 1970) { 
      System.out.println("Invalid Year entered"); 
      // you can throw an exception here if you want 
     } 
    } catch (java.text.ParseException e) { 
     e.printStackTrace(); 
    } 

Вы можете использовать Calendar API для извлечения день, месяц, минуты, второй и т.д.

В вашем примере ParseException будет происходить, если вы использовали

the date "10/4/12345" 

для следующего формата

SimpleDateFormat("MM/dd/yyyy"); 

поскольку 12345 не соответствует "yyyy"

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