在Ruby中将12小时制时间转换为24小时制

12

如何将“上午11点”和“晚上10点”转换为“11:00”和“22:00”? 是否可以使用日期和时间类的简单方法进行转换?

4个回答

27
我首先会使用Time#strptime解析字符串,然后使用Time#strftime输出。这样可以确保与您原来的格式进行严格匹配。
require 'time'
Time.strptime("10pm", "%I%P").strftime("%H:%M")
=> "22:00"

+1 为 "require 'time'" 而欢呼,它还会向 Time 类添加一个 parse 方法(如果不需要严格性的话)。 - steenslag

13

Time类没有解析方法,但DateTime有。

require 'date'
DateTime.parse("11pm").strftime("%H:%M") #=> "23:00"

1
太好了!我之前错误地执行了DateTime.parse("11pm").to_time.strftime("%H:%M")。谢谢! - paniwani

3

你的问题不够清晰,但看起来你有一个字符串 "10pm",需要 (1) 将其捕获为时间,然后 (2) 以24小时格式表示该时间。我会这样做。首先,gem install chronic,然后编写如下脚本:

require 'chronic'
t = Chronic.parse('10pm')
p t.strftime("%H:%M")

返回"22:00"

0
你是想要显示11am和10pm,然后能够显示11:00和22:00,还是想要如何显示11:00和22:00而不是11am和10pm?
如果是第二个问题:
%H - 一天中的小时数,24小时制(00到23)。
#!/usr/bin/ruby -w
time = Time.new

puts time.to_s
puts time.ctime
puts time.localtime
puts time.strftime("%H:%M")

如果这是第一个问题,请告诉:

%I 小时(01到12),12小时制。

#!/usr/bin/ruby -w
time = Time.new
timeSwitch = 1

if (timeSwitch == 1)
    puts time.strftime("%H:%M")
else 
    puts time.strftime("%I:%M")
end

对不起,我混淆了Perl和Ruby的语法。


我在strftime()中看到了%H和%I标志。我不是想格式化当前时间。我有一个包含'10pm'的字符串,我想将其转换为'22:00'。感谢您的快速回复。 - paniwani
只需执行 time_string + 12 = convertedTime,因此 time = 10 时,输出 time + 12 = 22 - John Riselvato

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接