2012-06-28 5 views
14

Ruby 1.9 프로그램에서 현재 시간을 Thu 1:51 PM과 같은 형식으로 지정하고 싶습니다. 하루 중 어떤 형식의 코드를 사용해야합니까? (이 예제에서는 1)?앞에 오는 0 또는 선행 공백없이 시간을 쓰려면 어떻게해야합니까?

Time.now.strftime '%a %I:%M %p' #=> "Thu 01:51 PM" 
Time.now.strftime '%a %l:%M %p' #=> "Thu 1:51 PM" 

%I 앞에 0 (01)가 있습니다. %l에는 선행 공백 ( 1)이 있습니다. 시간당 기타 형식 코드는 strftime documentation에 표시되지 않습니다. 공백이 문자열 중간에 있기 때문에 .lstrip을 사용할 수 없습니다. 내가 .gsub(/ +/, " ")을 사용할 수는 있지만 덜 해킹되고 단순한 방법이 있는지 궁금합니다.

답변

36
Time.now.strftime '%a %-l:%M %p' #=> "Thu 1:51 PM" 

쓰기 대신 %l%-l. -은 공백과 0을 제거합니다.

다른 형식 코드에도 -을 사용할 수 있습니다. Ruby strftime 문서에서도 %-m%-d을 언급하고 있지만 어떤 코드에도 -을 사용할 수 있다는 언급은하지 못했습니다. 따라서 %-I%-l과 같은 결과를 나타냅니다. 그러나 대신에 l을 사용하면 나에게 처음에 아무것도 원하지 않는다는 것을 의미하기 때문에 %-l을 권장합니다. 쓰기 공간이 우발적으로 보입니다.

- 및 유사한 구문 _0을 포함하여 an exhaustive list of Ruby 1.8strftime format codes을 볼 수도 있습니다. Mac OS X의 Ruby 1.8은 확장 구문을 지원하지 않지만 걱정하지 않아도됩니다. 내 OS X 머신의 Ruby 1.9에서 작동합니다.

+0

위시 모든 솔루션은 간단하고 직설적이었습니다. +1 – flarn2006

+0

이 솔루션은 Windows가 아닌 Unix 시스템에서만 작동합니다. [ "파이썬'strftime' - 날짜 0이없는 데이트"에 대한이 대답은 (https://stackoverflow.com/a/2073189/578288) 파이썬에서와 거의 동일한 작업이며'% -'는 오직 작동한다고 유닉스에서. [ "% -d"또는 "% -e"가 선행 공백이나 0을 제거하는 이유는 무엇입니까?] (https://stackoverflow.com/q/28894172/578288) 파이썬이 기본 운영체제 시스템을 호출하기 때문에 비 호환성이 있다고 말합니다 'strftime'은 플랫폼 특정 확장자를 가질 수 있습니다. 루비의 'strftime'이 같은지 나는 모른다. –

관련 문제