2012-09-04 28 views
2

我有这需要一个DateTime(目前作为一个字符串),我然后转换为DateTime对象,例如一个方法:红宝石:优雅的方式串和DateTime是否传递给Time.Parse

def foo(time) 
    the_time = Time.parse(time) 
    ... 
end 

和所以,

foo("2012-09-03") 

我想也能够解析DateTime对象:

foo(Time.now) 

Time.parse COM我不是给它一个字符串平原:

NoMethodError: undefined method `gsub!' for 2012-08-08 15:59:00 UTC:Time 

有一种优雅(?一行)方法返回一个字符串或DateTime对象DateTime对象(我宁愿避免使用if语句)

感谢

编辑:感谢您的意见 - 我没有真正上避免使用if语句,我只是看到,如果有什么更好的

+0

不需要。您必须测试'time'变量是否为整数,并且是否返回整数。 –

+0

你可以将参数转换为一个字符串,而不管它是什么类型,它会起作用,但我认为它不会很清楚...... if语句会更好,我相信... – fgp

回答

3

这里做才不至于if陈述的一种方法:

def foo(time) 
    the_time = Time.parse(time.to_s) 
    # ... 
end 

但是,如果您正在寻找一个优雅的解决方案,我怀疑重新解析日期可以这样考虑。为什么你认为if是一个不好的选择?下面是我该怎么做:

def foo(time) 
    the_time = time.respond_to?(:to_time) ? time.to_time : Time.parse(time.to_s) 
    # ... 
end 
+1

使用此解决方案。它不仅仅是优雅的;它很抒情! “时间等于时间点响应时间?[时间点到时间](http://en.wikipedia.org/wiki/Time_After_Time_(Cyndi_Lauper_song))”:-D –

+1

谢谢@PaulFioravanti,我试图利用鸭子用它打出全部潜力。 –

1

您是否尝试过仅对您的参数使用to_s

... 
the_time = Time.parse(time.to_s) 
... 

foo("2012-08-08 15:59:00") 
#=> 2012-08-08 15:59:00 +0200 
foo(Time.now) 
#=> 2012-09-04 16:27:46 +0200 

当然在Time对象,转换来回,但如果你不想使用if,它可能是最简单的方法的情况。