想象一下,我的这个字符串来自一些外部api。字符串格式始终相同,包括HTML标记和所有内容。
"<p>The update time is <strong>Tuesday 04/28/15 08:30 AM PDT</strong>, please disregard the old timing.</p>"
如何从字符串(Tuesday 04/28/15 08:30 AM PDT
)中提取DateTime并将其转换为EST,然后将其换回到<strong>
标记周围的字符串?
答案 0 :(得分:3)
如果字符串每次都完全相同,我只会gsub
输出您不想要的字符串部分。
string_from_api.gsub!(/(.*<strong>|<\/strong>.*)/, '')
然后像这样使用strptime
:
date_time = DateTime.strptime(string_from_api, "%A %m/%d/%y %I:%M %p %Z")
(我最喜欢的strftime资源。)
然后,假设您正在使用Rails,您可以使用
更改时区est_time = date_time.in_time_zone('EST')
然后你只需将它们全部重新组合在一起:
time_formatted = est_time.strftime("%A %m/%d/%y %I:%M %p %Z")
"<p>The update time is <strong>#{time_formatted}</strong></p>"
答案 1 :(得分:2)
def convert_time_message(message)
regex = /<strong\>(.*?)\<\/strong>/
time_format = '%a %m/%d/%y %H:%M %p %Z'
parsed_time = DateTime.strptime(message.match(regex)[1], time_format)
converted_time = parsed_time.in_time_zone('EST')
message.gsub(regex, "<strong>#{converted_time.strftime(time_format)}</strong>")
end
convert_time_message("<p>The update time is <strong>Tuesday 04/28/15 08:30 AM PDT</strong>, please disregard the old timing.")
答案 2 :(得分:0)
您应该能够使用DateTime.strptime来解析您已经获得的日期,然后DateTime.strftime在您将其修改为满意后再次输出它。类似的东西:
s = "<p>The update time is <strong>Tuesday 04/28/15 08:30 AM PDT</strong>, please disregard the old timing."
s.sub(/<strong>(.*)<\/strong>/) do |s|
# Parse the date in between the <strong> tags
in_date = DateTime.strptime($1, "%A %m/%d/%y %I:%M %p %Z")
edt_time = in_date + 3.hours
"<strong>#{edt_time.strftime("%A %m/%d/%y %I:%M %p EDT")}</strong>"
end