2013-08-29 140 views
0

當我將使用Mongoid的DateTime字段存儲到MongoDB時,我遇到了一個奇怪的問題。基於從Ruby端的東西從表面上看,看行不行:MongoDB和存儲日期時間字段

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 

回答

1

您使用該日期格式錯誤的格式字符串。 A %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年麥凱納t完全一樣。

你想說:

self.datetime = DateTime.strptime("12/02/13 13:25:21", "%m/%d/%y %H:%M:%S") 
# ------------------------------------------------------------^^ 
+0

好眼力。謝謝。 – randombits