我在 Mongo 集合中存储了各种时间戳,有些是浮点数,有些是整数。
它们都存储在 BST 中,服务器将很快切换到 UTC。如何在 Mongo 中将它们转换为 UTC 时间戳?
在 MySQL 中,我可以这样做:
UPDATE `table` SET `field` = CONVERT_TZ(`field`, 'Europe/London', 'UTC');
有Mongo等价物吗?
我在 Mongo 集合中存储了各种时间戳,有些是浮点数,有些是整数。
它们都存储在 BST 中,服务器将很快切换到 UTC。如何在 Mongo 中将它们转换为 UTC 时间戳?
在 MySQL 中,我可以这样做:
UPDATE `table` SET `field` = CONVERT_TZ(`field`, 'Europe/London', 'UTC');
有Mongo等价物吗?
您必须使用您选择的语言并一次更新一种。它应该像for
加载数据并重写它的循环一样简单。
只需仔细检查您选择的语言如何处理跨时区的时间戳。进行这样的数据更改会对生产代码产生各种意想不到的影响。
时间戳通常采用 UTC 而不是特定时区。我使用的所有日期/时间库都返回时间戳,即自 1970 年 1 月 1 日 UTC 以来的秒数(或毫秒)。检查您用于创建时间戳的库的文档以确保。
这意味着您应该没问题,除非您使用了不遵循此约定的日期/时间库,或者以某种方式自己计算了时间戳并考虑了时区。
例如,在 JavaScript 中,如果您存储从返回的值,new Date().getTime()
然后将该值传递new Date(...)
给不同的系统,那么无论两个系统的时区如何,您最终都会得到相同的绝对日期/时间。Ruby 也是如此,Time.new.to_i
在一台机器上执行,然后Time.at(...)
在另一台机器上运行,您将获得相同的绝对日期/时间。当我说“绝对日期/时间”时,我的意思是它的 UTC 时间将是相同的,系统很可能会在本地时区显示它,但这就是你想要的。
关于 Mongo 中的日期需要考虑的几点:
建议不要使用 DateTime.Parse。您将了解有关如何格式化 DateTimes 的各种时区问题。
相反,只需使用具有 UTC 风格的 DateTime 构造函数之一。
例子:
var dateTime = new DateTime(2011, 5, 5, 0, 0, 0, DateTimeKind.Utc);
希望你觉得它有用。