| Class | XSD::XSDTime |
| In: |
lib/xsd/datatypes.rb
|
| Parent: | XSDAnySimpleType |
| Type | = | QName.new(Namespace, TimeLiteral) |
# File lib/xsd/datatypes.rb, line 654
654: def initialize(value = nil)
655: init(Type, value)
656: end
# 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
# 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
# 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