我该如何将 Ruby 的日期转换为整数?
我该如何将 Ruby 的日期转换为整数?
t = Time.now
# => 2010-12-20 11:20:31 -0700
# Seconds since epoch
t.to_i
#=> 1292869231
require 'date'
d = Date.today
#=> #<Date: 2010-12-20 (4911101/2,0,2299161)>
epoch = Date.new(1970,1,1)
#=> #<Date: 1970-01-01 (4881175/2,0,2299161)>
d - epoch
#=> (14963/1)
# Days since epoch
(d - epoch).to_i
#=> 14963
# Seconds since epoch
d.to_time.to_i
#=> 1292828400
to_time
的相关内容:http://corelib.rubyonrails.org/classes/Date.html,直到 Ruby 1.9.2 (http://ruby-doc.org/stdlib/libdoc/date/rdoc/classes/Date.html) 才有。此时,您可以直接使用 to_i
。 - JellicleCatDate
实例而不是Time
或DateTime
,那么整数秒将永远不会每秒增加。 - Phrogz日期不能直接转换为整数。例如:
$ Date.today
=> #<Date: 2017-12-29 ((2458117j,0s,0n),+0s,2299161j)>
$ Date.today.to_i
=> NoMethodError: undefined method 'to_i' for #<Date: 2017-12-29 ((2458117j,0s,0n),+0s,2299161j)>
您的选择是将日期转换为时间,然后转换为整数,这将给您自纪元以来的秒数:
$ Date.today.to_time.to_i
=> 1514523600
或者你可以选择其他数字,比如自纪元以来的天数:
$ Date.today.to_time.to_i / (60 * 60 * 24) ### Number of seconds in a day
=> 17529 ### Number of days since epoch
jd
转换和转换为jd
。 - PelleTime.now.to_i
返回自纪元以来的秒数格式
my_date.to_time
可以将一个 Date
对象转换为一个 Time
对象。 - Phrogzto_time
方法将使用系统时区,因此您可能需要明确指定:my_date.to_time(:utc).to_i
。 - davetapleyDate#jd
将是更好的解决方案。 - Pelle针对 Ruby 1.8 及任意 DateTime
对象的解决方案:
1.8.7-p374 :001 > require 'date'
=> true
1.8.7-p374 :002 > DateTime.new(2012, 1, 15).strftime('%s')
=> "1326585600"
我非常惊讶,没有人给出我认为最正确的答案。
自Ruby 1.9.3以来,日期可以从整数转换。要获取任何日期的儒略日编号,只需使用:
> Date.today.jd
=> 2460011
> Date.jd(2460011)
=> Tue, 07 Mar 2023
最近我也遇到了这个问题,花了一些时间才解决,但是我找到了一个解决方案,希望能给你一些启示:
require 'date'
today = Date.today
year = today.year
month = today.mon
day = day.mday
year = year.to_s
month = month.to_s
day = day.to_s
if month.length <2
month = "0" + month
end
if day.length <2
day = "0" + day
end
today = year + month + day
today = today.to_i
puts today