使用正则表达式将12小时时间转换为24小时制

时间:2013-02-01 17:46:51

标签: ruby regex string time

我有一堆以这种格式开放时间的字符串:

Mon-Fri: AM7:00-PM8:00\nSat-Sun: AM8:00-PM6:00

我可以处理" AM"部分只是删除它,但我想通过

转换PM
  • 删除" PM"
  • 在":"
  • 之前的数字中加12
  • 注意PM有时是两位数(例如PM11:00)

字符串中可以有零个或多个PM时间。

我不确定如何将时间作为一个数字来操纵。我已经走到了这一步:

opening_hours.sub! /PM([\d]?[\d]):/, "***\1***"

其中输出的内容如下:

AM7:15-***\u0001***00

' \ u0001`可能是由字符串中的日文字符引起的。

2 个答案:

答案 0 :(得分:4)

您可以利用String#gsub接受阻止的事实。这样的事情会对你有用吗?

s = "Mon-Fri: AM7:00-PM8:00\nSat-Sun: AM8:00-PM11:00"

s2 = s.gsub('AM', '').gsub(/PM(\d+)/) do |match|
  (match.gsub('PM', '').to_i + 12).to_s
end

s2 # => "Mon-Fri: 7:00-20:00\nSat-Sun: 8:00-23:00"

答案 1 :(得分:3)

看看这个问题,ruby有一个名为datatime的类。

Convert 12 hr time to 24 hr format in Ruby