与URL兼容且易于解析的日期时间格式?

时间:2012-12-31 17:38:42

标签: java rest date datetime playframework-2.0

使用Play 2我想创建一个REST API,其中包括

/resource/<startDateTime>

表示返回资源的所有项目,其startDateTime大于URL中给出的startDateTime。

所以现在我需要一些DateTime格式,它可以通过人工可读格式的URL传递,并且仍然很容易解析为Play 2控制器内的Java Date对象。关于那的任何提示/最佳实践?谢谢你的提示!

更新: 如果Play会为我解析,那就更好了。对于路由配置中的java.util.Date,我收到错误

 No QueryString binder found for type java.util.Date. Try to implement an implicit QueryStringBindable for this type. 

是否有任何预定义来解析日期?

更新

预期投入: 可能是例如。

http://site.com/resource/20121231-141557 # 2012/12/31 14:15:57

或某事。否则,易读 - 我不在乎,只要它可以使用URL传输,并且很容易解析为Date对象。

3 个答案:

答案 0 :(得分:1)

日期有ISO标准,编号8601.

http://en.wikipedia.org/wiki/ISO_8601

日期和时间值的组织从最重要到最不重要:年,月(或周),日,小时,分钟,秒和秒的分数。

答案 1 :(得分:0)

这里似乎有两个问题:

  1. 如何轻松格式化和解析日期?我认为在java中处理日期的最佳库是Joda Time。它具有以不同格式格式化和解析日期的方法。
  2. 如何使用自定义解析器定义路由?为此,您需要定义自己的QueryStringBindable。请查看this answer about Doubles示例。

答案 2 :(得分:0)

您可以在此处查看原生Play2路径活页夹:https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/play/api/mvc/Binders.scala#L251

目前,没有什么可以在参数中处理日期。

但是您可以在DateTime(JodaTime)之上编写自己的PathBinder,使用 ISO 8601 格式(使用ISODateTimeFormat

我认为这将是一个很好的Pull请求;)