Changeset 1061
- Timestamp:
- 11/26/03 22:20:29 (5 years ago)
- Files:
-
- trunk/lib/xsd/datatypes.rb (modified) (17 diffs)
- trunk/test/soap/test_basetype.rb (modified) (2 diffs)
- trunk/test/xsd/test_xsd.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/xsd/datatypes.rb
r1058 r1061 163 163 super() 164 164 @type = Type 165 @encoding = nil166 165 set(value) if value 167 166 end … … 255 254 256 255 @data = _to_s 256 @data.freeze 257 257 end 258 258 … … 441 441 @sec = $8 ? XSDDecimal.new($8) : 0 442 442 @data = _to_s 443 @data.freeze 443 444 end 444 445 … … 517 518 518 519 def _set(t) 520 set_datetime_init 519 521 if (t.is_a?(Date)) 520 522 @data = t … … 542 544 super() 543 545 @type = Type 544 set(value) if value 545 end 546 547 private 546 @secfrac = nil 547 set(value) if value 548 end 549 550 private 551 552 def set_datetime_init 553 @secfrac = nil 554 end 548 555 549 556 def set_str(t) … … 569 576 570 577 @data = DateTime.civil(year, mon, mday, hour, min, sec, tz2of(zonestr)) 578 @secfrac = secfrac 571 579 572 580 if secfrac … … 589 597 year, @data.mon, @data.mday, @data.hour, @data.min, @data.sec) 590 598 if @data.sec_fraction.nonzero? 591 fr = @data.sec_fraction * SecInDay 592 shiftsize = fr.denominator.to_s.size + 1 593 fr_s = (fr * (10 ** shiftsize)).to_i.to_s 594 s << '.' << '0' * (shiftsize - fr_s.size) << fr_s.sub(/0+$/, '') 599 if @secfrac 600 s << ".#{ @secfrac }" 601 else 602 s << ".#{ (@data.sec_fraction * SecInDay).to_f.to_s }" 603 end 595 604 end 596 605 add_tz(s) … … 605 614 super() 606 615 @type = Type 607 set(value) if value 608 end 609 610 private 616 @secfrac = nil 617 set(value) if value 618 end 619 620 private 621 622 def set_datetime_init 623 @secfrac = nil 624 end 611 625 612 626 def set_str(t) … … 623 637 624 638 @data = DateTime.civil(1, 1, 1, hour, min, sec, tz2of(zonestr)) 639 @secfrac = secfrac 625 640 626 641 if secfrac 627 @data += secfrac.to_i.to_r / (10 ** secfrac.size) / SecInDay 642 diffday = secfrac.to_i.to_r / (10 ** secfrac.size) / SecInDay 643 @data += diffday 628 644 end 629 645 end … … 632 648 s = format('%02d:%02d:%02d', @data.hour, @data.min, @data.sec) 633 649 if @data.sec_fraction.nonzero? 634 fr = @data.sec_fraction * SecInDay 635 shiftsize = fr.denominator.to_s.size + 1 636 fr_s = (fr * (10 ** shiftsize)).to_i.to_s 637 s << '.' << '0' * (shiftsize - fr_s.size) << fr_s.sub(/0+$/, '') 650 if @secfrac 651 s << ".#{ @secfrac }" 652 else 653 s << ".#{ (@data.sec_fraction * SecInDay).to_f.to_s }" 654 end 638 655 end 639 656 add_tz(s) … … 652 669 653 670 private 671 672 def set_datetime_init 673 end 654 674 655 675 def set_str(t) … … 689 709 private 690 710 711 def set_datetime_init 712 end 713 691 714 def set_str(t) 692 715 /^([+\-]?\d{4,})-(\d\d)(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip … … 724 747 private 725 748 749 def set_datetime_init 750 end 751 726 752 def set_str(t) 727 753 /^([+\-]?\d{4,})(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip … … 758 784 private 759 785 786 def set_datetime_init 787 end 788 760 789 def set_str(t) 761 790 /^(\d\d)-(\d\d)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip … … 789 818 private 790 819 820 def set_datetime_init 821 end 822 791 823 def set_str(t) 792 824 /^(\d\d)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip … … 818 850 819 851 private 852 853 def set_datetime_init 854 end 820 855 821 856 def set_str(t) … … 936 971 @localpart = $2 937 972 @data = _to_s 973 @data.freeze 938 974 end 939 975 trunk/test/soap/test_basetype.rb
r993 r1061 352 352 "2002-12-31T23:59:59-23:59", 353 353 "2002-12-31T23:59:59.00000000000000000001+13:30", 354 "2002-12-31T23:59:59.51375Z", 355 "2002-12-31T23:59:59.51345+12:34", 354 356 "-2002-05-18T16:52:20Z", 355 357 "-4711-12-31T23:59:59Z", … … 415 417 "23:59:59-23:59", 416 418 "23:59:59.00000000000000000001+13:30", 419 "23:59:59.51375Z", 420 "23:59:59.51375+12:34", 417 421 "23:59:59+00:01", 418 422 ] trunk/test/xsd/test_xsd.rb
r993 r1061 385 385 "2002-12-31T23:59:59-23:59", 386 386 "2002-12-31T23:59:59.00000000000000000001+13:30", 387 "2002-12-31T23:59:59.5137Z", 388 "2002-12-31T23:59:59.51375Z", # 411/800 389 "2002-12-31T23:59:59.51375+12:34", 387 390 "-2002-05-18T16:52:20Z", 388 391 "-4713-01-01T12:00:00Z", … … 446 449 "23:59:59-23:59", 447 450 "23:59:59.00000000000000000001+13:30", 451 "23:59:59.51345Z", 452 "23:59:59.51345+12:34", 448 453 "23:59:59+00:01", 449 454 ]