我正在尝试在rest
中使用内存数据库中的spring
构建一个非常简约的HSQL
应用程序。
我在一个实体中有一个date
列。我可以通过其余端点POST
条消息并填写数据库。我也可以GET
封邮件。当我尝试使用搜索GET
来findByDate
条消息时,我没有得到任何结果。
如果我对Web服务器端点进行GET localhost:8080/weather
,则会得到以下输出
{
"_embedded": {
"weather": [
{
"city": "Amsterdam",
"date": "2019-01-30T00:00:00.000+0000",
"unit": "celcius",
"lowTemp": "-5",
"highTemp": "3",
"_links": {
"self": {
"href": "http://localhost:8080/weather/1"
},
"weather": {
"href": "http://localhost:8080/weather/1"
}
}
}
]
},
"_links": {
"self": {
"href": "http://localhost:8080/weather{?page,size,sort}",
"templated": true
},
"profile": {
"href": "http://localhost:8080/profile/weather"
},
"search": {
"href": "http://localhost:8080/weather/search"
}
},
"page": {
"size": 20,
"totalElements": 1,
"totalPages": 1,
"number": 0
}
}
但是当我去GET localhost:8080/weather/search/findByDate?date=2019-01-30T00:00:00.000+0000
时,我得到了无法解析的日期错误。
我在GET请求中尝试了许多不同的日期时间格式。什么都没用。
2019-01-30T00:00:00.000+0000
2019-01-30'T'00:00:00.000+0000
有人可以帮助我使用正确的格式吗?
答案 0 :(得分:0)
OffsetDateTime
.parse(
"2019-01-30T00:00:00.000+0000".replace( "+0000" , "+00:00" )
)
…和…
OffsetDateTime.now( ZoneOffset.UTC ).toString()
请参阅此code run live at IdeOne.com。
2019-01-27T02:11:42.754Z
最后的Z
表示UTC,是+00:00
的快捷方式。常用于日期时间工作。在ISO 8601标准中指定。发音为“ Zulu”。
您的问题没有提供足够的详细信息来提出确定的解决方案。但这可能会使您朝正确的方向前进。
日期时间中的时间恰好是00:00。因此,我怀疑您只需要一个日期值,而不是一个瞬间(没有时间,无时区或UTC偏移量)。如果是这样,请使用Java中的LocalDate
对象,并使用标准的ISO 8601格式的文本,格式为YYYY-MM-DD。
ZoneID z = ZoneId.of( "Pacific/Auckland" ) ;
LocalDate ld = LocalDate.now( z ) ;
String output = ld.toString() ;
您可以解析这样的字符串。 java.time 类默认情况下使用标准的ISO 8601格式,因此无需指定格式设置模式。
LocalDate ld = LocalDate.parse( "2019-01-30" ) ;
如果要以示例格式解析时刻,请解析为OffsetDateTime
。不幸的是,您的输入省略了偏移量中的可选冒号字符,并且OffsetDateTime
类在没有冒号的情况下在解析时有一个小错误。因此,请执行搜索替换操作以将+0000
转换为00:00
。
String input = 2019-01-30T00:00:00.000+0000".replace( "+0000" , "+00:00" ) ;
OffsetDateTime odt = OffsetDateTime.parse( input ) ;