class ReadXls::Evaluator::FormatNumber
Constants
- SECONDS_IN_DAY
Attributes
extended_format[RW]
number[RW]
Public Class Methods
new(number, extended_format)
click to toggle source
# File lib/read_xls/evaluator/format_number.rb, line 8 def initialize(number, extended_format) self.number = BigDecimal.new(number.to_s) self.extended_format = extended_format end
Public Instance Methods
evaluate()
click to toggle source
# File lib/read_xls/evaluator/format_number.rb, line 13 def evaluate return number unless extended_format case extended_format.format_type when :date days_since_datemode = number.to_i inner_day_fraction = number.frac date = build_date(days_since_datemode) if inner_day_fraction == 0 date else build_time(date, inner_day_fraction) end else number end end
Private Instance Methods
build_date(days_since_datemode)
click to toggle source
# File lib/read_xls/evaluator/format_number.rb, line 36 def build_date(days_since_datemode) Date.new(1899, 12, 30) + days_since_datemode end
build_time(date, inner_day_fraction)
click to toggle source
# File lib/read_xls/evaluator/format_number.rb, line 41 def build_time(date, inner_day_fraction) time = Time.parse("#{date.year}-#{date.month}-#{date.day}T00:00:00Z") time + (inner_day_fraction * SECONDS_IN_DAY).round(0) end