#ruby #date #datetime #time
#ruby #Дата #дата и время #время
Вопрос:
Допустим, у меня есть строка типа 13:00, то есть 1:00 вечера, но только первые два символа (13). Как я могу вывести строковый тип данных части PM? Нравится
'13'.print_ampm()
=> PM
Комментарии:
1. Преобразовать в число и посмотреть, равно ли оно хотя бы 12? Похоже, для этого не требуется библиотека, если вы не ищете локализованную строку am / pm.
Ответ №1:
Используйте Time#strftime
, который предназначен для времени форматирования. %p
Флаг даст вам заглавные буквы «AM» или «PM»:
t = Time.now
# => 2016-10-14 22:37:03 -0400
t.strftime('%p')
=> "PM"
Просто для строки, которая не является Time
объектом, используйте:
require 'time'
Time.parse('10:30').strftime('%p')
# => "AM"
Time.parse('23:30').strftime('%p')
# => "PM"
Если вы хотите использовать нижний регистр, используйте %P
вместо:
Time.parse('23:30').strftime('%P')
# => "pm"
Комментарии:
1. Для всех, кто использует strftime, если вы не запомнили все комбинации, вот хороший веб-сайт / инструмент, который я использую для создания ссылки на строку: foragoodstrftime.com
Ответ №2:
Один из способов справиться с этим — использовать метод Time.parse, как определено здесь: https://ruby-doc.org/stdlib-2.3.1/libdoc/time/rdoc/Time.html#method-c-parse
Вот так:
require 'time'
hour = '13'
puts Time.parse("#{hour}:00").strftime('%p') # PM
Комментарии:
1. Это
'time'
драгоценный камень?2. Или это родной язык для Ruby?
3. Это часть собственной библиотеки, но вам может потребоваться включить ее в свой код, в зависимости от используемой вами платформы, а может и нет.
4. @Forwarding Спасибо за выбор моего ответа, но ответ Джона Феминеллы гораздо более полный и описательный, вы должны выбрать его ответ.