mysql - 在mysql中将日期转换为UTC时间戳

标签 mysql sql timezone

我有一个包含以下列的表格:

|start_date  |TZ      | 
|Dec 2, 2012 |Eastern |
|Dec 2, 2012 |GMT     |

注1:我们的服务器是UTC时间。

注2:start_date列是日期字段,不是时间戳字段。 2012 年 12 月 2 日隐式表示“2012-12-02 00:00:00”

注3:上表其实是多个归一化的表,为了简单起见,我反归一化了

注意 4:我可以将任何内容放入 TZ 表中以简化此操作。

我想select from my_table where start_date <= now()

但是,由于时区的原因,这不起作用。如果当前日期/时间是 12 月 1 日东部时间晚上 9 点(UTC 时间 12 月 2 日凌晨 1 点),以上查询将返回两个结果, 但我真的只想要第二个。夏令时使情况更加复杂。

理想情况下,我想要执行以下操作的查询:

select * from my_table where convert_to_utc_timestamp(start_date,tz) <= now()

上述方法会将 start_date 转换为时间戳,然后将其转换为正确的时区。

我如何在 SQL 中执行此操作?

最佳答案

您可能会发现两个有用的函数。

第一个是:

STR_TO_DATE(start_date,'%M %d,%Y')

这会将指定格式的字符串转换为 MySQL DATE 数据类型。 如果你有 mysql.time_zone_name 等。表填充,你可以使用函数:

CONVERT_TZ()

(需要检查 CONVERT_TZ 是否采用 DATE 并将返回 DATETIME 或 TIMESTAMP,或者在要转换的字符串中包含时间组件以获得 DATETIME,例如

STR_TO_DATE( CONCAT(start_date,' 00:00:00'),'%M %d,%Y %T')

将该表达式包装在 CONVERT_TZ() 函数中,例如

CONVERT_TZ(  datetime_expr ,'US/Eastern','GMT')

要使用存储在 TZ 列中的值,这些值需要匹配,或者您需要想出一种方法来匹配存储在 中的值>mysql.time_zone_name 表。

关于mysql - 在mysql中将日期转换为UTC时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13941542/

相关文章:

c# - Entity Framework 在哪里存储属性名称和它在 SQL 中选择的列之间的映射?

javascript - 如何在另一个时区获取本地时间

javascript - 给定 TZID 和本地时间获取 UTC 时间

php - 处理 JSON 数据获取的最理想方式

mysql - 如何获取一张表的自增ID并插入到另一张表中

python - MySQLConnector (Python) : New DB connection for each query vs. 单个连接

mysql - 加入两个mysql表

MySQL实现表到数据库

sql - 我如何去匹配两个表中的三个字段以便在匹配的情况下更新相同的表

c++ - 如何从 UTC 日期创建 C++11 system_time(线程安全)