Как сравнить метку времени Unix с ActiveSupport :: TimeWithZone? - PullRequest
1 голос
/ 14 мая 2019

У меня есть целое число метки времени Unix 1550814673, и я хочу сравнить его с:

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 ]

2 голосов
/ 14 мая 2019

Вы можете создать новый экземпляр ActiveSupport::TimeWithZone из отметки времени с помощью Time.zone.at:

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.

Вы также можете преобразовать экземпляр Time или DateTime с помощью #in_time_zone.

irb(main):014:0> Time.at(0).in_time_zone
=> Thu, 01 Jan 1970 00:00:00 UTC +00:00
0 голосов
/ 14 мая 2019

Вы можете попытаться использовать 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
0 голосов
/ 14 мая 2019

Вместо этого используйте 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 объекта для удобства сравнения.

...