新的Spring Boot。
我正在尝试用annotation@configurationproperties解析文件中的属性。我可以解析除日期字段以外的字段。
问题是我的属性文件只有时间没有日期。i、 e.日期=09:30:00。
我可以用@datetimeformat(pattern=“hh:mm:ss”)解析它。但问题是,它给出的日期是date=thu jan 01 09:30:00 gst 1970。
我想把日期定为今天09:30:00。有可能吗?
@ConfigurationProperties
public class Config {
private int id;
private int version;
@DateTimeFormat(pattern = "HH:mm:ss")
private Date date;
}
财产
id=12
version=2
date=09:30:00
3条答案
按热度按时间v1l68za41#
为什么不使用仅表示时间的类型?
c86crjj02#
由于字符串被解析为
java.util.Date
使用SimpleDateFormat
默认日期时间为January 1, 1970, 00:00:00 GMT
.我所在时区的输出(欧洲/伦敦):
请注意
java.util.Date
对象不是像现代日期时间类型那样的实时日期时间对象;相反,它表示自称为“epoch”的标准基准时间以来的毫秒数,即January 1, 1970, 00:00:00 GMT
(或utc)。打印对象时java.util.Date
,其toString
方法返回jvm时区中的日期时间,该值是从该毫秒值计算出来的。如果需要在不同的时区打印日期时间,则需要将时区设置为SimpleDateFormat
并从中获取格式化字符串。这个java.util
日期时间api及其格式api,SimpleDateFormat
不仅过时而且容易出错,因为许多这样的事情。建议完全停止使用它们,并切换到现代日期时间api1。下面给出了几个选项:
推荐:使用
LocalTime
真正代表时间。肮脏的方式:将你的领域声明为
String
并在您的业务逻辑中对其进行解析,从而使其容易出错并变得肮脏。我强烈建议不要选择第二种选择。
使用
LocalTime
:输出:
从trail:date-time了解有关现代日期时间api的更多信息。
1.出于任何原因,如果您必须坚持使用Java6或Java7,您可以使用threeten backport,它将大部分java.time功能向后移植到Java6和Java7。如果您正在为一个android项目工作,并且您的android api级别仍然不符合java-8,请检查通过desugaring提供的java8+api以及如何在android项目中使用threetenabp。
aemubtdh3#
不要使用陈旧过时的上课日期。查看包java.time,特别是您的案例类localtime。
将代码更改为:@configurationproperties public class config{
}
这应该管用。您可能需要添加以下依赖项:
这是这个问题的修改后的答案:SpringDataJPA-ZoneDateTime格式,用于json序列化