如何将unix时间戳与ActiveSupport :: TimeWithZone进行比较?

时间:2019-05-14 14:10:21

标签: ruby-on-rails datetime activerecord time activesupport

我有一个1550814673的unix时间戳整数,我想将其与以下内容进行比较:

Record.first.created_at
=> Fri, 22 Feb 2019 05:51:13 UTC +00:00
Record.first.created_at.class
=> ActiveSupport::TimeWithZone

我尝试使用此方法将整数转换为日期时间:

Time.at(1550814673).utc.to_datetime
=> Fri, 22 Feb 2019 05:51:13 +0000

但这并不完全相同,不会与==运算符进行真实比较

3 个答案:

答案 0 :(得分:2)

您可以使用Time.zone.at通过时间戳创建新的ActiveSupport::TimeWithZone实例:

irb(main):015:0> Time.zone.at(0)
=> Thu, 01 Jan 1970 00:00:00 UTC +00:00
irb(main):019:0> Time.zone.at(0).class
=> ActiveSupport::TimeWithZone

这也适用于其他工厂方法,例如nowlocalparse

您还可以使用#in_time_zone转换Time或DateTime实例。

irb(main):014:0> Time.at(0).in_time_zone
=> Thu, 01 Jan 1970 00:00:00 UTC +00:00

答案 1 :(得分:0)

改为使用DateTime

DateTime.strptime("1318996912",'%s')

=> Wed, 19 Oct 2011 04:01:52 +0000

应该返回易于消化的内容,然后您可以轻松地做到这一点:

DateTime.parse("#{Record.first.created_at}") == DateTime.strptime("1318996912",'%s')

=> true

DateTime.parse会自动将TimeWithZone字符串转换为DateTime对象,以便于比较。

答案 2 :(得分:0)

您可以尝试一次使用to_i,它应该会为您提供一些可以使用的东西

date = Date.today
=> Tue, 14 May 2019
date.to_time.to_i
=> 1557784800
Time.at(1557784800)
=> 2019-05-14 00:00:00 +0200