【发布时间】:2010-12-21 19:27:17
【问题描述】:
我需要将 (MSSQL) 数据库表中的数据库列转换为 UNIX time_t。问题是该列没有时区,有些日期来自 GMT (+0000),有些来自 BST (+0100)。我正在为英国时报工作。
有没有可靠的方法将未分区的 datetime 转换为 UNIX time_t?我目前正在使用
SELECT *,DATEDIFF(second,'1970-01-01',event_time)
但这似乎受制于当前时区,不适用于日期。
我不介意在 SQL 或代码中进行转换。我在 Perl 工作。
【问题讨论】:
-
您目前如何判断哪些行是 GMT/UTC 和 BST?
-
他们的系统没有。因此我的问题。
-
如何填充此列?
-
如果您无法区分时区,您的程序将如何区分?
-
潜在的问题似乎是上面的 DATEDIFF 使用了当前的时间偏移量,而不是适合 event_time 的时间偏移量。可能通过深入研究 SQL Server 管理文档来修复(并且当数据库转移到一些新服务器等时必然会中断),使用 hobbs 代码在代码中处理它更安全。
标签: sql sql-server date timezone