【问题标题】:Converting a 12 hour time string with AM/PM to 24 hour time将带有 AM/PM 的 12 小时时间字符串转换为 24 小时时间
【发布时间】:2020-04-23 23:53:00
【问题描述】:

我在我的数据库中为每个对象保存了一堆基于时间的字符串,格式如下:

"01:00 PM"

做了一些研究,我遇到了一个post,它向您展示了如何转换一个类似于但不完全是我的字符串的字符串。不同之处在于示例在小时和分钟整数之间没有冒号,这会在答案的转换中引发障碍:

Time.strptime("1:00 PM", "%I%P").strftime("%H:%M")
# ArgumentError (invalid strptime format - `%I%P')

鉴于我的特定格式,还有办法让这种转换工作吗?

【问题讨论】:

  • 12:00 PM 转换为12:00 可能不是最好的例子。
  • 不确定你的意思。
  • 12 存在于 12 小时制和 24 小时制中。选择 01:00 PM13:0011:00 PM23:00 这样的例子会更明显。
  • 哦,好吧,我明白了。感谢您指出了这一点。稍后我会更新。
  • 请注意,您不必使用Time 方法(但如果这样做会更简单):if str.end_with?('AM'); str.sub(/ PM/,''); else; hr, min = str.scan(/\d+/).map(&:to_i); "%d:%02d" % (60*hr + min + 12*60).divmod(60); end。例如,如果str = "1:07 PM",则返回"13:07"

标签: ruby-on-rails ruby


【解决方案1】:

您必须在 strptime 方法中传递时间格式,因此您必须传递 '%I:%M %P',如果您不想及时使用分号,则必须在 strftime 方法中将值传递为 '%H%M' 所以你会得到你所要求的答案。

Time.strptime('10:00 PM', '%I:%M %P').strftime("%H%M") 这会给你输出"2200"

Time.strptime('10:00 PM', '%I:%M %P').strftime("%H:%M") 这会给你输出"22:00"

谢谢。

【讨论】:

    【解决方案2】:

    你试过吗? time = "12:00 PM"

    Time.strptime(time, "%I:%M %P").strftime("%H:%M")

    【讨论】:

    • 这样我得到了错误:ArgumentError (invalid strptime format - '%I%M%P')
    • 您是否使用精确的"%I:%M %P" 作为第二个参数? %M%P 之间有分号和空格
    • 我还建议检查此文档:apidock.com/ruby/DateTime/strftime 它具有strftime 的全套选项。 strftime 和 strptime 的区别在这里stackoverflow.com/questions/14619494/… (大致相同,简而言之)
    猜你喜欢
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    相关资源
    最近更新 更多