# File xsd/datatypes.rb, line 582
def add_tz(s)
s + of2tz(@data.offset)
end
# File xsd/datatypes.rb, line 551
def of2tz(offset)
diffmin = offset * 24 * 60
if diffmin.zero?
'Z'
else
((diffmin < 0) ? '-' : '+') << format('%02d:%02d',
(diffmin.abs / 60.0).to_i, (diffmin.abs % 60.0).to_i)
end
end
# File xsd/datatypes.rb, line 561
def screen_data(t)
# convert t to a DateTime as an internal representation.
if t.respond_to?(:to_datetime) # 1.9 or later
t.to_datetime
elsif t.is_a?(DateTime)
t
elsif t.is_a?(Date)
t = screen_data_str(t)
t <<= 12 if t.year < 0
t
elsif t.is_a?(Time)
jd = DateTime.civil_to_jd(t.year, t.mon, t.mday, DateTime::ITALY)
fr = DateTime.time_to_day_fraction(t.hour, t.min, [t.sec, 59].min) +
t.usec.to_r / 1000000 / SecInDay
of = t.utc_offset.to_r / SecInDay
DateTime.new0(DateTime.jd_to_ajd(jd, fr, of), of, DateTime::ITALY)
else
screen_data_str(t)
end
end
# File xsd/datatypes.rb, line 526
def to_date
Date.new0(@data.class.jd_to_ajd(@data.jd, 0, 0), 0, @data.start)
end
# File xsd/datatypes.rb, line 498
def to_obj(klass)
if klass == Time
to_time
elsif klass == Date
to_date
elsif klass == DateTime
to_datetime
else
nil
end
end
# File xsd/datatypes.rb, line 510
def to_time
begin
if @data.offset * SecInDay == Time.now.utc_offset
d = @data
usec = (d.sec_fraction * SecInDay * 1000000).round
Time.local(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec)
else
d = @data.newof
usec = (d.sec_fraction * SecInDay * 1000000).round
Time.gm(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec)
end
rescue ArgumentError
nil
end
end
# File xsd/datatypes.rb, line 534
def tz2of(str)
/^(?:Z|(?:([+\-])(\d\d):(\d\d))?)$/ =~ str
sign = $1
hour = $2.to_i
min = $3.to_i
of = case sign
when '+'
of = +(hour.to_r * 60 + min) / 1440 # 24 * 60
when '-'
of = -(hour.to_r * 60 + min) / 1440 # 24 * 60
else
0
end
of
end
Commenting is here to help enhance the documentation. For example, sample code, or clarification of the documentation.
If you are posting code samples in your comments, please wrap them in "<pre><code class="ruby" > ... </code></pre>" markup in order to get syntax highlighting.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file a bug report so that it can be corrected for the next release. Thank you.