python - datetime => timestamp 的差异仅在某些情况下?

标签 python mysql datetime

在尝试比较 Python 和 MySQL 之间的值时,我遇到了一个非常奇怪的错误。

我在数据库中有一个“created”列(类型为“datetime”),例如,我有这两个值:

"2018-03-15 10:11:47"
"2018-10-28 02:06:08"

当使用 UNIX_TIMESTAMP(created) 转换为时间戳时,我得到以下信息:

1521105107
1540688768

现在,如果我在 Python 中重新创建这些日期并获取时间戳 (Python3),我将得到以下信息:

第一次约会:

dt = datetime.datetime(year=2018, month=3, day=15, hour=10, minute=11, second=47)
print(int(dt.timestamp()))
$> 1521105107 # Same as the database

第二次约会:

dt = datetime.datetime(year=2018, month=10, day=28, hour=2, minute=6, second=8)
print(int(dt.timestamp()))
$> 1540685168 # Different!

为什么?发生了什么事?

如果由于时间戳,我在数据库或 Python 上有任何增量,它会针对每一行,而不是几行。

我怀疑数据库正在跟踪 created 列的某个时区,但没有显示,但我被困在那里......

最佳答案

您需要确保在处理 DATETIME 列时,您的 MySql 服务器使用的时区与您的 Python 环境使用的时区相同,特别是当您使用从NOW() 等函数调用,或者,例如,当您通过调用 UNIX_TIMESTAMP 转换该列时。

所以,当我连接时,我做的第一件事就是发出一个命令,例如 'set time_zone = 'America/New_York';(但只是因为喜欢纽约; 可能会喜欢其他地方)然后我就不必担心我的服务器是在犹他州还是在纽约,也不需要知道夏令时何时生效。如果您发现您的服务器上没有诸如“America/New_York”之类的时区,那么您应该查看Time zone description tables。 .其次,你应该安装 Python 包 pytz .然后您将可以访问许多其他时区。 并在构建datetime.datetime 对象时使用明确的时区! 据我所知,我的 ISP 的 Python 环境可能没有与其 MySql 服务器完全相同的时区设置,而且两者都没有是我无论如何都想使用的。希望如果您遵循这些准则,这些差异应该会消失。如果没有,我会退还您的钱。

关于python - datetime => timestamp 的差异仅在某些情况下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57629467/

相关文章:

python - Wayland 上的 wxpython 无法与屏幕坐标交互(移动窗口、GetScreenPosition 等)

Python 在除法时保持精度

python - 如何腌制一个空文件?

php - Magento 1.4 $_POST ['field_name'] 不工作

python - Apache 与 mod_wsgi 发出有关 django 中数据库的错误

python - 如何从文本文件中的每一行创建一个字典条目?

php - 在 Codeigniter 上使用 HIghcharts 获取数据名称和总数

java - 从本地日期时间字符串获取一天中的时间

php - 获取特定日期的 SQL 数据

php - 以毫秒为单位将 MYSQL 日期时间四舍五入到最早的 15 分钟间隔 (PHP)