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



94
95
96
97
98
99
100
101
102
103
104
# File 'lib/rbCFTypes.rb', line 94

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



80
81
82
83
# File 'lib/rbCFTypes.rb', line 80

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



86
87
88
89
90
91
# File 'lib/rbCFTypes.rb', line 86

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



116
117
118
119
120
121
122
# File 'lib/rbCFTypes.rb', line 116

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



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

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



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

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

#to_xmlObject

convert to XML



125
126
127
# File 'lib/rbCFTypes.rb', line 125

def to_xml
  LibXML::XML::Node.new('date') << LibXML::XML::Node.new_text(CFDate::date_string(@value))
end