Module: XSD::XSDDateTimeImpl
- Included in:
- XSDDate, XSDDateTime, XSDGDay, XSDGMonth, XSDGMonthDay, XSDGYear, XSDGYearMonth, XSDTime
- Defined in:
- lib/xsd/datatypes.rb
Constant Summary collapse
- SecInMicro =
1 second = 1 million microseconds
1000000
- DayInSec =
24 Hours/Day * 60 Minutes/Hour * 60 Seconds/Minute
86400
- DayInMicro =
(DayInSec * SecInMicro)
Instance Method Summary collapse
- #add_tz(s) ⇒ Object
- #of2tz(offset) ⇒ Object
- #screen_data(t) ⇒ Object
- #to_date ⇒ Object
- #to_datetime ⇒ Object
- #to_obj(klass) ⇒ Object
- #to_time ⇒ Object
- #tz2of(str) ⇒ Object
Instance Method Details
#add_tz(s) ⇒ Object
596 597 598 |
# File 'lib/xsd/datatypes.rb', line 596 def add_tz(s) s + of2tz(@data.offset) end |
#of2tz(offset) ⇒ Object
566 567 568 569 570 571 572 573 574 |
# File 'lib/xsd/datatypes.rb', line 566 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 |
#screen_data(t) ⇒ Object
576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 |
# File 'lib/xsd/datatypes.rb', line 576 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.send(:civil_to_jd, t.year, t.mon, t.mday, DateTime::ITALY) fr = DateTime.send(:time_to_day_fraction, t.hour, t.min, [t.sec, 59].min) + t.usec.to_r / DayInMicro of = t.utc_offset.to_r / DayInSec DateTime.new!(DateTime.send(:jd_to_ajd, jd, fr, of), of, DateTime::ITALY) else screen_data_str(t) end end |
#to_date ⇒ Object
541 542 543 |
# File 'lib/xsd/datatypes.rb', line 541 def to_date @data.respond_to?(:to_date) ? @data.to_date : Date.new!(@data.class.send(:jd_to_ajd, @data.jd, 0, 0), 0, @data.start) end |
#to_datetime ⇒ Object
545 546 547 |
# File 'lib/xsd/datatypes.rb', line 545 def to_datetime data end |
#to_obj(klass) ⇒ Object
513 514 515 516 517 518 519 520 521 522 523 |
# File 'lib/xsd/datatypes.rb', line 513 def to_obj(klass) if klass == Time to_time elsif klass == Date to_date elsif klass == DateTime to_datetime else nil end end |
#to_time ⇒ Object
525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 |
# File 'lib/xsd/datatypes.rb', line 525 def to_time begin if @data.offset * DayInSec == Time.now.utc_offset d = @data usec = (RUBY_VERSION.to_f >= 1.9) ? (d.sec_fraction * SecInMicro).to_i : (d.sec_fraction * DayInMicro).round Time.local(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec) else d = @data.newof usec = (RUBY_VERSION.to_f >= 1.9) ? (d.sec_fraction * SecInMicro).to_i : (d.sec_fraction * DayInMicro).round Time.gm(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec) end rescue ArgumentError nil end end |
#tz2of(str) ⇒ Object
549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 |
# File 'lib/xsd/datatypes.rb', line 549 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 |