我不知道我做错了什么。我已经遵循了许多例子,我无法解决这个问题。我有一个字符串,包含以下时间:
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分钟,但我觉得这很多工作,必须有一些东西,提供这种功能。
答案 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
对象。