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



99
100
101
102
103
104
105
106
107
108
109
# File 'lib/rbCFTypes.rb', line 99

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



85
86
87
88
# File 'lib/rbCFTypes.rb', line 85

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



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

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



121
122
123
124
125
126
127
# File 'lib/rbCFTypes.rb', line 121

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



112
113
114
115
116
117
118
# File 'lib/rbCFTypes.rb', line 112

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



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

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

#to_xml(parser) ⇒ Object

convert to XML



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

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