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