2011-03-21 75 views
16

我的Ruby程序說我的日期是無效的,當我做到這一點:我在做什麼DateTime.strptime錯誤?

format = "%D/%M/%Y %H:%M:%S:3N" 
date = "21/03/2011 16:39:11.642" 

DateTime.strptime(time, format) 

我自己也嘗試這一個:

format = "%D/%M/%Y %H:%M:%S:3" 

我得到的是這樣的:

ArgumentError: invalid date  
     from /usr/local/lib/ruby/1.9.1/date.rb:1688:in `new_by_frags'  
     from /usr/local/lib/ruby/1.9.1/date.rb:1713:in `strptime' 
     from (irb):12 
     from /usr/local/bin/irb:12:in `<main>' 

回答

25

看起來你正在對strptime的格式指令感到困惑。請注意0​​在format中是兩次,一次代表月份,下一次代表分鐘?

%D表示日期爲%m/%d/%y

%d意味着該月的一天[01,31]

%M意味着分鐘[00,59]

%m意味着月份數[01,12]

這應該工作:

format = "%d/%m/%Y %H:%M:%S" 
date_time = "21/03/2011 16:39:11.642" 

puts DateTime.strptime(date_time, format) #=> 2011-03-21T16:39:11+00:00 

這裏有一個strptime reference

+8

我發現http://strfti.me/用於建立這些格式字符串真的很棒。 – opsb 2012-08-30 09:55:29

+0

因此'strftime'和'strptime'的格式字符串符號有不同的含義? – 2013-06-13 05:42:36

+0

謝謝邁克爾。這真的幫了我 – 2013-11-02 17:50:52

0

嘗試使用

datetime.to_date.strftime(format)

datetime.to_time