2011-01-12 3 views
4

".strftime ("% H : % M ")"을 내 Rails 프로젝트에 시간을 표시하는 모든 항목에 계속 추가해야합니다. 각 콘서트 개체의 시작 시간과 종료 시간이 있으므로, 그 시간을 표시 할 때마다 ".strftime ("% H : % M ")"을 추가해야합니다.기본 Ruby 시간 형식을 변경하십시오.

날짜 형식을 변경하지 않는 것에 유의하십시오. 날짜는 그대로 (MM/DD/YYYY) 좋습니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 기본 시간 형식을 설정하는 방법이 있습니까?

(I이 단지 루비 일이 확실 해요,하지만 난 초보자, 그래서 잘 모르겠어요.)

+0

귀하의 사이트가 미국의 사람들에게만 명확하게 사용되지 않는 한 귀하의 날짜 형식에 MM/DD/YYYY를 사용하지 말 것을 제안합니다. 이는 종종 모호하며 (예 : 01/02/2011) 대부분의 다른 지역에서는 DD MM YYYY를 사용합니다. 그 달의 (아마도 짧은) 이름을 사용하는 것이 좋습니다. – noodl

+0

주목! 저는 개인적으로 미국에 있더라도 DD/MM/YYYY를 사용합니다. 그러나이 프로젝트는 아주 작은 파티를위한 것이며 모두 미국 출신이고 MM/DD 대회를 사용합니다. – user5243421

답변

14

당신이 레일을 사용하고 있기 때문에, 국제화 지원을 활용 : http://guides.rubyonrails.org/i18n.html#adding-date-time-formats

# config/locales/en.yml 
en: 
    time: 
    formats: 
     default: "%H:%M" 

을 그런 다음 I18n.l Time.now 또는 <%= l Time.now %>를 호출 할 때, 자동으로 해당 형식을 사용합니다.

+0

그래서, 내가 뭔가를 놓칠 수도 있지만, yml 파일에 추가했습니다, 그리고 아직 변경 사항을 볼 수 있습니다. 레일즈 2.3.8을 실행 중이며 이전에는 애자일 책으로 국제화에 어려움을 겪었던 것을 기억합니다. 일부 번역을 얻을 수있는 유일한 방법은 t 메소드를 사용하는 것입니다.내가 읽은 것부터 번역은 자동적이어야합니다. 나는 무엇을 잘못하고있을 것인가? – user5243421

+0

어리석은 것처럼 보일 수도 있지만 서버를 다시 시작 했습니까? 번역 파일이 자동으로 다시로드되는 것 같지 않습니다. 그렇다면 구문을 다시 확인하십시오. YAML은 들여 쓰기에 대해 매우 특별합니다. 마지막으로 "default"를 명시 적으로 지정하여이 동작에서 문서가 올바르지 않은지 확인하십시오. – coreyward

+0

흠, 나는 서버를 다시 시작하려고했지만 문제는 아닌 것 같습니다. 그래도 기본값을 명시 적으로 지정하면 무엇을 의미하는지 모르겠습니다 ... – user5243421

2

루비 레일에 DateTime 인스턴스를 포맷하는 내장 된 사전을 가지고 . 여기가 내 컴퓨터에 Time위한 작업은 다음과 같습니다도

>> Time.now.to_s(:db) 
=> "2011-01-12 15:26:11" 

당신은 자신을 정의하고 그것을 사용 :

>> Time::DATE_FORMATS 
=> {:short=>"%d %b %H:%M", :db=>"%Y-%m-%d %H:%M:%S", :rfc822=>#<Proc:[email protected]/Users/donovan/.gem/gems/activesupport-3.0.1/lib/active_support/core_ext/time/conversions.rb:13>, :time=>"%H:%M", :number=>"%Y%m%d%H%M%S", :long_ordinal=>#<Proc:[email protected]/Users/donovan/.gem/gems/activesupport-3.0.1/lib/active_support/core_ext/time/conversions.rb:12>, :long=>"%B %d, %Y %H:%M"} 

당신은 쉽게과 같이 사용할 수 있습니다

>> Time::DATE_FORMATS[:mine] = "%H:%M" 
=> "%H:%M" 
>> Time.now.to_s(:mine) 
=> "15:28" 
+0

어디에 넣어야합니까? Time :: DATE_FORMATS [: mine] = "% H : % M" "? 어떤 버전의 Ruby/Rails를 사용하고 있습니까? 내가하려고하면 "NameError : 초기화되지 않은 상수 Time :: DATE_FORMATS"irb 얻을. – user5243421

+0

내가 테스트 한 앱에서 Rails 3.0.1을 사용하고 있습니다. @ coreyward의 제안을 받아서 로케일 설정에 추가해야합니다. –

1

application_helper.rb 파일에 사용자 지정 함수를 만들 수 있습니다. 아마도 다음과 같을 수 있습니다 :

def custom_time(date) 
    date.strftime("%H:%M") 
end 

잘 작동하는지 잘 모르겠습니까?

+0

왜 이렇게 downvoted ... – JackCA

0

나는 이니셜 라이저를 사용 설정/초기화/time_formats.rb 포함하는 : 나는 그것을 표시 할 방법에 따라, 등 (app_date)

[Time, Date].map do |klass| 
    klass::DATE_FORMATS[:app_date] = "%m/%d/%Y" 
    klass::DATE_FORMATS[:app_month_and_year] = "%B %Y" 
    klass::DATE_FORMATS[:app_abbrev_month_and_year] = "%b %Y" 
    ... 
end 

가 그럼 난 Time.now.to_s를 사용합니다. Time::DATE_FORMATS[:default] = "%H:%M"을 추가하여 수행하려는 작업을 수행 할 수 있습니다. 이것은 국제화되지 않았습니다 - 그 때문에, coreyward의 답변은 아마 더 좋습니다.

관련 문제