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

Methods

_set   _to_s   new   screen_data_str  

Included Modules

XSDDateTimeImpl

Constants

Type = QName.new(Namespace, TimeLiteral)

Public Class methods

[Source]

     # File lib/xsd/datatypes.rb, line 654
654:   def initialize(value = nil)
655:     init(Type, value)
656:   end

Private Instance methods

[Source]

     # File lib/xsd/datatypes.rb, line 678
678:   def _set(data)
679:     if data.nil?
680:       @data = @secfrac = nil
681:       return
682:     end
683:     @data, @secfrac = data
684:   end

[Source]

     # File lib/xsd/datatypes.rb, line 686
686:   def _to_s
687:     s = format('%02d:%02d:%02d', @data.hour, @data.min, @data.sec)
688:     if @data.sec_fraction.nonzero?
689:       if @secfrac
690:         s << ".#{ @secfrac }"
691:       else
692:         s << sprintf("%.16f",
693:           (@data.sec_fraction * SecInDay).to_f).sub(/^0/, '').sub(/0*$/, '')
694:       end
695:     end
696:     add_tz(s)
697:   end

[Source]

     # File lib/xsd/datatypes.rb, line 660
660:   def screen_data_str(t)
661:     /^(\d\d):(\d\d):(\d\d(?:\.(\d*))?)(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip
662:     unless Regexp.last_match
663:       raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
664:     end
665:     hour = $1.to_i
666:     min = $2.to_i
667:     sec = $3.to_i
668:     secfrac = $4
669:     zonestr = $5
670:     data = DateTime.civil(1, 1, 1, hour, min, sec, tz2of(zonestr))
671:     if secfrac
672:       diffday = secfrac.to_i.to_r / (10 ** secfrac.size) / SecInDay
673:       data += diffday
674:     end
675:     [data, secfrac]
676:   end

[Validate]