我想驗證幾個日期格式,如下面的例子:驗證的Java 8日期
YYYY
YYYY-MM
YYYY-MM-DD
驗證必須確保日期格式是正確的日期存在。
我知道Java 8提供了一個新的Date API,所以我想知道它是否能夠做這樣的工作。
使用Java 8 date API有更好的方法嗎? 使用具有lenient參數的Calendar類仍然是一個好習慣嗎?
我想驗證幾個日期格式,如下面的例子:驗證的Java 8日期
YYYY
YYYY-MM
YYYY-MM-DD
驗證必須確保日期格式是正確的日期存在。
我知道Java 8提供了一個新的Date API,所以我想知道它是否能夠做這樣的工作。
使用Java 8 date API有更好的方法嗎? 使用具有lenient參數的Calendar類仍然是一個好習慣嗎?
爲了驗證YYYY-MM-DD
格式,你可以簡單地使用LocalDate.parse
在java.time
介紹,自JDK 8
從文本字符串,如 2007-12-03獲取LOCALDATE的實例。
該字符串必須表示有效日期,並使用 DateTimeFormatter.ISO_LOCAL_DATE進行解析。
如果日期無效,將會拋出A DateTimeParseException
。
對於您給我們的其他兩種格式,將拋出異常。這是合乎邏輯的,因爲它們不是真正的日期,只是日期的一部分。
LOCALDATE的還提供了一個方法of(int year, int month, int dayOfMonth)
因此,如果你真的想當年只是驗證在某些情況下,在其他情況下或完整的日期是本月的一年,那麼你可以做這樣的事情:
public static final boolean validateInputDate(final String isoDate)
{
String[] dateProperties = isoDate.split("-");
if(dateProperties != null)
{
int year = Integer.parseInt(dateProperties[0]);
// A valid month by default in the case it is not provided.
int month = dateProperties.length > 1 ? Integer.parseInt(dateProperties[1]) : 1;
// A valid day by default in the case it is not provided.
int day = dateProperties.length > 2 ? Integer.parseInt(dateProperties[2]) : 1;
try
{
LocalDate.of(year, month, day);
return true;
}
catch(DateTimeException e)
{
return false;
}
}
return false;
}
注是唯一的3
您可以指定缺少的字段與parseDefaulting
到讓所有的格式化工作:
public static boolean isValid(String input) {
DateTimeFormatter[] formatters = {
new DateTimeFormatterBuilder().appendPattern("yyyy")
.parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.toFormatter(),
new DateTimeFormatterBuilder().appendPattern("yyyy-MM")
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.toFormatter(),
new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd")
.parseStrict().toFormatter() };
for(DateTimeFormatter formatter : formatters) {
try {
LocalDate.parse(input, formatter);
return true;
} catch (DateTimeParseException e) {
}
}
return false;
}
http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html – arodriguezdonaire
你有什麼期望爲「YYYY」的日期? 「YYYY-01-01」? 「YYYY-MM」同樣的問題。 –
使用'Calendar'類從來不是一個好習慣。 'DateFormat'總是要使用的。 – Kayaman