2016-05-11 9 views
1

時刻に応じてMorningまたはAfternoonのいずれかを出力しようとしました。私は時間を弦に変え、それを比較しようとしました。ここに私が持っているものがあります:午前または午後に時間を返す方法

t = Time.now 
# => 2016-05-11 07:18:10 -0500 
if t.to_s >= '12:00' 
    'Good afternoon' 
else 
    'Good morning' 
end 
# => "Good afternoon" 

デフォルトは"Good afternoon"です。どうしてこれなの?それはRubyが24時間クロックで時間を設定するからですか?それともコーディング内の何か?

+0

なぜ文字列として比較していますか? – sawa

+0

@sawa私が何をしたのかは分かりませんでした。 – 13aal

+1

そして、「私が何をしたのか、それではどうしたらいいの?私たちはすべて、忘却への旅を始めました。それは、動作しますので、それが終了されるまで、それを受け入れ、それが最終的に行うのより良いときにそれを行うことの何が問題になって、動作する場合 – ReggieB

答えて

4

あなたは、任意の文字列操作は必要ありません。

t = Time.now 
# => 2016-05-11 20:26:11 +0800 
t.hour 
# => 20 

ただ12とそのhour(整数)を比較します。

3

文字列を比較していますが、期待した結果が得られません。 「2016年5月11日午後01時27分43秒0100」:

Time.now.to_sは、のような文字列を出力します。それを "12:00"と比較すると、それは文字列の文字の比較であり、それらが表す時間ではありません。

代わりにこれを試してみてください:strftimeのため

t = Time.now 

if t.strftime('%P') == 'pm' 
    'Good afternoon' 
else 
    'Good morning' 
end 

ドキュメント:http://ruby-doc.org/core-2.3.1/Time.html#method-i-strftime

+0

それはとてもよく読まれます! –

1
require 'time' 

t = Time.new 
puts "Good %s" % [(t.to_i/43199).even? ? "morning" : "afternoon"] 
Good morning 

t += 43199 
puts "Good %s" % [(t.to_i/43199).even? ? "morning" : "afternoon"] 
Good afternoon 

注:43199 = 12*60*60/2 - 1

単にコト。

関連する問題