2012-12-19 3 views
3

나는 시간 객체 가지고있는 경우에 :Ruby : Time 객체에서 자오선을 얻는 방법?

t = Time.now 

을하고 내가 그 시간이 바로 지금,이 일을 내가 알 수있는 유일한 방법 오전 또는 오후 있는지 알고 싶은 것입니다 :

t.strftime("%p") == "PM" 

이제 %p이 보간 된 것입니다. 맞습니까? 그것에 도달 할 다른 방법이 있습니까?

내가 포맷 시간을하고 있어요 때문에 내가 좋아하는 범위 시간을 표시 할 위치를 물어 :

"9:00 AM - 5:00 PM" 
"4:00 - 5:30 PM" 
"10:15 - 11:45 AM" 

를 지금 나는이 strftime의 문자열 값을 확인해야하지만, 내가 선호하는 것 대신 내가 지금하고있어 훨씬 더 자세한 strftime 문자열 비교의 ...

if start_time.am? && end_time.pm? || start_time.pm? && end_time.am? 

: 뭔가를 작성합니다.

답변

2

http://www.ruby-doc.org/core-1.9.3/Time.html을 기준으로 다른 방법이 없다고 생각합니다. 당신은 그러나 당신에게 약간 지루한의 strftime을 저장하는 원숭이 패치 시간 수 :

class Time 
    def meridian 
    self.strftime('%p') 
    end 

    def am? 
    self.meridian == 'AM' 
    end 

    def pm? 
    self.meridian == 'PM' 
    end 
end 
+0

차가움. 나는이 같은 것이 유일한 방법일지도 모른다고 생각했습니다. 예를 들어 주셔서 감사합니다. – Andrew

1

time.am?만큼 좋은 것은 없지만 대신 time.hour < 12을 사용할 수 있습니다.

+0

좋은 제안, 나는 bioneuralnet의 원숭이 패치와 검사 방법을 결합하기로 결정했다. 감사! – Andrew

0
class Time 
    def am? 
    self.hour.in? (0..12) 
    end 

    def pm? 
    self.hour.in? (13..24) 
    end 
end 
+0

Ruby 1.9.2에서 : 'am?': 정의되지 않은 메소드 'in?' 2 : Fixnum (NoMethodError). 하지만이 작품은 : 'def am? (0..12).? (시간) 끝 ' – BernardK

+1

예. 'in? '은 Rails 바로 가기 방법입니다. 순수 루비에서는'include? '를 사용해야합니다. –

관련 문제