【问题标题】:Comparing Scala Option[java.sql.Timestamp] to a date string contained as Option["YYYY-mm-dd hh:mm:ss"]将 Scala Option[java.sql.Timestamp] 与包含为 Option["YYYY-mm-dd hh:mm:ss"] 的日期字符串进行比较
【发布时间】:2018-02-25 00:21:09
【问题描述】:

我有一个 Scala 类如下:

 case class Game(id: Option[String], ....... start: Option[java.sql.Timestamp], end: Option[java.sql.Timestamp], ..)

slick 使用此类将游戏对象保存到数据库中。 Start 和 End 用于表示它们何时开始和结束。还有一个 Games 类,其作用类似于 Game 的复数形式。

我创建了一个看起来像这样的方法

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(.....);
     }  

}

我的问题是我需要了解如何协调通过 iniDate:Option[String] 和 endDate:Option[String] 获得的值及其各自的字段值

  start: Option[java.sql.Timestamp]
  end: Option[java.sql.Timestamp]

这样我就可以进行比较,例如,看看哪个在另一个之前或之后。

还有一点,iniDate 和 endDate 将获得 Option[string] 值,格式如下:Option["YYYY-MM-DD hh:mm:ss"]。同样,开始和结束的值在数据库中存储为“YYYY-MM-DD hh:mm:ss”

【问题讨论】:

    标签: java scala timestamp slick


    【解决方案1】:

    您需要首先将您的字符串日期解析为时间戳,以便您可以实际比较它们,使用如下方式:

    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())
    }
    

    【讨论】:

      【解决方案2】:

      可以使用 Timestamp 的 after 和 before 方法。

      例如: 考虑您要检查并验证开始和结束日期 开始和结束日期以 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"))
      }
      

      【讨论】:

        猜你喜欢
        • 2013-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        • 2015-11-03
        • 2015-05-11
        相关资源
        最近更新 更多