Class: CFPropertyList::CFDate

Inherits:
CFType
  • Object
show all
Defined in:
lib/cfpropertylist/rbCFTypes.rb

Overview

This class holds Time values. While Apple uses seconds since 2001, the rest of the world uses seconds since 1970. So if you access value directly, you get the Time class. If you access via get_value you either geht the timestamp or the Apple timestamp

Constant Summary collapse

TIMESTAMP_APPLE =
0
TIMESTAMP_UNIX =
1
DATE_DIFF_APPLE_UNIX =
978307200

Instance Attribute Summary

Attributes inherited from CFType

#value

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(value = nil, format = CFDate::TIMESTAMP_UNIX) ⇒ CFDate

set value to defined state



113
114
115
116
117
118
119
120
121
122
123
# File 'lib/cfpropertylist/rbCFTypes.rb', line 113

def initialize(value = nil,format=CFDate::TIMESTAMP_UNIX)
  if(value.is_a?(Time) || value.nil?) then
    @value = value.nil? ? Time.now : value
  elsif value.instance_of? Date
    @value = Time.utc(value.year, value.month, value.day, 0, 0, 0)
  elsif value.instance_of? DateTime
    @value = value.to_time.utc
  else
    set_value(value,format)
  end
end

Class Method Details

.date_string(val) ⇒ Object

create a XML date strimg from a time object



99
100
101
102
# File 'lib/cfpropertylist/rbCFTypes.rb', line 99

def CFDate.date_string(val)
  # 2009-05-13T20:23:43Z
  val.getutc.strftime("%Y-%m-%dT%H:%M:%SZ")
end

.parse_date(val) ⇒ Object

parse a XML date string



105
106
107
108
109
110
# File 'lib/cfpropertylist/rbCFTypes.rb', line 105

def CFDate.parse_date(val)
  # 2009-05-13T20:23:43Z
  val =~ %r{^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$}
  year,month,day,hour,min,sec = $1, $2, $3, $4, $5, $6
  return Time.utc(year,month,day,hour,min,sec).getlocal
end

Instance Method Details

#get_value(format = CFDate::TIMESTAMP_UNIX) ⇒ Object

get timestamp, either UNIX or Apple timestamp



135
136
137
138
139
140
141
# File 'lib/cfpropertylist/rbCFTypes.rb', line 135

def get_value(format=CFDate::TIMESTAMP_UNIX)
  if(format == CFDate::TIMESTAMP_UNIX) then
    @value.to_i
  else
    @value.to_f - CFDate::DATE_DIFF_APPLE_UNIX
  end
end

#set_value(value, format = CFDate::TIMESTAMP_UNIX) ⇒ Object

set value with timestamp, either Apple or UNIX



126
127
128
129
130
131
132
# File 'lib/cfpropertylist/rbCFTypes.rb', line 126

def set_value(value,format=CFDate::TIMESTAMP_UNIX)
  if(format == CFDate::TIMESTAMP_UNIX) then
    @value = Time.at(value)
  else
    @value = Time.at(value + CFDate::DATE_DIFF_APPLE_UNIX)
  end
end

#to_binary(bplist) ⇒ Object

convert to binary



151
152
153
# File 'lib/cfpropertylist/rbCFTypes.rb', line 151

def to_binary(bplist)
  bplist.date_to_binary(@value)
end

#to_xml(parser) ⇒ Object

convert to XML



144
145
146
147
148
# File 'lib/cfpropertylist/rbCFTypes.rb', line 144

def to_xml(parser)
  n = parser.new_node('date')
  n = parser.append_node(n, parser.new_text(CFDate::date_string(@value)))
  n
end