| Class | XSD::XSDDateTime |
| In: |
lib/xsd/datatypes.rb
|
| Parent: | XSDAnySimpleType |
| Type | = | QName.new(Namespace, DateTimeLiteral) |
# File lib/xsd/datatypes.rb, line 591
591: def initialize(value = nil)
592: init(Type, value)
593: end
# 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
# 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
# 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