我有一个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
但这并不完全相同,不会与==
运算符进行真实比较
答案 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
这也适用于其他工厂方法,例如now
,local
和parse
。
您还可以使用#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