如何根据MySQL中的时区将所有日期时间转换为+00:00?

如何根据MySQL中的时区将所有日期时间转换为+00:00?,mysql,date,datetime,timezone,convert-tz,Mysql,Date,Datetime,Timezone,Convert Tz,我在MySQL中有很多datetime行,比如: 生日 422859600000 418705200000 8132400000 869886000000 422859600000 如果我将此datetimes转换为yyy mm dd hh:mm:ss.0000格式,则得到以下结果: 1983-05-27 00:00:00.0000 1983-04-08 22:00:00.0000 (how to convert this to 00:00:00.000) 1970-04-04 04:00:0

我在MySQL中有很多datetime行,比如:

生日

422859600000
418705200000
8132400000
869886000000
422859600000
如果我将此datetimes转换为yyy mm dd hh:mm:ss.0000格式,则得到以下结果:

1983-05-27 00:00:00.0000
1983-04-08 22:00:00.0000 (how to convert this to 00:00:00.000)
1970-04-04 04:00:00.0000 (...)
1997-07-25 21:00:00.0000 (...)
1983-05-27 00:00:00.0000 
1983-05-27 02:00:00.0000 (wrong!)
1983-04-09 00:00:00.0000
1970-04-05 00:00:00.0000
1997-07-26 00:00:00.0000
1983-05-27 02:00:00.0000 (wrong!)
然后,我尝试使用此查询转换时区:

SELECT CONVERT_TZ(FROM_UNIXTIME( birthday / 1000 ), '-02:00', '+00:00') as datetime  FROM users
最后我得到了这个:

1983-05-27 00:00:00.0000
1983-04-08 22:00:00.0000 (how to convert this to 00:00:00.000)
1970-04-04 04:00:00.0000 (...)
1997-07-25 21:00:00.0000 (...)
1983-05-27 00:00:00.0000 
1983-05-27 02:00:00.0000 (wrong!)
1983-04-09 00:00:00.0000
1970-04-05 00:00:00.0000
1997-07-26 00:00:00.0000
1983-05-27 02:00:00.0000 (wrong!)

如您所见,解决方案是使用CONVERT_TZ,但第二个参数可能会被计算出来,我如何计算每行时区的差异?

如果您有一个值在UTC的12:00有效,您希望如何判断原始时区是提前12小时还是落后12小时?从根本上说,您似乎没有足够的信息-而且您应该使用日期类型作为结果。@JonSkeet我希望这样做:选择CONVERT_TZFROM_UNIXTIME birthday/1000,计算差异birthday,“+00:00”,“+00:00”作为用户的日期时间,现在的问题是怎么做?@JonSkeet另一种更复杂的方式是:。。。计算时区生日“+00:00”…我想你没有领会我的意思。假设给定的值是1976-06-19T12:00:00的unix时间戳。那样的话,什么是正确的生日?它可以是1976-06-19在该点偏移量为+12:00:00的时区中,也可以是1976-06-20在该点偏移量为-12:00:00的时区中。见鬼,太平洋/夸贾林时区观测到了这两个偏移…@JonSkeet如果可以的话,看看这里,这是这个问题的起点,和你说的一样。我相信这没有问题,因为时区差异非常小,只有2小时。如果你有一个值,在UTC的12:00有效,你希望如何判断原始时区是提前12小时还是落后12小时?从根本上说,您似乎没有足够的信息-而且您应该使用日期类型作为结果。@JonSkeet我希望这样做:选择CONVERT_TZFROM_UNIXTIME birthday/1000,计算差异birthday,“+00:00”,“+00:00”作为用户的日期时间,现在的问题是怎么做?@JonSkeet另一种更复杂的方式是:。。。计算时区生日“+00:00”…我想你没有领会我的意思。假设给定的值是1976-06-19T12:00:00的unix时间戳。那样的话,什么是正确的生日?它可以是1976-06-19在该点偏移量为+12:00:00的时区中,也可以是1976-06-20在该点偏移量为-12:00:00的时区中。见鬼,太平洋/夸贾林时区观测到了这两个偏移…@JonSkeet如果可以的话,看看这里,这是这个问题的起点,和你说的一样。我相信这没有问题,因为时区差异非常小,只有2小时。