使用Ruby格式化DateTime问题

时间:2013-07-02 18:47:26

标签: ruby datetime datetime-format

我有一个包含时间的字符串

text_t = 2:00 PM ET

我试图将其解析为DateTime对象:

text_next = DateTime.strptime(text_t, '%I:%M %p %Z')

然而,当我打印出来时,它正在给我:

2013-07-02T14:00:00+00:00

根据此页面:

http://www.tutorialspoint.com/ruby/ruby_date_time.htm

应该以12小时格式给我一小时。但事实并非如此。 %H仍然给我24小时制。我需要一个12小时的时钟,并且必须能够获得AM-PM值。

2 个答案:

答案 0 :(得分:2)

require 'date'

text_t = '2:00 PM ET'
dt = DateTime.parse(text_t) 
# => #<DateTime: 2013-07-03T14:00:00+00:00 ((2456477j,50400s,0n),+0s,2299161j)>
dt.strftime('%r') # => "02:00:00 PM"

text_t = '2:12:03 PM ET'
dt = DateTime.parse(text_t) 
# => #<DateTime: 2013-07-03T14:12:03+00:00 ((2456477j,51123s,0n),+0s,2299161j)>
dt.strftime('%r') # => "02:12:03 PM"

答案 1 :(得分:1)

您可以使用以下方式获取相同的格式:

require 'date'

text_t = '2:00 PM ET'
text_next = DateTime.strptime(text_t, '%I:%M %p %Z')

text_next.strftime("%-l:%M %p #{text_t.split.last}")
#=> "2:00 PM ET"

请注意strftime

  • %-l用于获取没有任何填充的小时。
  • text_t.split.last用于获取原始的缩短时区,因为“ET”不是标准的消除。