这是比较两个日期而不考虑其时区差异的最佳方法



我有两个日期:一个在'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) ?

听起来你正在寻找ActiveSupport::TimeWithZonetime方法。这将返回一个Time对象,其时区为+0000,但所有组件(小时,分钟,日)等不变。

如果你有两个时区,然后调用这两个,并比较结果

def compare_without_tz(first, second)
  first.time == second.time
end

这假设两个参数都是ActiveSupport::TimeWithZone -如果您还希望能够传递Time, DateTime的正常实例,那么您需要检查它们的类型是否首先

相关内容

  • 没有找到相关文章

最新更新