2

我有一个方法,它采用 DateTime (当前作为字符串),然后我将其转换为 DateTime 对象,例如:

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

所以,

foo("2012-09-03")

我还希望能够解析 DateTime 对象:

foo(Time.now)

Time.parse抱怨我没有给它一个字符串:

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

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

谢谢

编辑:感谢您的评论-我对使用 if 语句没有真正的反感,我只是想看看是否有更好的

4

2 回答 2

5

这是一种不带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
于 2012-09-04T14:16:06.237 回答
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,这可能是最简单的方法。

于 2012-09-04T14:29:42.867 回答