在我的Spring Boot应用程序中,我需要处理带有日期时间字段的表单,并在Java中将其转换为LocalDateTime
。
我指定了模式“YYYY-MM-dd HH: mm”
,当我提交带有输入值1990-01-01 10:10
的表单时,它无法转换。
下面是表单对象:
public class UserForm {
@NotNull
@DateTimeFormat(pattern = "YYYY-MM-dd HH:mm")
private LocalDateTime dateTime;
// getters, setters
}
控制器:
@RequestMapping("/users")
@Controller
public class UserController {
@GetMapping("")
public String userForm(UserForm userForm) {
return "/users/form";
}
@PostMapping("")
public String postForm(@Valid UserForm userForm, BindingResult bindingResult) {
System.out.println(userForm + " " + bindingResult);
return "/users/form";
}
}
和百里香叶形式:
<form th:object="${userForm}" th:action="@{/users}" method="post">
<span th:each="err: ${#fields.errors('dateTime')}" th:text="${err}" style="background-color:red;color:white;"/>
<input type="text" th:field="*{dateTime}"/>
<input type="submit">
</form>
这个例子有什么问题?我应该如何修复它,使其正确地将< code>String解析为< code>LocalDateTime?
我也在这里提交了示例申请。
更新:
> < li>
在“无法转换”下,我的意思是我遇到了异常:
org.springframework.core.convert.ConversionFailedException:无法从类型[java.lang.String]转换为类型[@javax.validation.constraints.NotNull@org.springframework.format.annotation.DateTimeFormatjava.time.LocalDateTime]的值1990-01-01 10:10
使用小写yyyy
修复了该问题。谢谢
格式化模式应为uuuu MM dd HH:MM
。
LocalDateTime.parse(
"1990-01-01 10:10" ,
DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm" )
)
大写的 YYYY
表示基于周的年份,而不是日历年。
更仔细地研究留档类以格式化模式代码。注意它们是如何区分大小写的。
提示: 不要使用自定义格式,而应坚持使用标准 ISO 8601 格式。
java.time类默认使用标准格式。因此无需费心指定格式模式。
LocalDateTime.parse(
"1990-01-01T10:10"
)
java.time框架内置于Java 8和更高版本中。这些类取代了麻烦的旧式日期-时间类,如< code>java.util.Date、< code>Calendar,
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
若要了解详细信息,请参阅 Oracle 教程。搜索堆栈溢出以获取许多示例和说明。规格是 JSR 310。
您可以直接与数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,不需要< code>java.sql.*类。
从哪里获得java.time课程?
Three10-Extra项目通过附加类扩展java.time。该项目是未来可能添加到java.time.的试验场。您可以在此处找到一些有用的类,例如Interval
、YearWeek
、YearQuarter
等。
问题内容: 我有一个字符串日期“ 31-Dec”和模式“ dd-MMM”。接下来的代码 产生异常 我做错什么了? 谢谢! 问题答案: 一个问题可能是您不是英语。试试这个: 这为我返回: 1970年12月31日星期四00:00:00欧洲中部时间 由于日期字符串中缺少年份,因此您会看到它会自动插入为年份。
我的问题是,当我按Submit时,应用程序崩溃,并在调试中触发以下异常: 这是日期类、保存按钮和日历对话框片段的代码:
问题内容: 我正在尝试解析一个日期,但是奇怪的是我遇到了一个例外。 这是代码: 例外是: 我已经阅读了文档,我认为我的模式是正确的。所以我不明白… 问题答案: 这可能是因为你计算机上的默认语言环境不是英语。 你应该使用: 代替。
问题内容: 我收到以下错误:“ java.text.ParseException:无法解析的日期:“ 2011年8月31日09:53:19””具有以下格式: 有人看到这个问题吗? 问题答案: 确保您使用正确的语言环境。(构造函数使用 系统默认的语言环境 ,它可能不是您要使用的 语言环境 。) 这在我的机器上工作正常: (例如,使用时会产生。)
问题内容: 我想将Twitter响应中的日期字符串转换为Date对象,但是我总是得到ParseException,并且看不到错误! 输入字符串:2010年12月23日星期四18:26:07 +0000 模式: 方法: 我也尝试过此方法:http : //friendpaste.com/2IaKdlT3Zat4ANwdAhxAmZ,但结果相同。 我在Mac OS X上使用Java 1.6。 干杯,
问题内容: 我正在尝试将一个实例转换为一个实例。 我没有得到编译器错误,但是实例值是错误的。 我认为这不起作用,因为它存储时间而不是。 我正在使用JDK 1.8版。 问题答案: 您的输入实际上是一个。简单地将其解析为a 然后从中获取会更简单。无需担心时区,无需保留某些传统课程(避免并在可能的情况下…)