説明日付時刻文字列
での作業、私はそれだけで日付可能性があり、それが24時間形式でちょうど時間可能性があり、タイムゾーンとの完全な日付時刻形式することができ、文字列、日付などの入力を取得する必要があります、24時間形式のタイムゾーンを含む時間、またはamとpmの時間、または上記の任意の組み合わせ。
出力として、現在の(または与えられた)日付を24時間形式とタイムゾーンで取得したい場合は、ルビーで解析できますTime.parse()
。私はいくつかの仕事をしており、あなたは以下のソースコードを見つけることができます。また、期待の一部にrspec(テストケース)を追加しました。
独自のソリューションを提供したり、自分のソースを好きなように更新することができます。
例
注:ここでの予定日
"2016-1-1T01:00:00 +0000"
に変換されるはずです
'2200+5'
を提供していない日が"2016-1-1T22:00:00 +0500"
'100'
に変換取得する場合、現在の日付です'1700+8'
は、変換を取得する必要"2016-1-1T17:30:00 +0000"
'530pm+8'
に変換されるはずです'2016-12-15T23:00:00 +0500'
'1730'
に変換されるはずです"2016-1-1T5:00:00 +0800"
'2016-12-15T2300+5'
に変換されるはずです"2016-1-1T17:00:00 +0800"
'5am+8'
に変換されるはずです"2016-1-1T17:00:00 +0800"
'5pm+8'
に変換されるはずです〜"2016-1-1T17:30:00 +0800"
'1210am+8'
は私がさらに明確化のために教えてください"2016-1-1T12:10:00 +0800"
RSpec
describe "should convert datetime to accepted format"
Timecop.freeze(Time.utc(2016,1,1,2,0,0))
it {expect(parse('2200+5')).to eq({time: Time.parse("2016-1-1T22:00:00 +0500")})}
it {expect(parse('100')).to eq({time: Time.parse("2016-1-1T01:00:00 +0000")})}
it {expect(parse('1700+8')).to eq({time: Time.parse("2016-1-1T17:00:00 +0800")})}
it {expect(parse('5pm+8')).to eq({time: Time.parse("2016-1-1T17:00:00 +0800")})}
it {expect(parse('5am+8')).to eq({time: Time.parse("2016-1-1T5:00:00 +0800")})}
it {expect(parse('2016-12-15T2300+5')).to eq({time: Time.parse("2016-12-15T23:00:00 +0500")})}
it {expect(parse('1730')).to eq({time: Time.parse("2016-1-1T17:30:00 +0000")})}
Timecop.return
end
私はSO FARやっていること
# ensure 2 char in time format
def ensure_2_char_in_time(t)
return "0#{t}" if t.to_s.length == 1
t.to_s
end
def get_time_zone_from(aTimeParams)
date, tzm, tzm_type = nil
# get date, time, timezon from given string
if aTimeParams.include?('-') && aTimeParams.include?('T')
date, time_zone = aTimeParams.split('T')
else
time_zone = aTimeParams
end
# get time, zone from given string
if time_zone.include?('+')
tzm_type = '+'
time_str, tzm = aTimeParams.split('+')
elsif time_zone.include?('-')
tzm_type = '-'
time_str, tzm = aTimeParams.split('-')
else
tzm_type = '+'
time_str = aTimeParams
end
date = "#{Date.today.year}-#{Date.today.month}-#{Date.today.day}" if date.blank?
if time_str.include?('pm')
hour = ensure_2_char_in_time(time_str.to_i + 12)
min = '00'
elsif time_str.include?('am')
hour = ensure_2_char_in_time(time_str.to_i)
min = '00'
else
hour = ensure_2_char_in_time(time_str.to_i/100)
min = ensure_2_char_in_time(time_str.to_i % 100)
end
if tzm.to_s.length <= 2
tzm_h = ensure_2_char_in_time tzm.to_i % 100
tzm_m = "00"
else
tzm_h = ensure_2_char_in_time tzm.to_i/100
tzm_m = ensure_2_char_in_time tzm.to_i % 100
end
{
time: Time.parse("#{date}T#{hour}:#{min}:00 #{tzm_type}#{tzm_h}:#{tzm_m}"),
tzm: (tzm_h.to_i * 60 + tzm_m.to_i)
}
end
に変換する必要があります。
おかげ
提案してくれてありがとうございました。それをやりましょう – przbadu