2016-11-21 8 views
2

У меня есть следующий метод проверки проверки формата даты.Формат даты, подтверждающий

public static void main(String[] args) { 
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX"); 
    String dateString = df.format(new Date()); 
    Validator validator = new Validator(); 
    System.out.println(dateString+" = "+validator.isTimesStampValid(dateString)); 
    String given = "2016­-09-­28T14:50:31.456449+06:00"; 
    System.out.println(given+" = "+validator.isTimesStampValid(given)); 
} 

Я получил результаты, следующие,

2016-11-21T12:18:18.000698+05:30 = false 
2016-­09­-28T14:50:31.456449+06:00 = true 

Мой валидация формат регулярных выражений это, ^\d{4}­-\d{2}-­\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(\+|-­)\d{2}:\d{2}$

Я не могу понять, почему я получаю два различных результата после проверки. По моему мнению, я должен получить тот же результат для значений given и dateString. Может ли пожалуйста, объясните, почему я получаю это ...

+1

Я бы ожидал * both *, чтобы вернуть 'false', так как в вашем регулярном выражении отсутствует' -' между частями даты. --- А что означает '(\ + |)', которое должно совпадать? «+» Или ничего? Но что, если часовой пояс '-03: 00'? – Andreas

+1

Ahhh Похоже, ваше регулярное выражение имеет «SOFT HYPHEN» (U + 00AD) вместо обычных знаков '-' минус. К сожалению !! Голосование закрывается как опечатка. – Andreas

+0

+ Андреас. Попробуйте использовать: \ d {4} - \ d {2} - \ d {2} T \ d {2}: \ d {2}: \ d {2} (\. \ D +)? (\ + \ \ -) \ d {2}: \ d {2} – aquila

ответ

0

Я просто хочу отметить, что регулярное выражение вашего:

^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(\+|-)\d{2}:\d{2}$ 

матчей, в соответствии с regex101, как примеры строк, при условии, и некоторые другие, которые Я продюсировал.