2012-11-20 44 views
0

所以我有这个应用程序从手机接收包括gps时间是UTC的包。我现在将这个存储在我的mysql数据库中。在MySQL日期时间utc时间的错误表示

我有两个日期时间字段,其中包含从手机和服务器时间的时间。

我的查询看起来像这样:INSERT INTO GeoLocation中(时间,ServerTime)VALUES(FROM_UNIXTIME(1353438497),UTC_TIMESTAMP())

我简化,并删除了所有其他值。目前的utc unix时间戳现在是:1353438597协调一致http://www.unixtimestamp.com/index.php所以我的其他手机时间戳是100秒,非常合理。然而现在却变成了有趣的事情。我应该提到我住在瑞典+1时区和服务器在瑞典时间,最有可能配置为瑞典时间

当我使用phpmyadmin查看刚插入的值它说时间是2012-11-20 20 :08:17但服务器时间是2012-11-20 19:08:23。所以即使这两个都是正确的utc时间,一个进入屁股From_unixtime,另一个与UTC_TIMESTAMP他们现在显示不同的时间。

我看过你需要用SET设置时区time_zone ='+00:00';

所以我试图在phpMyAdmin打开一个查询窗口,并进入

SET time_zone = '+00:00'; 
SELECT Time, ServerTime FROM `GeoLocation` WHERE 1; 

,但我仍然得到报道的两个字段完全相同的时间。

然而phpMyAdmin的不运行两行,因为如果我不是尝试这个办法:

SELECT @ @global.time_zone , @ @session.time_zone 

我得到这个:

@@ global.time_zone @@ session.time_zone

系统系统

但如果我这样做:

SET time_zone = '+00:00'; 
SELECT @@global.time_zone, @@session.time_zone 

我得到这个:

@@ global.time_zone @@ session.time_zone

SYSTEM +00:00

所以也没有任何意义,我,我已经证实我喂它的UTC时间(从unix时间开始),但它显示为UTC + 1,它无助于设置时区。

任何想法?

回答

1

解决方法是执行“SET time_zone ='+00:00';”在数据库中存储数据之前(插入)。

当你读取数据时,它会对你没有好处,但如果你在存储数据时调用它,一切都会好起来的。

+0

如果你使用.net和实体框架,你还必须告诉它,当你像下面这样获取值时,时间是在utc中:DateTime.SpecifyKind((DateTime)loc.Time,DateTimeKind.Utc); –