我实际上在使用 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)
}
}
为什么日期存储在 UTC 时区而不是 EST 时区