将Time.zone.now转换为编号OLE

时间:2017-08-18 20:21:21

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 rubygems

我需要将DateTime转换为OLE,实际上我有这个代码

  def self.convert_time(t=42941.6102054745)
    Time.at((t - 25569) * 86400).utc
  end

但现在转换为DateTime我想要这个解决方案:

def self.date_time_ole(dt= Time.zone.now)
# her convert to number ole from datetime
end
你可以帮我吗?

1 个答案:

答案 0 :(得分:0)

Ruby的Date类减法返回两个日期之间的天数,所以你只需要从另一个日期减去你的“自定义纪元”(1899年12月30日午夜):

ole_epoch = DateTime.new(1899, 12, 30, 0, 0, 0)
now = DateTime.now # => 2017-08-18 21:03:28 UTC
(now - ole_epoch).to_f # => 42965.87741847492

这应该是OLE,您也可以将其添加到其他方式:

ole_epoch + 42965.87741847492 # => Fri, 18 Aug 2017 21:03:28 +0000