在我的应用程序(使用anorm播放2.2)中,我希望仅将所有时间信息存储在UTC
中。所以要做到这一点,我有一个隐含的下面的工作:
implicit val dateTimeToStatementUTC = new ToStatement[Date] {
def set(s: java.sql.PreparedStatement, index: Int, aValue: Date): Unit = {
if (aValue == null) {
s.setTimestamp(index, null)
} else {
s.setTimestamp(index, new java.sql.Timestamp(aValue.getTime()), new GregorianCalendar(TimeZone.getTimeZone("UTC")))
}
}
}
override def createPlaylist(play: CreatePlaylist) = {
DB.withConnection { implicit conn =>
SQL("INSERT INTO playlist (userId,date) VALUES ({userId},{date})").on(
'userId -> play.userId, 'date -> play.date).executeInsert()
}
}
以上作品!但问题在于检索我需要获取UTC时间戳而不是本地时间戳。当我在下面执行时,它会在本地时区返回时间戳。 :
def getUserPlaylist(userId: Int): Seq[Playlist] = {
DB.withConnection { implicit conn =>
SQL("SELECT * from playlist where userId={uid}").on('uid -> userId).as(simple.*)
}
}
即。如果我在DB中插入5:30:00 IST。它插入00:00:00。但在检索和打印时,它会打印00:00:00 IST,因为它应该是5:30:00 IST(IST和UTC之间的时间不同是5小时30分钟)
如何根据UTC时区检索时间?在Java中我会做
resultSet.getTimestamp("date",
new GregorianCalendar(TimeZone.getTimeZone("UTC")))
修改 更多信息。我认为这可能是一个错误。
当我从Spring代码访问具有相同配置的相同DB时,
jdbcTemplate.query(“SELECT * from bookmarks where userId = 4”,new ResultSetExtractor(){
@Override
public String extractData(ResultSet rs) throws SQLException,
DataAccessException {
while(rs.next()){
Timestamp a = rs.getTimestamp("date",Calendar.getInstance(TimeZone.getTimeZone("GMT")));
SimpleDateFormat d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
System.out.println(d.format(a)+" <> "+rs.getObject("date")+" <> "+rs.getTimestamp("date"));
}
return null;
}
});
它打印:2013-12-09 05:30:00 IST&lt;&gt; 2013-12-09 05:30:00.0&lt;&gt; 2013-12-09 05:30:00.0 我的游戏项目给了我的地方:2013-12-09 00:00:00.0
答案 0 :(得分:0)
问题得到解决。我正在使用它:
db.default.url = “JDBC:MySQL的://本地主机/视频useLegacyDatetimeCode =假安培;了useUnicode =真安培; serverTimezone = UTC&安培;”
而不是:
JDBC:MySQL的://本地主机/视频useLegacyDatetimeCode =假安培;了useUnicode =真安培; serverTimezone = UTC
在&
的每次使用中,我们必须在amp
附加它。这不应该与游戏一起使用。