在App Engine上部署应用程序后出现时间戳问题

时间:2014-08-04 15:48:59

标签: java sql google-app-engine timezone google-cloud-sql

我正在开发一个应用程序,无论何时发生任何数据库操作,都需要在Sql列中记录时间戳(默认设置为CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)。

在App Engine上部署应用程序后,我确实在Sql列中获得时间戳,但我不知道它从哪里选择时间戳(我猜这是应用程序运行的服务器或Google Cloud SQl正在运行的时间戳)上)。

如果我需要相同的时区信息,我该如何获得?或者是否有更好的方法来记录这样的信息,比如使用java代码java.util.Date date= new java.util.Date();生成时间戳并将其存储在sql列中以及它将选择的时区/时间?

3 个答案:

答案 0 :(得分:0)

默认情况下,时间通常存储在GMT中。检索时,您可以使用以下内容:
    select datetime(current_timestamp,'localtime'); 它应该是你在时区的时间。这只是一个例子,显然有变化。实际上有很多方法可以实现,你可以使用设置为特定时区的Java时间戳并存储它。

答案 1 :(得分:0)

我不知道你如何使用这些数据,但最有效的方法是存储java.util.Date()。getTime();数据库中的长值。对于大多数用例来说已经足够了,例如通过创建时间,日志等来比较数据实体。

答案 2 :(得分:0)

由于应用程序在部署后运行GAE并且GAE服务器设置为GMT,使用java生成时间戳或者甚至在云sql上设置表以自动生成时间戳,将按照服务器的顺序进行操作。时间,因此对我的申请没用。

因此,作为一种解决方法,为了记录访问应用程序的用户的时间戳,我使用new Date();通过javascript生成时间戳,并将其作为字符串存储在云上的sql表中。

嗯,这是我的要求的一半,因为我目前无法根据他的时区向用户显示这个存储的时间戳,这可能与表中存储的内容不同。谢谢