Convert String to date of specific timezone
我需要在特定时区将字符串转换为日期。
例如。
1 2 3 4 5 6 7 | from ="June 13, 2015" Date.strptime(from,"%b %d, %Y") #=> Sat, 13 Jun 2015 Date.strptime(from.strip,"%b %d, %Y").in_time_zone("America/Chicago") #=> Sat, 13 Jun 2015 00:00:00 CDT -05:00 which is ActiveSupport::TimeWithZone format Date.strptime(from,"%b %d, %Y").in_time_zone("America/Chicago").to_date #=>Sat, 13 Jun 2015 which is in UTC Date class |
我需要在美国/芝加哥时区的最后日期。 我怎样才能做到这一点?
我需要在期望的时区中获得日期而不是在期望的时区中的时间。
Time.now.in_time_zone("东部时间(美国和加拿大)")将提供ActiveSupport :: TimeWithZone格式,而我需要所需时区的日期格式。
使用DateTime:
1 2 3 4 | from ="June 13, 2015" DateTime.strptime(from,"%b %d, %Y").in_time_zone("America/Chicago") => Fri, 12 Jun 2015 19:00:00 CDT -05:00 |
请注意,它显示的是19:00的时间。 那是因为没有指定时间所以它认为你指的是00:00 UTC,即CDT 19:00
实现您想要做的事情的一种方法是:
1 2 | Date.strptime(from.strip,"%b %d, %Y").in_time_zone("America/Chicago").to_datetime => Sat, 13 Jun 2015 00:00:00 -0500 |
这会在该日期的午夜为您提供DateTime对象。 如果需要,您可以根据当天的某个时间添加时间。
1 2 3 4 5 6 7 8 | my_date = Date.strptime(from.strip,"%b %d, %Y").in_time_zone("America/Chicago").to_datetime => Sat, 13 Jun 2015 00:00:00 -0500 my_date.in_time_zone("UTC") => Sat, 13 Jun 2015 05:00:00 UTC +00:00 my_date + 8.hours => Sat, 13 Jun 2015 08:00:00 -0500 |