我有两个日期:一个在'UTC',另一个在'America / Los_Angeles'。我如何比较这两个忽略他们的时区差异,即我想检查他们的年,月,日,小时......是否彼此相等?
local_date_string = '2014-09-19T09:00:00'
local_date = local_date_string.to_datetime
time_zone_name = 'America/Los_Angeles'
timezone = ActiveSupport::TimeZone[time_zone_name]
date_with_zone = ActiveSupport::TimeWithZone.new(nil, timezone, local_date)
date_utc = date_with_zone.utc
local_date_with_zone_from_utc = date_utc.in_time_zone(timezone)
puts local_date.hour => 9
puts local_date_with_zone_from_utc.hour => 9
how to compare_ignoring_tz_diff(local_date, local_date_with_zone_from_utc) ?
答案 0 :(得分:2)
听起来您正在寻找time
中的ActiveSupport::TimeWithZone
方法。这将返回一个Time
对象,其时区为+0000,但所有组件(小时,分钟,日)等都保持不变。
如果您有两次带区域,请在两者上调用它并比较结果,即
def compare_without_tz(first, second)
first.time == second.time
end
这假设两个参数都是ActiveSupport::TimeWithZone
- 如果您还希望能够传递Time
,DateTime
的正常实例,那么您需要首先检查其类型是否为{{1}}