В чем ошибка в этом коде преобразования времени в Ruby? - PullRequest
0 голосов
/ 11 ноября 2018

Я должен конвертировать время в 12-часовом формате в 24-часовой формат. Входные данные приведены в виде одной строки (12:45:00 AM ===> 00:45:00). Этот код не дает вывода, но ошибка не видна.

def timeString(hh,mm,ss)
    hh.to_s.rjust(2,"0") + ":" + mm.to_s.rjust(2, "0") + ":" + ss.to_s.rjust(2, "0")
end

def timeConversion(s)
    hh = s[0,2].to_i
    mm = s[3,2].to_i
    ss = s[6,2].to_i

    if s[8]==?A
        if hh==12
            hh =0
            t =timeString(hh,mm,ss)
            return t
        elsif hh < 12
            t = timeString(hh,mm,ss)
            return t
        end 
    elsif s[8] == ?P
        if hh == 12
            t = timeString(hh,mm,ss)
            return t
        elsif hh >12
            hh -=12
            t = timeString(hh,mm,ss)
            return t
        end
    end 

end

s = gets.chomp  
result = timeConversion s  
print result

1 Ответ

0 голосов
/ 11 ноября 2018

Когда вы нашли проблему, я предложу альтернативный способ написания вашего метода.

def convert_12_to_24(s12)
  hr = s12[0,2].to_i
  hr = if s12[-2,2] == 'AM'
         hr == 12 ? 0 : hr
       else
         hr == 12 ? 12 : hr + 12
       end
  "%02d%s" % [hr, s12[2..-3]]
end

convert_12_to_24 "12:00:00AM"  #=> "00:00:00"
convert_12_to_24 "12:59:59AM"  #=> "00:59:59"
convert_12_to_24 "01:00:00AM"  #=> "01:00:00"
convert_12_to_24 "11:59:00AM"  #=> "11:59:00"
convert_12_to_24 "12:00:00PM"  #=> "12:00:00"
convert_12_to_24 "12:59:59PM"  #=> "12:59:59"
convert_12_to_24 "01:00:00PM"  #=> "13:00:00"
convert_12_to_24 "11:59:59PM"  #=> "23:59:59"

См. Kernel # sprintf для директив форматирования строки (здесь "%02d%s").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...