我正在使用此模式尝试处理来自客户端的日期时间提交:
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)")) )
答案 0 :(得分:2)
JavaScript日期对象(Date.prototype.toString
)的字符串化版本取决于实现,可能差异很大,不应该使用。
最强大的方法是从客户端返回协调世界时(UTC)。这也没有任何时区问题。替换以下内容:
new Date()
使用:
new Date().getTime();
(有关该行的更多信息,请参阅此SO thread。)
然后你可以把这个时代作为一个龙:
val form = Form(mapping(
"beginDate" -> longNumber,
"endDate" -> longNumber
)
如果您愿意,可以添加verifying
进行验证,例如:
... longNumber.verifying("Invalid date", _ > DateTime.now().minusYears(2).getMillis)
然后在您的bindFromRequest
(或者您正在接收数据的任何地方),您可以执行以下操作:
new DateTime(data.beginDate)
,它会生成您想要的DateTime
。
无论你的朋友在东京还是纽约,都应该是完美的。 :)
答案 1 :(得分:1)
您可以使用DateTimeFormatterBuilder使用聚合格式构建解析器。如果一个失败,它会尝试用下一个解析它。
答案 2 :(得分:0)
您可以使用Apache DateUtils Parsedate方法 -
要格式化日期,我们需要对它的格式有一个很好的了解。所以带有模式列表的parseDate可用于将日期格式化为字符串。