Array
(
[0] => Array
(
[user_id] => 57d67290823fb647dd174739
)
[1] => Array
(
[user_id] => 57d672cb823fb647dd17473a
)
[2] => Array
(
[user_id] => 57d67549d81e1845e4dba983
)
)
我希望获得> input = "12/31/2015 23:59"
> format = "%m/%d/%Y %H:%M"
> Time.zone = "US/Eastern"
> Time.zone.utc_offset
=> -18000
> Time.strptime(input, format)
=> 2015-12-31 23:59:00 +0100
> DateTime.strptime(input, format)
=> Thu, 31 Dec 2015 23:59:00 +0000
正如您所看到的,strptime的两个版本都忽略了配置的时区(一个使用UTC,一个使用系统/机器时区)。
如何在2015-12-31 23:59:00 -0500
中自定义格式解析给定输入?
答案 0 :(得分:0)
一种解决方案是将解析时间转换为ISO字符串,删除不正确的时区信息并再次解析,这次使用Time.zone.parse使用Time.zone:
> parsed = Time.strptime(input, "%m/%d/%Y %H:%M")
> Time.zone.parse(parsed.to_s.gsub(/\+\d\d:?\d\d/, ""))
=> 2015-12-31 23:59:00 -0500
一种解决方案是将解析时间转换为ISO字符串,删除不正确的时区信息并再次解析,这次使用Time.zone.parse使用Time.zone:
> parsed = Time.strptime(input, "%m/%d/%Y %H:%M")
> Time.zone.parse(parsed.to_s.gsub(/\+\d\d:?\d\d/, ""))
=> 2015-12-31 23:59:00 -0500
还可以将时区附加到输入(和格式):
> DateTime.strptime(input + Time.zone.name, format + " %Z")
=> Thu, 31 Dec 2015 23:59:00 -0500
这两种解决方案看起来都像是一种hackish,我希望更优雅。