将字符串解析为DateTime对象并在Ruby中添加分钟

时间:2013-07-02 17:30:15

标签: ruby datetime

我不知道我做错了什么。我已经遵循了许多例子,我无法解决这个问题。我有一个字符串,包含以下时间:

text_t =东部时间下午1:00

我尝试将其转换为DateTime对象,因此我可以使用以下代码轻松地向该值添加30分钟:

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

但我的输出如下所示:

1:00 PM ET
2013-07-02T13:00:00+00:00
2018-06-06T13:00:00+00:00

我需要将时间增加30分钟,然后将其转换回字符串,格式与它相同。我可以创建一个函数来操作字符串,提前30分钟,但我觉得这很多工作,必须有一些东西,提供这种功能。

3 个答案:

答案 0 :(得分:4)

您要在约会中添加1800天。

我试过了:

text_next = DateTime.strptime(text_t, '%I:%M %p %Z')
puts text_next
text_next = text_next + Rational(30, 1440)
puts text_next
1440是一天中的分钟数。

答案 1 :(得分:0)

怎么样?只要你当然使用activesupport

text_t = "1:00 PM ET"
text_next = DateTime.strptime(text_t, '%I:%M %p %Z')
text_next = text_next + 30.minutes

答案 2 :(得分:0)

以下是我将遵循的方法:

require 'date'

text_t = '2:12:03 PM ET'
dt = DateTime.parse(text_t, '%I:%M %p %Z')
# => #<DateTime: 2013-07-03T14:12:03+00:00 ((2456477j,51123s,0n),+0s,2299161j)>
dt.to_s
# => "2013-07-03T14:12:03+00:00" # !> invalid offset is ignored
dh = Date._strptime(dt.to_s,'%Y-%m-%dT%H:%M:%S%z')
# => {:year=>2013,
#     :mon=>7,
#     :mday=>3,
#     :hour=>14,
#     :min=>12,
#     :sec=>3,
#     :zone=>"+00:00",
#     :offset=>0}

dh[:hour] += 30 # => 44
dh
# => {:year=>2013,
#     :mon=>7,
#     :mday=>3,
#     :hour=>44,
#     :min=>12,
#     :sec=>3,
#     :zone=>"+00:00",
#     :offset=>0}

dh.values[0..-2].join(" ")
# => "2013 7 3 44 12 3 +00:00"
DateTime.ordinal(*dh.values[0..-3])
# => #<DateTime: 2013-01-07T03:44:12+00:00 ((2456300j,13452s,0n),+0s,2299161j)>

现在您可以选择如何查看Date对象。