1

実際、slick を使用して MySQL DB に DateTime 値を格納する際に問題が発生しています。次のようなケース クラスがあります。

case class FacebookShares(
  var id: Int,
  var designID: Int,
  var shareOrgID: String,
  var sharerID: Int,
  var sharedLink: String,
  var sharedTimestamp: Instant,
  var sharedDatetime: DateTime,
  var modifiedTimestamp: Instant) {
  def this() = this(0, 0, "", 0, "", DateTime.now(DateTimeZone.forID("America/New_York")).toInstant, DateTime.now(DateTimeZone.forID("America/New_York")), DateTime.now.toInstant)
}

そして、その滑らかな射影クラス:

class FacebookShareProjection(tag: Tag) extends Table[FacebookShares](tag, "facebook_shares_47") {
  def id: Column[Int] = column[Int]("id", O.PrimaryKey)
  def designID: Column[Int] = column[Int]("fs_design_id")
  def shareOrgID: Column[String] = column[String]("fs_share_org_id")
  def sharerID: Column[Int] = column[Int]("fs_sharer_id")
  def sharedLink: Column[String] = column[String]("fs_shared_link")
  def sharedTimestamp: Column[Instant] = column[Instant]("fs_shared_timestamp")
  def sharedDatetime: Column[DateTime] = column[DateTime]("fs_shared_datetime")
  def modifiedTimestamp: Column[Instant] = column[Instant]("fs_modified_timestamp")

  def * : ProvenShape[FacebookShares] = (id, designID, shareOrgID, sharerID, sharedLink, sharedTimestamp, sharedDatetime, modifiedTimestamp) <> (
    ((FacebookShares.apply _): (Int, Int, String, Int, String, Instant, DateTime, Instant) => FacebookShares).tupled,
    FacebookShares.unapply)

}

データを挿入しようとすると、「America/New_York」のタイムゾーンを定義したときに、MySQL テーブルの結果の日付に UTC タイムゾーンのタイムスタンプが表示されます

def store() = {
    val timestamp = DateTime.now(DateTimeZone.forID("America/New_York")).toInstant
    SQLDB.withSession { implicit session =>
      shareProjection += FacebookShares(0, 0, "", 0, "", timestamp, DateTime.now(DateTimeZone.forID("America/New_York")), DateTime.now.toInstant)
    }
  }

日付が EST タイムゾーンではなく UTC タイムゾーンで保存されるのはなぜですか

4

0 に答える 0