提问人:Akash Kinwad 提问时间:2/20/2023 更新时间:2/21/2023 访问量:55
红宝石 .past?日期方法在具有 UTC 时区的印度 AWS 服务器的 IST 时区中给出错误结果
Ruby .past? method on date is giving wrong result in IST timezone for AWS server in India with UTC timezone
问:
我使用该方法来检查日期是否已过日期。
我使用 AWS EC2 服务器,然后在印度区域。.past?
对于凌晨 12 点到凌晨 5.30 点之间的印度时间,如果我们将 IST 时区时间转换为 UTC 并调用该方法,它将返回 true。.past?
time = "2023-02-07 02:24:59 +0530"
DateTime.parse(time).utc.to_date.past?
#It is returning true whereas it should return false
服务器时区为 UTC
知道这里出了什么问题吗?
答:
1赞
max
2/21/2023
#1
如果检查定义,它只是定义为:
# Returns true if the date/time is in the past.
def past?
self < self.class.current
end
current
当 或 被设置时返回,否则只返回 .Time.zone.now
Time.zone
config.time_zone
Time.now
这会导致一个真正的问题,因为您将 UTC 中的某个时间与另一个时区的当前时间进行比较,并且没有考虑 TZ。<
如果您想进行比较并避免此问题,请确保两个操作数都在同一个 TZ 中:
date = DateTime.parse(time).utc.to_date
date < Time.now.utc
评论
to_date
to_time
to_date
to_time
DateTime.parse(time).utc.to_date #=> Mon, 06 Feb 2023
与。DateTime.parse(time).to_date #=> Tue, 07 Feb 2023