Ruby/Rails 中字符串的日期时间替换
DateTime substitution from a string in Ruby/Rails
假设我有这个字符串来自一些外部 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
) 中提取日期时间并将其转换为 EST,然后将其换回到 <strong>
标签周围的字符串?
如果字符串每次都完全相同,我会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>"
修改到满意后,您应该可以使用DateTime.strptime to parse the date you've been given and then 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(, "%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
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.")
假设我有这个字符串来自一些外部 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
) 中提取日期时间并将其转换为 EST,然后将其换回到 <strong>
标签周围的字符串?
如果字符串每次都完全相同,我会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>"
修改到满意后,您应该可以使用DateTime.strptime to parse the date you've been given and then 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(, "%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
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.")