Я просто задаюсь вопросом, существует ли путь (возможно, с regex) для проверки этого, вход на настольном приложении Java является точно строкой, форматированной как: "YYYY-MM-DD".
Я искал, но без успеха.
Спасибо
Мы использовали http://www.dynamicpdf.com/ , для таких проектов и были довольны результатом. У них есть дизайнерский инструмент PDF WYSIWYG, который вы можете использовать для создания шаблона макета вашего PDF, а также инструмент для объединения шаблона с вашими данными на основе поля для отображения столбцов. Это сохраняет часы ручного кодирования каждого элемента данного PDF. Он поддерживает заголовки страниц и нижних колонтитулов и имеет дело с слоями слоев страниц.
-121--2843400-Используйте следующее регулярное выражение:
^\d{4}-\d{2}-\d{2}$
, как в
if (str.matches("\\d{4}-\\d{2}-\\d{2}")) {
...
}
с методом
, анкеры ^
и $
(Начало и конец строки, соответственно) присутствуют неявно.
Вам нужно больше, чем Regex
, например "9999-99-00" не является действительной датой. Есть SimPledateFormat
класс, который построен для этого. Более тяжелый, но более всеобъемлющий.
E.G.
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
boolean isValidDate(string input) {
try {
format.parse(input);
return true;
}
catch(ParseException e){
return false;
}
}
К сожалению, SimpleDateFormat
как тяжеловес, так и не безопасный.
Построить SimpleDateFormat с маской, а затем вызовите: SimpleDateFormat.parse (строка s, паруселизация p)
Для тонкого контроля рассмотреть вход , используя SimpleDateFormat SimpleDateFormat («Yyyy-MM-DD»)
Сделать все вместе:
Regex
не проверяет значения (например, «2010-19-19») SimpleDateFormat
не проверяет формат («2010-1-2», «1-0002-003» принимаются) Необходимо использовать как для проверки формата, так и значение:
public static boolean isValid(String text) {
if (text == null || !text.matches("\\d{4}-[01]\\d-[0-3]\\d"))
return false;
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
df.setLenient(false);
try {
df.parse(text);
return true;
} catch (ParseException ex) {
return false;
}
}
private static final ThreadLocal<SimpleDateFormat> format = new ThreadLocal<SimpleDateFormat>() {
@Override
protected SimpleDateFormat initialValue() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
df.setLenient(false);
System.out.println("created");
return df;
}
};
public static boolean isValid(String text) {
if (text == null || !text.matches("\\d{4}-[01]\\d-[0-3]\\d"))
return false;
try {
format.get().parse(text);
return true;
} catch (ParseException ex) {
return false;
}
}
(То же самое можно сделать для сопоставления, что также не безопасно без потока)