Class: Vcard::V3_0::PropertyValue::DateTimeLocal

Inherits:
Vobject::PropertyValue show all
Includes:
Comparable
Defined in:
lib/vobject/vcard/v3_0/propertyvalue.rb

Instance Attribute Summary

Attributes inherited from Vobject::PropertyValue

#errors, #norm, #type, #value

Instance Method Summary collapse

Methods inherited from Vobject::PropertyValue

#name, #to_norm

Constructor Details

#initialize(val) ⇒ DateTimeLocal

Returns a new instance of DateTimeLocal.



186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
# 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

Instance Method Details

#<=>(another) ⇒ Object



182
183
184
# File 'lib/vobject/vcard/v3_0/propertyvalue.rb', line 182

def <=>(another)
  value[:time] <=> another.value[:time]
end

#to_hashObject



215
216
217
218
219
220
221
222
223
224
225
226
# 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_sObject



205
206
207
208
209
210
211
212
213
# 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