我正在尝试编写一个控制器请求方法,该方法接受以iso格式的日期-时间字符串发送的日期参数。看起来您可以手动指定格式,用@DateTimeFormat(pattern="yyyy-MM-dd")
注释方法参数,但我想使用iso
背景即@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
。使用ISO日期-时间格式,我甚至无法解析文档中的示例日期。我在想我是不是做错了什么。
这是我的控制器类:
@RestController
public class DateController {
@RequestMapping(path = "/echoIsoDate", method = RequestMethod.GET)
public ResponseEntity<String> echoIsoDate(@RequestParam("date") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) Date date){
return new ResponseEntity<>(date.toString(), HttpStatus.OK);
}
@RequestMapping(path = "/echoDumbDate", method = RequestMethod.GET)
public ResponseEntity<String> echoDumbDate(@RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") Date date){
return new ResponseEntity<>(date.toString(), HttpStatus.OK);
}
}
当我试图用我真正想要解析的日期调用这个控制器时,它不起作用:
http://localhost:8080/echoIsoDate?date=2015-12-30T00:00:00.000Z
当我试图用文档中的示例日期调用这个控制器时,它不起作用:
http://localhost:8080/echoIsoDate?date=2000-10-31%2001:30:00.000-05:00
第二种控制器方法确实有效。例如,调用http://localhost:8080/echoDumbDate?date=1970-01-01
返回Thu Jan 01 00:00:00 CST 1970
(但它在CST中,可能在我的系统时区中)。
问题:
- 我在
echoIsoDate()
中做错了什么?或者春天有虫子吗 - 对于
echoDumbDate()
,有没有一种方法可以指定我想要的时区,使其始终使用UTC
尝试使用
@RequestMapping(path = "/echoIsoDate", method = RequestMethod.GET)
public ResponseEntity<String> echoIsoDate(@RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") Date date){
return new ResponseEntity<>(date.toString(), HttpStatus.OK);
}