我正在尝试通过我的Play框架应用中的一条路线传递日期,这是我的新手。几个小时后,我现在试图获取一个pathbindable来与下面的代码一起工作,但是每当我运行它时,我总是收到“无效的日期格式等等”的错误请求,我如何才能成功地将日期传递给控制器?请帮助
package libs
import java.util.Date
import java.text.SimpleDateFormat
import play.api.mvc.PathBindable
import scala.util.{Either, Failure, Success, Try}
object PathBinders {
implicit def bindableDate(implicit stringBinder: PathBindable[String]) = new PathBindable[Date] {
val sdf = new SimpleDateFormat("EEE MMM ddd hh:mm:ss zzz yyyy")
override def bind(key: String, value: String): Either[String, Date] = {
for {
dateString <- stringBinder.bind(key, value).right
date <- Try(sdf.parse(dateString)).toOption.toRight("Invalid date format blah blah.").right
} yield date
}
override def unbind(key: String, date: Date): String = key + "=" + sdf.format(date)
}
}
它的格式我尝试了多种不同的方法,但是在我成功将日期显示为Bhu 2018年5月10日00:00:00 BST之前,在我的应用程序页面中。这来自于一个链接到SQL数据库。
答案 0 :(得分:0)
您可以执行以下操作来处理从views
到controller
方法的日期信息:
拥有一条路线并将其作为查询字符串传递:
POST /passDate controllers.date.request(datetime: String)
将其传递给请求,因为它与路径不安全相关(可能用-
或任何有效的URL字符替换空格):
/passDate?datetime=1-1-1970
在请求中,拆分datetime
查询字符串,然后放回一起:
scala> "Thu May 10 00:00:00 BST 2018".split(' ').toList
res1: List[String] = List(Thu, May, 10, 00:00:00, BST, 2018)
然后根据列表中的位置知道什么是日期时间信息,您可以将它们转换为任何字符串文字并进行解析。例如:
scala> val formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
formater: java.text.SimpleDateFormat = java.text.SimpleDateFormat@4f76f1b0
scala> formatter.parse("2018-08-01 14:58:00")
res2: java.util.Date = Wed Aug 01 14:58:00 BST 2018