首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL时区混淆

MySQL时区混淆
EN

Stack Overflow用户
提问于 2013-03-27 20:12:42
回答 1查看 184关注 0票数 3

我完全被一个插件到底是怎么回事弄糊涂了。基本上,我是在尝试做正确的事情,将所有内容都以UTC格式存储在数据库中,然后根据用户信息转换为本地时区。我有很多查询都运行得很好,但是这个insert查询把事情搞砸了。

代码语言:javascript
复制
$adt = date('Y-m-d') . " " . $_POST['Time'];
echo $adt;
$tmp_dt = new DateTime($adt, new DateTimeZone($tz));
echo $tmp_dt->format('H:i:s');  
$tmp_dt->setTimezone(new DateTimeZone('UTC'));
$UTC_time = $tmp_dt->format('H:i:s');
echo $UTC_time;

echo 'date_default_timezone_set: ' . date_default_timezone_get() . '<br />';
mysql_select_db($db_name, $JewelryDB);
mysql_query("SET time_zone = '+00:00';");

$updateSQL = sprintf("INSERT INTO reminder_cfg 
                    (id, day_of, day_of_advance, day_prior, default_time, week_prior, 2_week_prior, 3_week_prior, 4_week_prior, 5_week_prior, day_after, 2_week_after, 50_day_after) 
                    VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
                    ON DUPLICATE KEY UPDATE day_of = %s, day_of_advance = %s, day_prior = %s, default_time = %s, week_prior = %s, 2_week_prior = %s, 3_week_prior = %s, 4_week_prior = %s, 5_week_prior = %s, day_after = %s, 2_week_after = %s, 50_day_after = %s",
                   GetSQLValueString($jeweler, "text"),
                   GetSQLValueString($_POST['DayOf'], "text"),
                   GetSQLValueString($_POST['Advance'], "text"),
                   GetSQLValueString($_POST['DayPrior'], "text"),
                   GetSQLValueString($UTC_time, "text"),
                   GetSQLValueString($_POST['WeekPrior'], "text"),
                   GetSQLValueString($_POST['2WeeksPrior'], "text"),
                   GetSQLValueString($_POST['3WeeksPrior'], "text"),
                   GetSQLValueString($_POST['4WeeksPrior'], "text"),
                   GetSQLValueString($_POST['5WeeksPrior'], "text"),
                   GetSQLValueString($_POST['DayAfter'], "text"),
                   GetSQLValueString($_POST['2WeeksAfter'], "text"),
                   GetSQLValueString($_POST['50DaysAfter'], "text"),
                   GetSQLValueString($_POST['DayOf'], "text"),
                   GetSQLValueString($_POST['Advance'], "text"),
                   GetSQLValueString($_POST['DayPrior'], "text"),
                   GetSQLValueString($_POST['Time'], "text"),
                   GetSQLValueString($_POST['WeekPrior'], "text"),
                   GetSQLValueString($_POST['2WeeksPrior'], "text"),
                   GetSQLValueString($_POST['3WeeksPrior'], "text"),
                   GetSQLValueString($_POST['4WeeksPrior'], "text"),
                   GetSQLValueString($_POST['5WeeksPrior'], "text"),
                   GetSQLValueString($_POST['DayAfter'], "text"),
                   GetSQLValueString($_POST['2WeeksAfter'], "text"),
                   GetSQLValueString($_POST['50DaysAfter'], "text"));

$Result1 = mysql_query($updateSQL, $JewelryDB) or die("Insert query error: " . mysql_error());

代码中的echo语句显示我的时区转换工作正常,但是insert语句以某种方式减去了5个小时来插入本地时区的时间。这是一个共享/托管的服务器,所以我不能简单地将系统时间设置为UTC。我认为MySQL的"SET time_zone“可以纠正这个问题。

请帮帮忙。这快把我逼疯了。

EN

回答 1

Stack Overflow用户

发布于 2013-04-04 18:50:35

Mysql区分了timestamp数据类型和令人困惑的相似datetime数据类型。UTC类型有一个隐式时区(由您根据窗外的天气定义),而存储在timestamp类型中的值则隐式地转换为unixtime ( datetime )。如果您希望时区转换保持不变,则应将值存储为datetime而不是timestamp

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15658497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档