我尝试使用节点将旧的sqlite数据库导入到mongodb,这个数据库有几个日期字段,我无法获得正确的数据,例如:
370735200 - >应该 2012/10/01 00:00:00 ,但它显示:
1981年9月30日星期三23:00:00 GMT + 0100(CEST)
我这样做:
var originalDate = Math.round (new Date(data.origDate * 1000))
另一个例子360540000 - >应该 2012/06/05 00:00:00 ,但它显示:
Fri Jun 05 1981 00:00:00 GMT + 0200(CEST)
SQLite数据库中的日期字段的类型为:时间戳
也许有人可以建议或建议一些节点模块来解决这个问题。
编辑,添加信息:
我被告知sqlite值来自NSDate,我看到了文档:NSDate的唯一原始方法" timeIntervalSinceReferenceDate,为NSDate接口中的所有其他方法提供了基础。此方法返回相对于绝对参考日期的时间值 - 2001年1月1日的第一个时刻,GMT。"但我仍然想知道如何翻译它以获得正确的日期。
答案 0 :(得分:2)
MongoDb(以及sqlite3中的日期函数)的参考日期为1970年1月1日(http://en.wikipedia.org/wiki/Unix_time),这就是您看到引用结果的原因:
sqlite> SELECT datetime(370735200, "unixepoch");
1981-09-30 22:00:00
sqlite> SELECT datetime(360540000, "unixepoch");
1981-06-04 22:00:00
如果您的数据使用不同的参考日期,则必须相应地偏移值:
sqlite> SELECT datetime(370735200 + strftime("%s", "2001-01-01"), "unixepoch");
2012-09-30 22:00:00
sqlite> SELECT datetime(360540000 + strftime("%s", "2001-01-01"), "unixepoch");
2012-06-04 22:00:00
(这些时间戳是UTC,而你的时区有时区,这就是为什么与你期望的时间戳相差1小时2小时的原因。)
所以下面的公式应该有效:
var originalDate = Math.round (new Date((data.origDate + 978307200) * 1000))