Class: CFPropertyList::CFDate

Inherits:
CFType
  • Object
show all
Defined in:
lib/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



106
107
108
109
110
111
112
113
114
115
116
# File 'lib/rbCFTypes.rb', line 106

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



92
93
94
95
# File 'lib/rbCFTypes.rb', line 92

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



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

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



128
129
130
131
132
133
134
# File 'lib/rbCFTypes.rb', line 128

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



119
120
121
122
123
124
125
# File 'lib/rbCFTypes.rb', line 119

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



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

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

#to_xml(parser) ⇒ Object

convert to XML



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

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