gpt4 book ai didi

mysql - 如何测试不同时区的数据库记录?

转载 作者:太空宇宙 更新时间:2023-11-04 10:47:26 24 4
gpt4 key购买 nike

现在我正在开发一个rails项目。我的数据库是 MySQL。

我检查我的 MySQL 的时区:

mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+

SYSTEM 时区是:

mysql> SELECT EXTRACT(HOUR FROM (TIMEDIFF(NOW(), UTC_TIMESTAMP))) AS `timezone`;
+----------+
| timezone |
+----------+
| 9 |
+----------+

此外,我的 linux 系统的时区是:

$ date +'%:z %Z'
+09:00 JST

现在,当我向数据库中插入一条记录时,created_at 值将是 utc 时间。例如:

# Now is 14:25:59
Product.create(name: 'Best')
# select created_at from products;
# 5:25:59

因此,如果我在我的规范源中使用 rspec 测试该功能,我应该从数据库中获取该数据并加上 9 等于当前系统时间。好吃吗?

为什么使用active_record 将数据保存为utc 时间?如果使用这个配置,有没有办法以正确的方式测试数据库记录?

最佳答案

(也许)最好的方法是在 UTC 时间保存所有内容。因此,您可以使用 Time.in_time_zone 获取指定区域内的时间。

我的 20:00 PM 是 UTC 13:00,也许你的 06:00 AM - 但在数据库中它只是同一时间 - UTC。

如果涉及到渲染,您可以使用 rails 助手进行计时,并始终提供 created_at.in_time_zone

如果涉及到渲染,您只需丢弃 UTC 时间戳,让 JavaScript 处理其余部分,将时间戳格式化为用户本地时间。

关于mysql - 如何测试不同时区的数据库记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32471576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com