2013-07-02 33 views
2

我不知道我做错了什么。我遵循了很多例子,我无法解决这个问题。我有以下时间的字符串:将字符串解析为DateTime对象并在Ruby中添加分钟

text_t = 1:00 PM ET

我尝试将其转换为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分钟,但我觉得这是很多工作,并且必须有一些能够提供此功能的东西。

回答

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分钟的一天的量。

+0

我仍然必须弄清楚如何格式化它,但是这是需要正确增加时间的,谢谢 – meggex

+0

您可以使用字符串插值来做到这一点。 text_next.day,text_next.hour,text_next.minute,text_next.second等,会给你你需要的。 –

+0

另一个问题已经上升。我无法将小时格式化为12小时值,它始终是24小时。我也有正确的格式。 %I不是%H,它们都返回24小时值。奇怪,我可能会把它作为另一个问题。 – meggex

0

怎么办?只要您使用的是有效支持,当然

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

从我收集积极支持是在轨道?我没有使用rails。 – meggex

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对象。

相关问题