【问题标题】:How can I output the AM/PM part of a string received in military time using Ruby?如何使用 Ruby 输出在军事时间收到的字符串的 AM/PM 部分?
【发布时间】:2016-10-15 02:33:18
【问题描述】:

假设我有一个字符串,例如 13:00,即下午 1:00,但只有前两个字符 (13)。如何输出 PM 部分的字符串数据类型?喜欢

'13'.print_ampm()
=> PM

【问题讨论】:

  • 转换成一个数,看看是不是至少12?似乎不需要库,除非您正在寻找本地化的 am/pm 字符串。

标签: ruby date datetime time


【解决方案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"

【讨论】:

  • 对于使用 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

【讨论】:

  • 'time' 是宝石吗?
  • 还是 Ruby 原生的?
  • 它是本机库的一部分,但您可能需要在代码中使用它,具体取决于您使用或未使用的框架。
  • @Forwarding 感谢您选择我的答案,但 John Feminella 的答案更完整且更具描述性,您应该选择他的答案。
猜你喜欢
  • 1970-01-01
  • 2018-01-21
  • 2022-01-19
  • 1970-01-01
  • 2017-01-16
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多