3
A
回答
9
[14, 0, 23].map { |hour| Time.parse("#{hour}:00").strftime("%l %P") }
=> [" 2 pm", "12 am", "11 pm"]
2
def convert h
p, l = h.divmod(12)
"#{l.zero? ? 12 : l} #{p.zero? ? "a" : "p"}m"
end
convert(14) # => "2 pm"
convert(0) # => "12 am"
convert(23) # => "11 pm"
4
我喜歡@森的答案,因爲它可以讓時間做繁重,但使用的基準,我們可以看到這是最CPU密集型:
這是我採寫:
def am_pm(hour)
meridian = (hour >= 12) ? 'pm' : 'am'
hour = case hour
when 0, 12
12
when 13 .. 23
hour - 12
else
hour
end
"#{ hour } #{ meridian }"
end
基準:
require 'benchmark'
require 'time'
def mori(hour)
Time.parse("#{hour}:00").strftime("%l %P")
end
def convert h
p, l = h.divmod(12)
"#{l.zero? ? 12 : l} #{p.zero? ? "a" : "p"}m"
end
def am_pm(hour)
meridian = (hour >= 12) ? 'pm' : 'am'
hour = case hour
when 0, 12
12
when 13 .. 23
hour - 12
else
hour
end
"#{ hour } #{ meridian }"
end
def hour_24_to_12(hour_24)
hour_12 = hour_24 - 12
if hour_12 == 0
return "12 pm"
elsif hour_12 == -12
return "12 am"
elsif hour_12 > 0
return "#{hour_12} pm"
elsif hour_12 < 0
return "#{hour_24} am"
else
# The passed-in time is outside the range o 0-23,
# so you may need to deal with this however you
# feel is appropriate
end
end
HRS = [0, 14, 23]
N = 100_000
puts RUBY_VERSION
HRS.each { |hr| puts "am_pm: #{ am_pm(hr) }" }
HRS.each { |hr| puts "convert: #{ convert(hr) }" }
HRS.each { |hr| puts "hour_24_to_12: #{ hour_24_to_12(hr) }" }
HRS.each { |hr| puts "mori: #{ mori(hr) }" }
Benchmark.bm(13) do |b|
b.report('am_pm') { N.times { HRS.each { |h| am_pm(h) } } }
b.report('convert') { N.times { HRS.each { |h| convert(h) } } }
b.report('hour_24_to_12') { N.times { HRS.each { |h| hour_24_to_12(h) } } }
b.report('mori') { N.times { HRS.each { |h| mori(h) } } }
end
,輸出:
1.9.3
am_pm: 12 am
am_pm: 2 pm
am_pm: 11 pm
convert: 12 am
convert: 2 pm
convert: 11 pm
hour_24_to_12: 12 am
hour_24_to_12: 2 pm
hour_24_to_12: 11 pm
mori: 12 am
mori: 2 pm
mori: 11 pm
user system total real
am_pm 1.230000 0.000000 1.230000 ( 1.228159)
convert 1.280000 0.000000 1.280000 ( 1.286672)
hour_24_to_12 0.640000 0.000000 0.640000 ( 0.642993)
mori 20.940000 0.020000 20.960000 (21.003620)
而且相同的測試僅在2.0的Ruby-P0運行:
2.0.0
am_pm: 12 am
am_pm: 2 pm
am_pm: 11 pm
convert: 12 am
convert: 2 pm
convert: 11 pm
hour_24_to_12: 12 am
hour_24_to_12: 2 pm
hour_24_to_12: 11 pm
mori: 12 am
mori: 2 pm
mori: 11 pm
user system total real
am_pm 0.440000 0.000000 0.440000 ( 0.433303)
convert 0.410000 0.000000 0.410000 ( 0.412183)
hour_24_to_12 0.200000 0.000000 0.200000 ( 0.201894)
mori 9.910000 0.010000 9.920000 ( 9.921940)
相關問題
- 1. 轉換字符串在12(下午/上午)小時上午下午時間到24小時時間android
- 2. Android將DateTime從上午/下午轉換爲24小時
- 3. 將24小時轉換爲上午/下午格式
- 4. 轉換12小時hh:毫米上午/下午到24小時hh:毫米
- 5. 將整數(0,1,2 ...,23)轉換爲小時(上午/下午)
- 6. 在Joda-Time轉換24小時時間到上午/下午
- 7. 將字符串在24小時內轉換爲12小時上午下午時間
- 8. 爲什麼我不能使用PHP將我的24小時時間轉換爲上午12點/下午時間?
- 9. 如何在12小時上午/下午格式中添加24小時選項?
- 10. 轉換日期時間與上午下午到24小時日期格式
- 11. 將上午/下午時間轉換爲時期
- 12. 將日期時間轉換爲上午/下午時間
- 13. 將分鐘自午夜轉換爲上午/下午時間的函數
- 14. 獲取12小時上午/下午時間
- 15. 將文本日期與上午/下午時間轉換爲24小時時間在Excel中非VBA
- 16. Rails每天12小時上午/下午的範圍
- 17. 將12小時時間格式轉換爲24小時整數?
- 18. 如何更改日期從24小時格式到12小時格式(上午/下午)在Android中
- 19. 如何將HH:mm:ss轉換爲hh:mm上午/下午在Android
- 20. 使用php/Mysql中的select查詢將日期/時間從24小時格式轉換爲12小時上午/下午
- 21. 將24小時制轉換爲12小時上午/下午制時間。是否有任何條件會打破這種算法?
- 22. 外匯牌價12小時至24小時12:00:上午 - > 00:00:00
- 23. 上次修改使用Javascript與12小時時鐘顯示上午或下午
- 24. 如何將時間範圍轉換爲下午或上午時間?
- 25. 時間表從上午12點到上午12點
- 26. Android日曆設置上午或下午時間不是24小時
- 27. 日期時間格式像HH:毫米24小時沒有上午/下午
- 28. 將12小時轉換爲24
- 29. 轉換時間:分鐘上午/下午到unix時間戳
- 30. 檢查24小時模式或上午/下午模式,與UIDatePicker一起使用
我想你可以用3個條件語句做到這一點:'如果INT == 0',如果' int> 12'和'elseif'。我覺得它會更可靠和可定製您的需求。 – tmwoods 2013-03-10 23:03:54
下午2點是什麼?這是一個時間對象還是一個字符串或什麼? – 2013-03-10 23:04:28
只是一個字符串,這些都不需要是時間或日期對象。 – Tallboy 2013-03-10 23:04:52