有人知道MySQL中有没有这样的函数吗?
更新
这不会输出任何有效的信息:
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+
或者MySQL本身不能确切地知道所使用的time_zone,这很好,我们可以在这里涉及PHP,只要我能得到有效的信息,而不是像SYSTEM…
Use LPAD(TIME_FORMAT(TIMEDIFF(NOW(), UTC_TIMESTAMP),’%H:%i’),6,’+') to get a value in MySQL's timezone format that you can conveniently use with CONVERT_TZ(). Note that the timezone offset you get is only valid at the moment in time where the expression is evaluated since the offset may change over time if you have daylight savings time. Yet the expression is useful together with NOW() to store the offset with the local time, which disambiguates what NOW() yields. (In DST timezones, NOW() jumps back one hour once a year, thus has some duplicate values for distinct points in time).
描述中提到的命令返回“SYSTEM”,表示它采用服务器的时区。这对我们的查询没有用处。
下面的查询将有助于了解时区
SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP) as GMT_TIME_DIFF;
以上查询将提供与协调世界时(UTC)相关的时间间隔。所以你可以很容易地分析时区。如果数据库时区是IST,则输出将是5:30
UTC_TIMESTAMP
在MySQL中,UTC_TIMESTAMP返回当前UTC日期和时间,作为'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS的值。Uuuuuu格式取决于函数的用法,即在字符串或数字上下文中。
现在()
现在()函数。MySQL NOW()以'YYYY-MM-DD HH:MM:SS'格式或YYYYMMDDHHMMSS返回当前日期和时间的值。Uuuuuu格式,取决于函数的上下文(数字或字符串)。CURRENT_TIMESTAMP, CURRENT_TIMESTAMP(), LOCALTIME, LOCALTIME(), LOCALTIMESTAMP, LOCALTIMESTAMP()是NOW()的同义词。
可能是这样
select timediff(current_time(),utc_time())
通过这种方式,您不会直接获得时区值。
@@global。time_zone不能被使用,因为它是一个变量,它返回的值是'SYSTEM'。
如果您需要使用session SET TIME_ZONE =在更改了时区的会话中使用您的查询,那么您将使用@@session.time_zone获得该查询。如果查询@@global。time_zone,然后你得到'SYSTEM'。
如果使用now()和utc_time()尝试datediff、date_sub或timediff,那么可能会遇到转换问题。
但是上面建议的东西至少可以在某些服务器版本上使用。我的版本是5.5.43-37,是一个托管解决方案。