Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用格式为dd.MM.yyyy的Datetime解析只有两位数年份的字符串?_Java_Datetime_Jodatime - Fatal编程技术网

Java 使用格式为dd.MM.yyyy的Datetime解析只有两位数年份的字符串?

Java 使用格式为dd.MM.yyyy的Datetime解析只有两位数年份的字符串?,java,datetime,jodatime,Java,Datetime,Jodatime,我需要验证字符串是否包含有效的日期输入。为此,我创建了一个方法 public static Date validateDateFormat(final String expectedDateFormat, final String dateToValdate) { DateTimeFormatter formatter = DateTimeFormat.forPattern(expectedDateFormat); DateTime dt = null; try {

我需要验证字符串是否包含有效的日期输入。为此,我创建了一个方法

public static Date validateDateFormat(final String expectedDateFormat, final String dateToValdate) {


    DateTimeFormatter formatter = DateTimeFormat.forPattern(expectedDateFormat);
    DateTime dt = null;

    try {
        dt = formatter.parseDateTime(dateToValdate);
    } catch (Exception e) {
        log.error("cannot parse {0} to format {1}", dateToValdate, expectedDateFormat);
    }
    if (dt != null) {
        return dt.toDate();
    }
    else {
        return null;
    }       
}
对于这些值,它不会像预期的那样返回null。字符串将转换为值为0018-12-18T00:00:00.000+00:53:28的DateTime,是否有方法更改此行为?我认为如果格式不正确,它将失败

这是我的测试

@Test
public void checkFormat6() {
    String date = "18.12.18";
    String expectedFormat = "dd.MM.yyyy";       

    assertNull(DateFormatChecker.validateDateFormat(expectedFormat, date));
}

我需要使用JDK 7和joda time 2.10,joda time与
y
yy
yyyy
不完全匹配。即使是
d.M.y
模式也会将
18.12.18
解析为有效的日期时间

您可以使用
java.time
类(java 7有一个后端口)获得更严格的模式解析,例如通过设置
ResolverStyle.strict

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(expectedFormat)
    .withResolverStyle(ResolverStyle.STRICT);

上面的示例将失败
dd.MM.yyyy
,但它仍然允许
d.M.y
解析
18.12.18

Joda Time与
y
yy
yyyy
不严格匹配。即使是
d.M.y
模式也会将
18.12.18
解析为有效的日期时间

您可以使用
java.time
类(java 7有一个后端口)获得更严格的模式解析,例如通过设置
ResolverStyle.strict

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(expectedFormat)
    .withResolverStyle(ResolverStyle.STRICT);

上面的示例将失败
dd.MM.yyyy
,但它仍然允许
d.M.y
解析
18.12.18

范围检查?你知道你会接受哪一个日期范围,因为它不能追溯到18岁,所以拒绝任何可以追溯到18岁的日期。范围检查?你知道你将接受的日期范围,并且因为它不会追溯到18岁,所以拒绝任何这样的日期。