Ruby: как конвертировать VARIANT DATE в datetime - PullRequest
0 голосов
/ 19 сентября 2018

В моем проекте я извлекаю дату и время из внешней системы в виде VARIANT DATE и мне нужно преобразовать ее в datetime (т. Е. 43347.6625 => 04/09/2018 16:29:59).

Знаете ли вы, каксделать это в рубине?какой подход лучше?Я не нашел никакого встроенного метода ruby ​​для такого преобразования ...

1 Ответ

0 голосов
/ 19 сентября 2018

здесь метод для расчета, указанная вами дата не верна, она должна быть тем, что возвращает этот метод, проверьте с помощью https://planetcalc.com/7027/

def variant2datetime variant
  # number of days after 1-1-1900 minus 2 days for starting with 0
  # and having a day that didn't exist because 1900 wasn't a leap year
  date = Time.new("1900-01-01") + (variant.to_i - 2) * 24 * 60 * 60
  fraction = variant % 1
  hours   = (fraction - fraction.to_i) * 24
  minutes = (hours - hours.to_i) * 60
  seconds = (minutes - minutes.to_i) * 60
  Time.new(date.year, date.month, date.day, hours.to_i, minutes.to_i, seconds.to_i)
end

variant2datetime 43347.6625 # 2018-09-04 15:53:59 +0200
...