Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 日期和国际日期_Mysql_Utc_Unix Timestamp - Fatal编程技术网

Mysql 日期和国际日期

Mysql 日期和国际日期,mysql,utc,unix-timestamp,Mysql,Utc,Unix Timestamp,假设我在多个位置有多台服务器,我希望使用MySQL的datetime类型作为字段日期,并且我始终希望字段日期具有UTC时间戳,以便在将其添加到数据库时执行UTC\u timestamp()。现在我想让MySQL为它输出UNIX时间戳 当我在服务器A上执行此操作时,我得到字符串“2009-06-17 12:00:00”,在其上执行UNIX_时间戳(字符串)会返回数字1245240000。这是UTC时间2009-06-17 12:00:00。现在我在服务器B上做同样的事情。 我得到了相同的字符串,因

假设我在多个位置有多台服务器,我希望使用MySQL的datetime类型作为字段日期,并且我始终希望字段日期具有UTC时间戳,以便在将其添加到数据库时执行
UTC\u timestamp()
。现在我想让MySQL为它输出UNIX时间戳

当我在服务器A上执行此操作时,我得到字符串“2009-06-17 12:00:00”,在其上执行UNIX_时间戳(字符串)会返回数字1245240000。这是UTC时间2009-06-17 12:00:00。现在我在服务器B上做同样的事情。 我得到了相同的字符串,因为它是UTC字符串,但当再次执行UNIX_时间戳(字符串)时,我得到了错误的返回号1245232800,即UTC+2时间。我该怎么做?我应该在PHP端执行从字符串到时间戳的转换吗?

G'day

我要问一个明显的问题,你检查过两台机器上的日期和时间了吗

编辑:。。。两台机器上的MySQL时区是一样的吗

更新:正常。问题在于,传递到UNIX_timestamp中的时间戳字符串被解释为当前时区中的一个值,然后转换回UTC,因此,由于您在MEZ中,将减去两个小时以将其返回UTC,因此,当时间戳转换回UNIX时,将从时间戳中减去7200

因此,您在使用UNIX_TIMESTAMP()转换时看到的变化是返回到UNIX历元时间字符串

顺便说一句,您不应该使用时间戳类型来存储UTC_时间戳而不是DATETIME类型吗

更新:将演示时间与存储时间分离无疑是一条可行之路。然后,您可以在世界各地重复使用相同的数据,并且只需在向用户呈现数据时与本地时间进行转换

如果你不这样做,那么你将不得不在制作时间戳时存储时区,然后进行各种复杂的排列,以确定是否

  • 本地时区在存储时是夏令时
  • 存储数据时的时区与显示数据时的时区之间的差异是什么
将其全部存储为UTC即可摆脱此问题

如果大多数用户必须根据返回的UTC时间自己计算出本地时间,则他们不会那么高兴,因此系统通常会为用户转换为当前本地时间

当然,如果用户希望数据以本地时间表示,通常情况下就是这样。我能想到的唯一一个广泛使用的系统,在我脑海中,以UTC存储和显示其数据的系统是空中交通管制和飞行计划管理系统,它总是以UTC(或者更准确地说是祖鲁时间)保存


干杯,

你试过这么做吗

一起执行这些指令

SET time_zone = 'UTC';
SELECT FROM_UNIXTIME(0), UNIX_TIMESTAMP('2009-06-17 12:00:00'); 
// 1970-01-01 00:00:00        1245240000

它们只影响客户端会话,而不影响服务器配置。

一台设置为utc时间,另一台设置为utc+2,因为一台在伦敦,另一台在德国。。我一直希望将区域设置时区设置为时区,因为其他人建议@Thomas,一定要坚持将内部时间表示形式设置为UTC!将存储的值与prenetation值分离是唯一的方法,那么为什么他们要将其保留在localzone呢?