Class XSD::XSDDateTime
In: lib/xsd/datatypes.rb
Parent: XSDAnySimpleType

Methods

_set   _to_s   new   screen_data_str  

Included Modules

XSDDateTimeImpl

Constants

Type = QName.new(Namespace, DateTimeLiteral)

Public Class methods

[Source]

     # File lib/xsd/datatypes.rb, line 591
591:   def initialize(value = nil)
592:     init(Type, value)
593:   end

Private Instance methods

[Source]

     # File lib/xsd/datatypes.rb, line 626
626:   def _set(data)
627:     if data.nil?
628:       @data = @secfrac = nil
629:       return
630:     end
631:     @data, @secfrac = data
632:   end

[Source]

     # File lib/xsd/datatypes.rb, line 634
634:   def _to_s
635:     year = (@data.year > 0) ? @data.year : @data.year - 1
636:     s = format('%.4d-%02d-%02dT%02d:%02d:%02d',
637:       year, @data.mon, @data.mday, @data.hour, @data.min, @data.sec)
638:     if @data.sec_fraction.nonzero?
639:       if @secfrac
640:         s << ".#{ @secfrac }"
641:       else
642:         s << sprintf("%.16f",
643:           (@data.sec_fraction * SecInDay).to_f).sub(/^0/, '').sub(/0*$/, '')
644:       end
645:     end
646:     add_tz(s)
647:   end

[Source]

     # File lib/xsd/datatypes.rb, line 597
597:   def screen_data_str(t)
598:     /^([+\-]?\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d(?:\.(\d*))?)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip
599:     unless Regexp.last_match
600:       raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
601:     end
602:     if $1 == '0000'
603:       raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
604:     end
605:     year = $1.to_i
606:     if year < 0
607:       year += 1
608:     end
609:     mon = $2.to_i
610:     mday = $3.to_i
611:     hour = $4.to_i
612:     min = $5.to_i
613:     sec = $6.to_i
614:     secfrac = $7
615:     zonestr = $8
616:     data = DateTime.civil(year, mon, mday, hour, min, sec, tz2of(zonestr))
617:     if secfrac
618:       diffday = secfrac.to_i.to_r / (10 ** secfrac.size) / SecInDay
619:       data += diffday
620:       # FYI: new0 and jd_to_rjd are not necessary to use if you don't have
621:       # exceptional reason.
622:     end
623:     [data, secfrac]
624:   end

[Validate]