[英]joda datetime handle both acronym and explicit timezones
我正在使用此模式尝试处理来自客户端的日期时间提交:
E MMM dd yyyy HH:mm:ss 'GMT'Z (z)
这对我在我当地的ubuntu机器上工作。 我的一个朋友试图从他生产的Windows机器上提交一份表格
Wed Jun 24 2015 13:34:22 GMT-0500 (Central Daylight Time)
作为时间戳。 这明显不同于我的模式 - 但我需要能够处理上面的格式并在我的ubuntu机器上适应这样的日期:
Wed Jun 24 2015 13:42:03 GMT-0500 (CDT)
我如何使用jodatime处理这种模式?
编辑:
这是我在Playframework中使用的表单 - 它可能是相关的。
val form = Form(mapping(
"beginDate" -> jodaDate("E MMM dd yyyy HH:mm:ss 'GMT'Z (z)"),
"endDate" -> jodaDate("E MMM dd yyyy HH:mm:ss 'GMT'Z (z)")) )
JavaScript日期对象( Date.prototype.toString
)的字符串化版本是依赖于实现的,可以有很大差异,不应该使用。
最强大的方法是从客户端返回协调世界时(UTC)。 这也没有任何时区问题。 替换以下内容:
new Date()
有:
new Date().getTime();
(有关该行的更多信息,请参阅此SO线程 )。
然后你可以把这个时代作为一个龙:
val form = Form(mapping(
"beginDate" -> longNumber,
"endDate" -> longNumber
)
如果您愿意,可以添加verifying
以进行验证,例如:
... longNumber.verifying("Invalid date", _ > DateTime.now().minusYears(2).getMillis)
然后在bindFromRequest
(或者您正在接收数据的任何地方),您可以执行以下操作:
new DateTime(data.beginDate)
这将产生你想要的DateTime
。
无论你的朋友在东京还是在纽约,它都应该是完美的。 :)
您可以使用DateTimeFormatterBuilder来使用聚合格式构建解析器。 如果一个失败,它会尝试用下一个解析它。
你可以使用Apache DateUtils Parsedate方法 -
要格式化日期,我们需要对它的格式有一个合理的了解。所以带有模式列表的parseDate可用于将日期格式化为字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.