Module | XSD::XSDDateTimeImpl |
In: |
lib/xsd/datatypes.rb
|
SecInDay | = | 86400 |
# File lib/xsd/datatypes.rb, line 551 551: def of2tz(offset) 552: diffmin = offset * 24 * 60 553: if diffmin.zero? 554: 'Z' 555: else 556: ((diffmin < 0) ? '-' : '+') << format('%02d:%02d', 557: (diffmin.abs / 60.0).to_i, (diffmin.abs % 60.0).to_i) 558: end 559: end
# File lib/xsd/datatypes.rb, line 561 561: def screen_data(t) 562: # convert t to a DateTime as an internal representation. 563: if t.respond_to?(:to_datetime) # 1.9 or later 564: t.to_datetime 565: elsif t.is_a?(DateTime) 566: t 567: elsif t.is_a?(Date) 568: t = screen_data_str(t) 569: t <<= 12 if t.year < 0 570: t 571: elsif t.is_a?(Time) 572: jd = DateTime.civil_to_jd(t.year, t.mon, t.mday, DateTime::ITALY) 573: fr = DateTime.time_to_day_fraction(t.hour, t.min, [t.sec, 59].min) + 574: t.usec.to_r / 1000000 / SecInDay 575: of = t.utc_offset.to_r / SecInDay 576: DateTime.new0(DateTime.jd_to_ajd(jd, fr, of), of, DateTime::ITALY) 577: else 578: screen_data_str(t) 579: end 580: end
# File lib/xsd/datatypes.rb, line 526 526: def to_date 527: Date.new0(@data.class.jd_to_ajd(@data.jd, 0, 0), 0, @data.start) 528: end
# File lib/xsd/datatypes.rb, line 498 498: def to_obj(klass) 499: if klass == Time 500: to_time 501: elsif klass == Date 502: to_date 503: elsif klass == DateTime 504: to_datetime 505: else 506: nil 507: end 508: end
# File lib/xsd/datatypes.rb, line 510 510: def to_time 511: begin 512: if @data.offset * SecInDay == Time.now.utc_offset 513: d = @data 514: usec = (d.sec_fraction * SecInDay * 1000000).round 515: Time.local(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec) 516: else 517: d = @data.newof 518: usec = (d.sec_fraction * SecInDay * 1000000).round 519: Time.gm(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec) 520: end 521: rescue ArgumentError 522: nil 523: end 524: end
# File lib/xsd/datatypes.rb, line 534 534: def tz2of(str) 535: /^(?:Z|(?:([+\-])(\d\d):(\d\d))?)$/ =~ str 536: sign = $1 537: hour = $2.to_i 538: min = $3.to_i 539: 540: of = case sign 541: when '+' 542: of = +(hour.to_r * 60 + min) / 1440 # 24 * 60 543: when '-' 544: of = -(hour.to_r * 60 + min) / 1440 # 24 * 60 545: else 546: 0 547: end 548: of 549: end