class Vcard::V3_0::PropertyValue::DateTimeLocal

Public Class Methods

new(val) click to toggle source
# File lib/vobject/vcard/v3_0/propertyvalue.rb, line 186
def initialize(val)
  self.value = val.clone
  # val consists of :time && :zone values. If :zone is empty, floating local time (i.e. system local time) is assumed
  self.type = "datetimelocal"
  val[:sec] += (val[:secfrac].to_f / (10**val[:secfrac].length)) if !val[:secfrac].nil? && !val[:secfrac].empty?
  value[:time] = if val[:zone].nil? || val[:zone].empty?
                   ::Time.local(val[:year], val[:month], val[:day], val[:hour], val[:min], val[:sec])
                 else
                   ::Time.utc(val[:year], val[:month], val[:day], val[:hour], val[:min], val[:sec])
                 end
  value[:origtime] = value[:time]
  if val[:zone] && val[:zone] != "Z"
    offset = val[:zone][:hour].to_i * 3600 + val[:zone][:min].to_i * 60
    offset += val[:zone][:sec].to_i if val[:zone][:sec]
    offset = -offset if val[:sign] == "-"
    value[:time] += offset.to_i
  end
end

Public Instance Methods

<=>(another) click to toggle source
# File lib/vobject/vcard/v3_0/propertyvalue.rb, line 182
def <=>(another)
  value[:time] <=> another.value[:time]
end
to_hash() click to toggle source
# File lib/vobject/vcard/v3_0/propertyvalue.rb, line 215
def to_hash
  ret = {
    year: value[:year],
    month: value[:month],
    day: value[:day],
    hour: value[:hour],
    min: value[:min],
    sec: value[:sec],
  }
  ret[:zone] = value[:zone] if value[:zone]
  ret
end
to_s() click to toggle source
# File lib/vobject/vcard/v3_0/propertyvalue.rb, line 205
def to_s
  # ret = sprintf("%04d-%02d-%02dT%02d:%02d:%02d", value[:year], value[:month], value[:day], value[:hour], value[:min], value[:sec])
  ret = sprintf("%s-%s-%sT%s:%s:%s", value[:year], value[:month], value[:day], value[:hour], value[:min], value[:sec])
  ret = ret + ",#{value[:secfrac]}" if value[:secfrac]
  zone = "Z" if value[:zone] && value[:zone] == "Z"
  zone = "#{value[:zone][:sign]}#{value[:zone][:hour]}:#{value[:zone][:min]}" if value[:zone] && value[:zone].is_a?(Hash)
  ret = ret + zone
  ret
end