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