我有一个scala类,以下是:
case class Game(id: Option[String], ....... start: Option[java.sql.Timestamp], end: Option[java.sql.Timestamp], ..)
Slick使用此类将游戏对象保存到DB中。开始和结束时使用开始和结束。还有一个游戏课,例如游戏复数。
我创建了一种看起来像
的方法def getAllGamesBetween(iniDate: Option[String], endDate:Option[String]) = Action.async { request =>
for {
lGames <- Games.getAll(g => iniDate.get < Timestamp.valueOf(g.start) && Timestamp.valueOf(g.start) < endDate)
} yield {
Ok(.....);
}
}
我遇到的问题是我需要了解如何通过Inate获得的值进行协调:option [string]和endDate:option [string]及其各自的字段值
start: Option[java.sql.Timestamp]
end: Option[java.sql.Timestamp]
因此,我可以进行比较,例如,一个在另一个或另一个之后。
另外一件事,Inate和EndDate将获得遵循格式的选项[字符串]值:option [" yyyy-mm-dd HH:MM:SS"]。同样,启动和末端的值存储在DB中,为" yyyy-mm-dd HH:mm:ss"
您需要首先将字符串日期解析到时间戳,以便实际上可以使用类似的内容进行比较:
def parseDateString(s:String) :java.sql.Timestamp = {
val d = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(s)
new java.sql.Timestamp(d.getTime())
}
您可以在时间戳的方法之后和之前使用。
例如:考虑您要检查并验证开始日期和结束日期开始和结束日期以java.sql.timestamp
为类型您可以通过格式传递任何字符串yyyy-mm-dd HH:mm:ss [.fffffffff]
def isValidTimestamp(gpsTimestamp: Timestamp): Boolean = {
return endTimestamp.before(Timestamp.valueOf("1970-03-21 18:40:47.000000"))
&&
startTimestamp.after(Timestamp.valueOf("1970-03-21 18:40:47.000000"))
}