Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 @DateTimeFormat只对有限的模式起作用。为什么会这样?_Java_Spring_Date Format - Fatal编程技术网

Java @DateTimeFormat只对有限的模式起作用。为什么会这样?

Java @DateTimeFormat只对有限的模式起作用。为什么会这样?,java,spring,date-format,Java,Spring,Date Format,我正在制作一个表格,接收两个注册日期,以查找在插入日期之间注册的用户列表 为了将表单中的输入绑定到命令实例的LocalDateTime类型的数据,我在命令实例中使用了@DateTimeFormat注释,但是,在这段代码中只有一种模式有效 只有yyyyMMddHH模式可以正常工作。其他模式,如yyyy-MM-dd,yyy/MM/dd,等等,都不起作用 它们抛出如下所示的异常 未能将类型为java.lang.String的属性值转换为所需的类型java.time.LocalDateTime,以用于来

我正在制作一个表格,接收两个注册日期,以查找在插入日期之间注册的用户列表

为了将表单中的输入绑定到命令实例的
LocalDateTime
类型的数据,我在命令实例中使用了
@DateTimeFormat
注释,但是,在这段代码中只有一种模式有效

只有
yyyyMMddHH
模式可以正常工作。其他模式,如
yyyy-MM-dd
yyy/MM/dd
,等等,都不起作用

它们抛出如下所示的异常

未能将类型为java.lang.String的属性值转换为所需的类型java.time.LocalDateTime,以用于来自的属性;嵌套异常为org.springframework.core.convert.ConversionFailedException:未能将值2020-08-13从类型[java.lang.String]转换为类型[@org.springframework.format.annotation.DateTimeFormat java.time.LocalDateTime];嵌套异常为java.lang.IllegalArgumentException:值[2020-08-13]的解析尝试失败

这是命令实例的代码

public class UserSearchByRegDateRequest {
    
    @DateTimeFormat(pattern = "yyyyMMddHH")
    private LocalDateTime from;
    @DateTimeFormat(pattern = "yyyyMMddHH")
    private LocalDateTime to;
    
    public LocalDateTime getFrom() {
        return from;
    }
    public void setFrom(LocalDateTime from) {
        this.from = from;
    }
    public LocalDateTime getTo() {
        return to;
    }
    public void setTo(LocalDateTime to) {
        this.to = to;
    }
}
表格的代码

<body>

    <h2><spring:message code="regDateSearchFormTitle"/></h2>
    
    <spring:message code="dateFormatInstruction"/><br/><br/>
    
    <form:form action="processSearch" modelAttribute="searchCommand">
        
        <label> 
            <form:input path="from"/><spring:message code="from"/>
            <form:errors path="from"/>
        </label>
            
        <label>
            <form:input path="to"/><spring:message code="to"/>
            <form:errors path="to"/>
        </label>
            
        <input type="submit" value="search"/>
    </form:form>
    
    <c:if test="${!empty members}">
        <table>
            <tr>
                <th><spring:message code="search.id"/></th>
                <th><spring:message code="search.name"/></th>
                <th><spring:message code="search.email"/></th>
                <th><spring:message code="search.regDate"/></th>
            </tr>

        <c:forEach var="member" items="${members}">
            <tr>
                <td>${member.id}</td>
                <td>${member.name}</td>
                <td>${member.email}</td>
                <td><tf:formatDateTime value="${member.registerDateTime}" pattern="yyyy-MM-dd"/></td>
            </tr>
        </c:forEach>
        
        </table>
    </c:if>
</body>



${member.id} ${member.name} ${member.email}
由于您试图仅转换日期“2020-08-13”,而未指定时间,因此应使用格式如下的LocalDate:

@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate from;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate to;

然后,您可以将格式为“2020-08-13”的字符串转换为LocalDate,而不会引发异常。

由于您尝试只转换日期“2020-08-13”,而不指定时间,因此应使用格式为以下格式的LocalDate:

@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate from;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate to;

然后,您可以将格式为“2020-08-13”的字符串转换为LocalDate,而不会引发异常。

对我来说,很明显,您无法从
yyy-MM-dd
分配
LocalDateTime
。您希望它将一天的时间设置为什么?没有默认设置。如果您不想或不需要一天中的某个时间,请使用
LocalDate
。非常感谢!对我来说,很明显,您不能从
yyyy-MM-dd
分配
LocalDateTime
。您希望它将一天的时间设置为什么?没有默认设置。如果您不想或不需要一天中的某个时间,请使用
LocalDate
。非常感谢!非常感谢。我想我一直在使用LocalDateTime,但没有完全理解它是什么。谢谢!我想我一直在使用LocalDateTime,但没有完全理解它是什么。