Ruby: 如何将 VARIANT DATE 转换为日期时间
Ruby: how to convert VARIANT DATE to datetime
在我的项目中,我从 VARIANT DATE 类型的外部系统日期和时间获取,需要将其转换为日期时间(即 43347.6625 => 04/09/2018 16:29:59)。
你知道ruby怎么做吗?什么是最好的方法?我没有找到任何 ruby 内置方法来进行这种转换...
这里是计算的方法,你给的日期不对,应该是这个方法返回的,用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
在我的项目中,我从 VARIANT DATE 类型的外部系统日期和时间获取,需要将其转换为日期时间(即 43347.6625 => 04/09/2018 16:29:59)。
你知道ruby怎么做吗?什么是最好的方法?我没有找到任何 ruby 内置方法来进行这种转换...
这里是计算的方法,你给的日期不对,应该是这个方法返回的,用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