当我使用Mongoid将一个DateTime字段存储到MongoDB中时,我遇到了一个奇怪的问题。从Ruby方面来看,事情看起来还不错:
irb(main):002:0> dt=DateTime.strptime("12/02/13 13:25:21", "%m/%d/%Y %H:%M:%S")
=> #<DateTime: 0013-12-02T13:25:21+00:00 ((1726142j,48321s,0n),+0s,2299161j)>
irb(main):003:0> dt.day
=> 2
irb(main):004:0> dt.month
=> 12
irb(main):005:0> dt.year
=> 13
irb(main):006:0> dt.hour
=> 13
irb(main):007:0> dt.minute
=> 25
irb(main):008:0> dt.second
=> 21
现在,当我使用Mongoid将其存储在MongoDB中时,它会像以下内容一样存储:
class Foo
include Mongoid::Document
include Mongoid::Timestamps
field :datetime, type: DateTime
def set_stuff_up
self.datetime = DateTime.strptime("12/02/13 13:25:21", "%m/%d/%Y %H:%M:%S")
end
end
当我从数据库中检索这个时,就会出现问题:
> db.foos.findOne().datetime
ISODate("0013-11-30T13:25:21Z")
> db.foos.findOne().datetime.getMonth()
10
> db.foos.findOne().datetime.getDay()
6
> db.foos.findOne().datetime.getYear()
-1887
结果类似于Ruby的结尾。我在这里使用findOne()
来检索文档很好,因为集合中只有一个文档:
> db.foos.find().size()
1
答案 0 :(得分:1)
您使用了错误的格式字符串作为该日期格式。 %Y
为四位数年份,%y
为两位数年份。来自fine manual:
%Y - Year with century (can be negative, 4 digits at least)
-0001, 0000, 1995, 2009, 14292, etc.
...
%y - year % 100 (00..99)
您甚至可以在控制台中看到年份不正确:
=> #<DateTime: 0013-12-02T13:25:21+00:00 ((1726142j,48321s,0n),+0s,2299161j)>
和dt.year
值:
irb(main):005:0> dt.year
=> 13
0013和2013年并不完全相同。
你想说:
self.datetime = DateTime.strptime("12/02/13 13:25:21", "%m/%d/%y %H:%M:%S")
# ------------------------------------------------------------^^