Class: Roo::Excelx::Cell::DateTime

Inherits:
Base
  • Object
show all
Defined in:
lib/roo/excelx/cell/datetime.rb

Direct Known Subclasses

Date, Time

Instance Attribute Summary collapse

Attributes inherited from Base

#cell_type, #style

Instance Method Summary collapse

Methods inherited from Base

#empty?, #excelx_type, #excelx_value, #formula?, #hyperlink, #link?, #to_s, #type

Constructor Details

#initialize(value, formula, excelx_type, style, link, base_date, coordinate) ⇒ DateTime

Returns a new instance of DateTime.


9
10
11
12
13
14
# File 'lib/roo/excelx/cell/datetime.rb', line 9

def initialize(value, formula, excelx_type, style, link, base_date, coordinate)
  super(value, formula, excelx_type, style, link, coordinate)
  @type = :datetime
  @format = excelx_type.last
  @value = link? ? Roo::Link.new(link, value) : create_datetime(base_date, value)
end

Instance Attribute Details

#cell_valueObject (readonly)

Returns the value of attribute cell_value


7
8
9
# File 'lib/roo/excelx/cell/datetime.rb', line 7

def cell_value
  @cell_value
end

#coordinateObject (readonly)

Returns the value of attribute coordinate


7
8
9
# File 'lib/roo/excelx/cell/datetime.rb', line 7

def coordinate
  @coordinate
end

#formatObject (readonly)

Returns the value of attribute format


7
8
9
# File 'lib/roo/excelx/cell/datetime.rb', line 7

def format
  @format
end

#formulaObject (readonly)

Returns the value of attribute formula


7
8
9
# File 'lib/roo/excelx/cell/datetime.rb', line 7

def formula
  @formula
end

Returns the value of attribute link


7
8
9
# File 'lib/roo/excelx/cell/datetime.rb', line 7

def link
  @link
end

#valueObject (readonly)

Returns the value of attribute value


7
8
9
# File 'lib/roo/excelx/cell/datetime.rb', line 7

def value
  @value
end

Instance Method Details

#formatted_valueObject

Public: Returns formatted value for a datetime. Format's can be an

standard excel format, or a custom format.

Standard formats follow certain conventions. Date fields for
days, months, and years are separated with hyhens or
slashes ("-", /") (e.g. 01-JAN, 1/13/15). Time fields for
hours, minutes, and seconds are separated with a colon (e.g.
12:45:01).

If a custom format follows those conventions, then the custom
format will be used for the a cell's formatted value.
Otherwise, the formatted value will be in the following
format: 'YYYY-mm-dd HH:MM:SS' (e.g. "2015-07-10 20:33:15").

Examples

formatted_value #=> '01-JAN'

Returns a String representation of a cell's value.


34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/roo/excelx/cell/datetime.rb', line 34

def formatted_value
  date_regex = /(?<date>[dmy]+[\-\/][dmy]+([\-\/][dmy]+)?)/
  time_regex = /(?<time>(\[?[h]\]?+:)?[m]+(:?ss|:?s)?)/

  formatter = @format.downcase.split(' ').map do |part|
    if part[date_regex] == part
      part.gsub(/#{DATE_FORMATS.keys.join('|')}/, DATE_FORMATS)
    elsif part[time_regex]
      part.gsub(/#{TIME_FORMATS.keys.join('|')}/, TIME_FORMATS)
    else
      warn 'Unable to parse custom format. Using "YYYY-mm-dd HH:MM:SS" format.'
      return @value.strftime('%F %T')
    end
  end.join(' ')

  @value.strftime(formatter)
end