我使用NetBeans IDE 7.2。我有两个独立的类newDateTest.java
和newDateMethod.java
,我目前使用我的方法类来验证我在测试类中使用的用户输入的日期。
try
{
Prompt ="please enter a date in the format dd-mm-yyyy";
System.out.println(Prompt);
String inputDate = in.next();
isValid = newDateMethod.validDate(input, input, input);
if (isValid){
System.out.println("VALID DATE");
} else {
System.out.println("INVALID DATE");
}
} catch (ArrayIndexOutOfBoundsException oob) {
System.out.println(oob);
}
然而,我不知道如何验证我的方法类的日期,因为我是相当新的Java。
有人能想出解决办法吗?我学过的是日期格式化程序但我不确定这是否合适?如果是这样,我就不知道怎么用了
像这样:
Date date = null;
String inputDate = "07-01-2013";
try {
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
formatter.setLenient(false);
date = formatter.parse(inputDate);
} catch (ParseException e) {
e.printStackTrace();
}
更新于2021年7月13日:
我由衷地同意Ole V.V.的观点请看下面的评论。所有Java和Kotlin开发人员都应该更喜欢Java。时间包。如果时间允许,我将添加一个更现代的示例
看看SimpleDateFormat.parse(...)
,记得用try-catch包围。
标准的JDK类是SimpleDateFormat:
DateFormat fmt = new SimpleDateFormat("yourformathere");
// use fmt.parse() to check for validity
或者,我建议使用Joda Time的DateTimeFormat
。
您也可以使用Apache commons例程包中的DateValidator,而不是依赖于往往具有较小性能开销的异常:
if (DateValidator.getInstance().validate(inputDate, "dd-MM-yyyy") != null) {
// Date is valid
}
else {
// Date is invalid
}
小小的免责声明虽然,我还没有看到验证方法的实现,我不确定它是否使用例如SimpleDateFormat…
java.time
我建议你使用java。time,现代Java日期和时间API,用于您的日期工作。它还为您提供了比其他一些答案中使用的旧SimpleDateFormat
类更精确的验证。
String[] exampleInputStrings = { "07-01-2013", "07-01-017",
"07-01-2ooo", "32-01-2017", "7-1-2013", "07-01-2013 blabla" };
for (String inputDate : exampleInputStrings) {
try {
LocalDate date = LocalDate.parse(inputDate, DATE_FORMATTER);
System.out.println(inputDate + ": valid date: " + date );
} catch (DateTimeParseException dtpe) {
System.out.println(inputDate + ": invalid date: " + dtpe.getMessage());
}
}
我的示例代码的输出是:
07-01-2013: valid date: 2013-01-07 07-01-017: invalid date: Text '07-01-017' could not be parsed at index 6 07-01-2ooo: invalid date: Text '07-01-2ooo' could not be parsed at index 6 32-01-2017: invalid date: Text '32-01-2017' could not be parsed: Invalid value for DayOfMonth (valid values 1 - 28/31): 32 7-1-2013: invalid date: Text '7-1-2013' could not be parsed at index 0 07-01-2013 blabla: invalid date: Text '07-01-2013 blabla' could not be parsed, unparsed text found at index 10
对于一个好的验证,您可能应该添加一个范围检查。使用LocalDate
的isBefore
和/或isAfter
方法
此外,如果您打算对日期进行除验证之外的任何操作,则应该在程序中避免解析LocalDate
(而不是字符串)。
您应该使用SimpleDateFormat.parse(String)
方法。如果传递的日期格式错误,则会抛出异常,在这种情况下您将返回false。
public boolean validateDate(String date) {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
try {
sdf.parse(date);
return true;
}
catch(ParseException ex) {
return false;
}
}
可以使用joda-time。
DateTimeFormat.forPattern(INPUTED_DATE_FORMAT);
//one can also use it with locale
DateTimeFormat.forPattern(USER_DATE_FORMAT).withLocale(locale);
fmt.parseDateTime(INPUTED_DATE);
如果parseDateTime
抛出IllegalArgumentException
则日期无效