2012-09-04 3 views
2

에 문자열과 날짜 시간을 전달하는 우아한 방법 내가 가지고 예를 들어, 내가 다음 DateTime 개체로 변환 (현재 문자열 등) 날짜 시간을 소요하는 방법 :루비 : Time.Parse

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 문 사용하는 진짜 혐오가없는

+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

이 솔루션으로 가십시오. 그것은 단지 우아하지 않습니다. 서정적이야! "시간은 시간에 반응하는 시간 점과 같습니다. [Time to time] (http://en.wikipedia.org/wiki/Time_After_Time_ (Cyndi_Lauper_song))":-D –

+1

감사합니다. @PaulFioravanti, 덕을 활용하려고했습니다. 이것으로 모든 가능성을 타자를 치기. –

1

인수에 to_s을 사용해 보셨습니까?

앞뒤로 변환,하지만 당신은 if을 사용하지 않으려면, 그것은 아마 가장 쉬운 방법 Time 객체의 경우 물론
... 
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 

.