Как я могу вывести AM / PM часть строки, полученной в военное время, используя Ruby?

#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 Спасибо за выбор моего ответа, но ответ Джона Феминеллы гораздо более полный и описательный, вы должны выбрать его ответ.