gpt4 book ai didi

ruby - 如何将 unix 时间戳(自纪元以来的秒数)转换为 Ruby DateTime?

转载 作者:数据小太阳 更新时间:2023-10-29 06:16:15 25 4
gpt4 key购买 nike

如何将 Unix 时间戳(自纪元以来的秒数)转换为 Ruby DateTime?

最佳答案

抱歉,短暂的突触故障。这是真正的答案。

require 'date'

Time.at(seconds_since_epoch_integer).to_datetime

简要示例(这考虑了当前系统时区):

$ date +%s
1318996912

$ irb

ruby-1.9.2-p180 :001 > require 'date'
=> true

ruby-1.9.2-p180 :002 > Time.at(1318996912).to_datetime
=> #<DateTime: 2011-10-18T23:01:52-05:00 (13261609807/5400,-5/24,2299161)>

进一步更新(针对 UTC):

ruby-1.9.2-p180 :003 > Time.at(1318996912).utc.to_datetime
=> #<DateTime: 2011-10-19T04:01:52+00:00 (13261609807/5400,0/1,2299161)>

最近更新:一两周前,我在处理 HA 服务时对该线程中的顶级解决方案进行了基准测试,我惊讶地发现 Time.at(..) 优于 DateTime.strptime(..)(更新:添加了更多基准)。

# ~ % ruby -v
# => ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin13.0]

irb(main):038:0> Benchmark.measure do
irb(main):039:1* ["1318996912", "1318496912"].each do |s|
irb(main):040:2* DateTime.strptime(s, '%s')
irb(main):041:2> end
irb(main):042:1> end

=> #<Benchmark ... @real=2.9e-05 ... @total=0.0>

irb(main):044:0> Benchmark.measure do
irb(main):045:1> [1318996912, 1318496912].each do |i|
irb(main):046:2> DateTime.strptime(i.to_s, '%s')
irb(main):047:2> end
irb(main):048:1> end

=> #<Benchmark ... @real=2.0e-05 ... @total=0.0>

irb(main):050:0* Benchmark.measure do
irb(main):051:1* ["1318996912", "1318496912"].each do |s|
irb(main):052:2* Time.at(s.to_i).to_datetime
irb(main):053:2> end
irb(main):054:1> end

=> #<Benchmark ... @real=1.5e-05 ... @total=0.0>

irb(main):056:0* Benchmark.measure do
irb(main):057:1* [1318996912, 1318496912].each do |i|
irb(main):058:2* Time.at(i).to_datetime
irb(main):059:2> end
irb(main):060:1> end

=> #<Benchmark ... @real=2.0e-05 ... @total=0.0>

关于ruby - 如何将 unix 时间戳(自纪元以来的秒数)转换为 Ruby DateTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7816365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com