Class: Axlsx::DateTimeConverter

Inherits:
Object
  • Object
show all
Defined in:
lib/axlsx/workbook/worksheet/date_time_converter.rb

Overview

The DateTimeConverter class converts both data and time types to their appropriate Excel serializations

Class Method Summary collapse

Class Method Details

.date_to_serial(date) ⇒ Numeric

The date_to_serial method converts Date objects to the equivalent Excel serialized forms

Parameters:

  • date (Date)

    the date to be serialized

Returns:

  • (Numeric)


11
12
13
14
15
# File 'lib/axlsx/workbook/worksheet/date_time_converter.rb', line 11

def self.date_to_serial(date)
  epoch = Axlsx::Workbook.date1904 ? Date.new(1904) : Date.new(1899, 12, 30)
  offset_date = date.respond_to?(:utc_offset) ? date + date.utc_offset.seconds : date
  (offset_date - epoch).to_f
end

.time_to_serial(time) ⇒ Numeric

The time_to_serial methond converts a Time object its Excel serialized form.

Parameters:

  • time (Time)

    the time to be serialized

Returns:

  • (Numeric)


20
21
22
23
24
25
26
27
28
# File 'lib/axlsx/workbook/worksheet/date_time_converter.rb', line 20

def self.time_to_serial(time)
  # Using hardcoded offsets here as some operating systems will not except
  # a 'negative' offset from the ruby epoch.
  epoch1900 = -2209161600.0 # Time.utc(1899, 12, 30).to_i
  epoch1904 = -2082844800.0 # Time.utc(1904, 1, 1).to_i
  seconds_per_day = 86400.0 # 60*60*24
  epoch = Axlsx::Workbook.date1904 ? epoch1904 : epoch1900
  (time.utc_offset + time.to_f - epoch) / seconds_per_day
end