将 Scala Option[java.sql.Timestamp] 与作为 Option[ "YYYY-mm-dd hh:mm:ss" 包含的日期字符串进行比较



我有一个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"))
}

最新更新