我正在使用Grails 2.2.3中的Controller Test,我在域中有一个Date字段。 但是当你测试Controller时,你想把所有东西都放到params中,显然params必须拥有Strings中的所有内容。
如何将日期纳入params?
params的例子:
params["issueNumber"] = 1
params["dateOfIssue"] = "2014-05-16 09:17:38 EDT"
params["placements"] = [location:"Sample location", page:1, column:1, row:1]
params["newsPaper"] = [name:"Sample Ad Name"]
对于“展示位置”& “newsPaper” - 它们是其他领域的参数。
上面的示例在controller.save()
上失败,并且没有输出太多有用的信息。
谢谢。
答案 0 :(得分:1)
它取决于params绑定到命令对象或域类的方式,如果它完全绑定的话。考虑到域类直接绑定在具有名为dateOfIssue
的字段的控制器操作中,以下是必须使用的默认日期格式
yyyy-MM-dd HH:mm:ss.S
现在,如果您使用Grails 2.3。*,也可以通过添加grails.databinding.dateFormats
作为日期格式提供配置设置来全局自定义:
grails.databinding.dateFormats = [
'MMddyyyy', 'yyyy-MM-dd HH:mm:ss.S', "yyyy-MM-dd'T'hh:mm:ss'Z'"
]
有关详细信息,请参阅date formats for data binding文档。
对于Grails 2.2.3,请参考this question以绑定自定义日期格式。希望有所帮助。
另外,不管整个数据绑定的东西,如果根本没有使用,那么显然你的应用程序在转换下标准化的格式可以用来从String中获取日期:
Date.parse("yyyy-MM-dd HH:mm:ss Z", "2014-05-16 09:17:38 EDT")
答案 1 :(得分:0)
我发现了另一种通过params传递日期的方法,它可能不像dmahapatro那样漂亮,但它不需要任何修改。示例:
params["dateOfIssue"] = "Fri May 16 00:00:00 EDT 2014"
params["dateOfIssue_year"] = "2014"
params["dateOfIssue_month"] = "5"
params["dateOfIssue_day"] = "16"
原始字段名称为“dateOfIssue”。
答案 2 :(得分:0)
您可以创建一个StringToDateValueConverter来完成此任务。
See this(也可以识别区域设置)