| | 482 | |
|---|
| | 483 | |
|---|
| | 484 | /++ |
|---|
| | 485 | SysTime is the type used when you want to get the current time from the system |
|---|
| | 486 | or if you're doing anything that involves time zones. Unlike DateTime, time |
|---|
| | 487 | zone is an integral part of SysTime (though if all you care about is local |
|---|
| | 488 | time, you can pretty much ignore time zones, and it will work, since it |
|---|
| | 489 | defaults to using the local time zone). It holds its internal time in std time |
|---|
| | 490 | (hnsecs since midnight, January 1st, 1 A.D. UTC), so it interfaces well with the |
|---|
| | 491 | system time. However, that means that, unlike DateTime, it is not optimized |
|---|
| | 492 | for calendar operations, and getting individual units from it such as years |
|---|
| | 493 | or days is going to involve conversions and be less efficient. |
|---|
| | 494 | |
|---|
| | 495 | Basically, if you care about calendar operations and don't necessarily care |
|---|
| | 496 | about time zones, then DateTime would be the type to use. However, if what |
|---|
| | 497 | you care about is the system time, then SysTime is the type to use. |
|---|
| | 498 | |
|---|
| | 499 | $(D Clock.currTime()) will return the current time as a SysTime. If you want |
|---|
| | 500 | to convert a SysTime to a Date or DateTime, simply cast it. And if you ever |
|---|
| | 501 | want to convert a Date or DateTime to a SysTime, use SysTime's constructor, |
|---|
| | 502 | and you can pass in the intended time zone with it (or don't pass in a |
|---|
| | 503 | TimeZone, and the local time zone will be used). |
|---|
| | 504 | |
|---|
| | 505 | If you care about using time zones other than local time or UTC, you can use |
|---|
| | 506 | PosixTimeZone on Posix systems (or on Windows, if you provide the TZ Database |
|---|
| | 507 | files), and you can use WindowsTimeZone on Windows systems. The time in SysTime |
|---|
| | 508 | is kept internally in hnsecs from midnight, January 1st, 1 A.D. UTC. So, you |
|---|
| | 509 | never get conversion errors when changing the time zone of a SysTime (since, |
|---|
| | 510 | if the hnecs were kept in local time, DST would cause problems with conversions). |
|---|
| | 511 | LocalTime is the TimeZone class which represents the local time, and UTC is the |
|---|
| | 512 | TimeZone class which represents UTC. SysTime uses LocalTime if no TimeZone is |
|---|
| | 513 | provided. For more details on time zones, look at the documentation for |
|---|
| | 514 | TimeZone, PosixTimeZone, and WindowsTimeZone. |
|---|
| | 515 | |
|---|
| | 516 | SysTime's range is from approximately 29,000 B.C. to 29,000 A.D. |
|---|
| | 517 | +/ |
|---|
| | 518 | struct SysTime |
|---|
| | 519 | { |
|---|
| | 520 | public: |
|---|
| | 521 | |
|---|
| | 522 | /++ |
|---|
| | 523 | Params: |
|---|
| | 524 | dateTime = The DateTime to use to set this SysTime's internal std |
|---|
| | 525 | time. As DateTime has no concept of time zone, tz is used |
|---|
| | 526 | as its time zone. |
|---|
| | 527 | tz = The TimeZone to use for this SysTime. If null, LocalTime |
|---|
| | 528 | will be used. The given DateTime is assumed to be in the |
|---|
| | 529 | given time zone. |
|---|
| | 530 | +/ |
|---|
| | 531 | this(in DateTime dateTime, immutable TimeZone tz = null) nothrow |
|---|
| | 532 | { |
|---|
| | 533 | try |
|---|
| | 534 | this(dateTime, FracSec.from!"hnsecs"(0), tz); |
|---|
| | 535 | catch(Exception e) |
|---|
| | 536 | assert(0, "FracSec's constructor threw when it shouldn't have."); |
|---|
| | 537 | } |
|---|
| | 538 | |
|---|
| | 539 | unittest |
|---|
| | 540 | { |
|---|
| | 541 | version(testStdDateTime) |
|---|
| | 542 | { |
|---|
| | 543 | assertPred!"=="(SysTime(DateTime.init, UTC())._stdTime, 0); |
|---|
| | 544 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 12, 30, 33), UTC())._stdTime, 450_330_000_000L); |
|---|
| | 545 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 12, 30, 33), UTC())._stdTime, -413_670_000_000L); |
|---|
| | 546 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), UTC())._stdTime, 0); |
|---|
| | 547 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 1), UTC())._stdTime, 10_000_000L); |
|---|
| | 548 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), UTC())._stdTime, -10_000_000L); |
|---|
| | 549 | |
|---|
| | 550 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), new SimpleTimeZone(-60)).stdTime, 36_000_000_000L); |
|---|
| | 551 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), new SimpleTimeZone(0)).stdTime, 0); |
|---|
| | 552 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), new SimpleTimeZone(60)).stdTime, -36_000_000_000L); |
|---|
| | 553 | } |
|---|
| | 554 | } |
|---|
| | 555 | |
|---|
| | 556 | |
|---|
| | 557 | /++ |
|---|
| | 558 | Params: |
|---|
| | 559 | dateTime = The DateTime to use to set this SysTime's internal std time. |
|---|
| | 560 | As DateTime has no concept of time zone, tz is used as its |
|---|
| | 561 | time zone. |
|---|
| | 562 | fsec = The fractional seconds portion of the time. |
|---|
| | 563 | tz = The TimeZone to use for this SysTime. If null, LocalTime will |
|---|
| | 564 | be used. The given DateTime is assumed to be in the given |
|---|
| | 565 | time zone. |
|---|
| | 566 | +/ |
|---|
| | 567 | this(in DateTime dateTime, in FracSec fsec, immutable TimeZone tz = null) nothrow |
|---|
| | 568 | { |
|---|
| | 569 | if(tz is null) |
|---|
| | 570 | _timezone = LocalTime(); |
|---|
| | 571 | else |
|---|
| | 572 | _timezone = tz; |
|---|
| | 573 | |
|---|
| | 574 | try |
|---|
| | 575 | { |
|---|
| | 576 | immutable dateDiff = (dateTime.date - Date(1, 1, 1)).total!"hnsecs"; |
|---|
| | 577 | immutable todDiff = (dateTime.timeOfDay - TimeOfDay(0, 0, 0)).total!"hnsecs"; |
|---|
| | 578 | |
|---|
| | 579 | immutable adjustedTime = dateDiff + todDiff + fsec.hnsecs; |
|---|
| | 580 | immutable standardTime = _timezone.tzToUTC(adjustedTime); |
|---|
| | 581 | |
|---|
| | 582 | this(standardTime, _timezone.get); |
|---|
| | 583 | } |
|---|
| | 584 | catch(Exception e) |
|---|
| | 585 | assert(0, "Date, TimeOfDay, or DateTime's constructor threw when it shouldn't have."); |
|---|
| | 586 | } |
|---|
| | 587 | |
|---|
| | 588 | unittest |
|---|
| | 589 | { |
|---|
| | 590 | version(testStdDateTime) |
|---|
| | 591 | { |
|---|
| | 592 | assertPred!"=="(SysTime(DateTime.init, FracSec.init, UTC())._stdTime, 0); |
|---|
| | 593 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 12, 30, 33), FracSec.init, UTC())._stdTime, 450_330_000_000L); |
|---|
| | 594 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 12, 30, 33), FracSec.init, UTC())._stdTime, -413_670_000_000L); |
|---|
| | 595 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(1), UTC())._stdTime, 10_000L); |
|---|
| | 596 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"msecs"(999), UTC())._stdTime, -10_000L); |
|---|
| | 597 | |
|---|
| | 598 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).stdTime, -1); |
|---|
| | 599 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1), UTC()).stdTime, -9_999_999); |
|---|
| | 600 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0), UTC()).stdTime, -10_000_000); |
|---|
| | 601 | } |
|---|
| | 602 | } |
|---|
| | 603 | |
|---|
| | 604 | |
|---|
| | 605 | /++ |
|---|
| | 606 | Params: |
|---|
| | 607 | date = The Date to use to set this SysTime's internal std time. |
|---|
| | 608 | As Date has no concept of time zone, tz is used as its |
|---|
| | 609 | time zone. |
|---|
| | 610 | tz = The TimeZone to use for this SysTime. If null, LocalTime will |
|---|
| | 611 | be used. The given Date is assumed to be in the given time zone. |
|---|
| | 612 | +/ |
|---|
| | 613 | this(in Date date, immutable TimeZone tz = null) nothrow |
|---|
| | 614 | { |
|---|
| | 615 | if(tz is null) |
|---|
| | 616 | _timezone = LocalTime(); |
|---|
| | 617 | else |
|---|
| | 618 | _timezone = tz; |
|---|
| | 619 | |
|---|
| | 620 | try |
|---|
| | 621 | { |
|---|
| | 622 | immutable adjustedTime = (date - Date(1, 1, 1)).total!"hnsecs"; |
|---|
| | 623 | immutable standardTime = _timezone.tzToUTC(adjustedTime); |
|---|
| | 624 | |
|---|
| | 625 | this(standardTime, _timezone.get); |
|---|
| | 626 | } |
|---|
| | 627 | catch(Exception e) |
|---|
| | 628 | assert(0, "Date's constructor through when it shouldn't have"); |
|---|
| | 629 | } |
|---|
| | 630 | |
|---|
| | 631 | unittest |
|---|
| | 632 | { |
|---|
| | 633 | version(testStdDateTime) |
|---|
| | 634 | { |
|---|
| | 635 | assertPred!"=="(SysTime(Date.init, UTC())._stdTime, 0); |
|---|
| | 636 | assertPred!"=="(SysTime(Date(1, 1, 1), UTC())._stdTime, 0); |
|---|
| | 637 | assertPred!"=="(SysTime(Date(1, 1, 2), UTC())._stdTime, 864000000000); |
|---|
| | 638 | assertPred!"=="(SysTime(Date(0, 12, 31), UTC())._stdTime, -864000000000); |
|---|
| | 639 | } |
|---|
| | 640 | } |
|---|
| | 641 | |
|---|
| | 642 | |
|---|
| | 643 | /++ |
|---|
| | 644 | Note: |
|---|
| | 645 | Whereas the other constructors take in the given date/time, assume |
|---|
| | 646 | that it's in the given time zone, and convert it to hnsecs in UTC |
|---|
| | 647 | since midnight, January 1st, 1 A.D. UTC - i.e. std time - this constructor |
|---|
| | 648 | takes a std time, which is specifically already in UTC, so no conversion |
|---|
| | 649 | takes place. Of course, the various getter properties and functions |
|---|
| | 650 | will use the given time zone's conversion function to convert the |
|---|
| | 651 | results to that time zone, but no conversion of the arguments to |
|---|
| | 652 | this constructor takes place. |
|---|
| | 653 | |
|---|
| | 654 | Params: |
|---|
| | 655 | stdTime = The number of hnsecs since midnight, January 1st, 1 A.D. UTC. |
|---|
| | 656 | tz = The TimeZone to use for this SysTime. If null, LocalTime will be used. |
|---|
| | 657 | +/ |
|---|
| | 658 | this(long stdTime, immutable TimeZone tz = null) pure nothrow |
|---|
| | 659 | { |
|---|
| | 660 | _stdTime = stdTime; |
|---|
| | 661 | |
|---|
| | 662 | if(tz is null) |
|---|
| | 663 | _timezone = LocalTime(); |
|---|
| | 664 | else |
|---|
| | 665 | _timezone = tz; |
|---|
| | 666 | } |
|---|
| | 667 | |
|---|
| | 668 | unittest |
|---|
| | 669 | { |
|---|
| | 670 | version(testStdDateTime) |
|---|
| | 671 | { |
|---|
| | 672 | assertPred!"=="(SysTime(0)._stdTime, 0); |
|---|
| | 673 | } |
|---|
| | 674 | } |
|---|
| | 675 | |
|---|
| | 676 | |
|---|
| | 677 | /++ |
|---|
| | 678 | Params: |
|---|
| | 679 | rhs = The SysTime to assign to this one. |
|---|
| | 680 | +/ |
|---|
| | 681 | ref SysTime opAssign(const ref SysTime rhs) pure nothrow |
|---|
| | 682 | { |
|---|
| | 683 | _stdTime = rhs._stdTime; |
|---|
| | 684 | _timezone = rhs._timezone.get; |
|---|
| | 685 | |
|---|
| | 686 | return this; |
|---|
| | 687 | } |
|---|
| | 688 | |
|---|
| | 689 | |
|---|
| | 690 | /++ |
|---|
| | 691 | Params: |
|---|
| | 692 | rhs = The SysTime to assign to this one. |
|---|
| | 693 | +/ |
|---|
| | 694 | ref SysTime opAssign(SysTime rhs) pure nothrow |
|---|
| | 695 | { |
|---|
| | 696 | _stdTime = rhs._stdTime; |
|---|
| | 697 | _timezone = rhs._timezone.get; |
|---|
| | 698 | |
|---|
| | 699 | return this; |
|---|
| | 700 | } |
|---|
| | 701 | |
|---|
| | 702 | |
|---|
| | 703 | /++ |
|---|
| | 704 | Checks for equality between this SysTime and the given |
|---|
| | 705 | SysTime. |
|---|
| | 706 | |
|---|
| | 707 | Note that the time zone is ignored. Only the internal |
|---|
| | 708 | std times (which are in UTC) are compared. |
|---|
| | 709 | +/ |
|---|
| | 710 | bool opEquals(const ref SysTime rhs) const pure nothrow |
|---|
| | 711 | { |
|---|
| | 712 | return _stdTime == rhs._stdTime; |
|---|
| | 713 | } |
|---|
| | 714 | |
|---|
| | 715 | unittest |
|---|
| | 716 | { |
|---|
| | 717 | version(testStdDateTime) |
|---|
| | 718 | { |
|---|
| | 719 | auto a = SysTime(DateTime.init, UTC()); |
|---|
| | 720 | auto b = SysTime(0, UTC()); |
|---|
| | 721 | assert(a == b); |
|---|
| | 722 | assertPred!"=="(a, b); |
|---|
| | 723 | assertPred!"=="(SysTime(DateTime.init, UTC()), SysTime(0, UTC())); |
|---|
| | 724 | assertPred!"=="(SysTime(Date.init, UTC()), SysTime(0, UTC())); |
|---|
| | 725 | assertPred!"=="(SysTime(0), SysTime(0)); |
|---|
| | 726 | |
|---|
| | 727 | assertPred!"=="(SysTime(Date(1999, 1, 1)), SysTime(Date(1999, 1, 1))); |
|---|
| | 728 | assertPred!"=="(SysTime(Date(1999, 1, 1)), SysTime(Date(1999, 1, 1))); |
|---|
| | 729 | assertPred!"=="(SysTime(Date(1, 7, 1)), SysTime(Date(1, 7, 1))); |
|---|
| | 730 | assertPred!"=="(SysTime(Date(1, 1, 6)), SysTime(Date(1, 1, 6))); |
|---|
| | 731 | |
|---|
| | 732 | assertPred!"=="(SysTime(Date(1999, 7, 1)), SysTime(Date(1999, 7, 1))); |
|---|
| | 733 | assertPred!"=="(SysTime(Date(1999, 7, 6)), SysTime(Date(1999, 7, 6))); |
|---|
| | 734 | |
|---|
| | 735 | assertPred!"=="(SysTime(Date(1, 7, 6)), SysTime(Date(1, 7, 6))); |
|---|
| | 736 | |
|---|
| | 737 | assertPred!"=="(SysTime(DateTime(1999, 1, 1, 0, 0, 0)), SysTime(Date(1999, 1, 1))); |
|---|
| | 738 | assertPred!"=="(SysTime(Date(1999, 1, 1)), SysTime(DateTime(1999, 1, 1, 0, 0, 0))); |
|---|
| | 739 | |
|---|
| | 740 | assertPred!"!="(SysTime(DateTime(1999, 1, 1, 11, 30, 20)), SysTime(Date(1999, 1, 1))); |
|---|
| | 741 | assertPred!"!="(SysTime(Date(1999, 1, 1)), SysTime(DateTime(1999, 1, 1, 11, 30, 20))); |
|---|
| | 742 | |
|---|
| | 743 | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0))), |
|---|
| | 744 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)))); |
|---|
| | 745 | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 0, 0))), |
|---|
| | 746 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 0, 0)))); |
|---|
| | 747 | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 0))), |
|---|
| | 748 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 0)))); |
|---|
| | 749 | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33))), |
|---|
| | 750 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33)))); |
|---|
| | 751 | |
|---|
| | 752 | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 0))), |
|---|
| | 753 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 0)))); |
|---|
| | 754 | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 755 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 756 | |
|---|
| | 757 | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 33))), |
|---|
| | 758 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 33)))); |
|---|
| | 759 | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33))), |
|---|
| | 760 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33)))); |
|---|
| | 761 | |
|---|
| | 762 | { |
|---|
| | 763 | auto sysUTC = SysTime(Date(1999, 1, 1)); |
|---|
| | 764 | sysUTC.timezone = UTC(); |
|---|
| | 765 | |
|---|
| | 766 | auto sysLocal = SysTime(Date(1999, 1, 1)); |
|---|
| | 767 | sysUTC.timezone = LocalTime(); |
|---|
| | 768 | |
|---|
| | 769 | assertPred!"=="(sysUTC, sysLocal); |
|---|
| | 770 | assertPred!"=="(sysLocal, sysUTC); |
|---|
| | 771 | |
|---|
| | 772 | if(!localTimeIsUTC) |
|---|
| | 773 | { |
|---|
| | 774 | assertPred!"!="(SysTime(Date(1999, 1, 1), UTC()), SysTime(Date(1999, 1, 1), LocalTime())); |
|---|
| | 775 | assertPred!"!="(SysTime(Date(1999, 7, 1), LocalTime()), SysTime(Date(1999, 7, 1), UTC())); |
|---|
| | 776 | } |
|---|
| | 777 | } |
|---|
| | 778 | |
|---|
| | 779 | { |
|---|
| | 780 | auto sysUTC = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0))); |
|---|
| | 781 | sysUTC.timezone = UTC(); |
|---|
| | 782 | |
|---|
| | 783 | auto sysSimple = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0))); |
|---|
| | 784 | sysSimple.timezone = new SimpleTimeZone(-360); |
|---|
| | 785 | |
|---|
| | 786 | assertPred!"=="(sysUTC, sysSimple); |
|---|
| | 787 | assertPred!"=="(sysSimple, sysUTC); |
|---|
| | 788 | |
|---|
| | 789 | assertPred!"!="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), UTC()), |
|---|
| | 790 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), sysSimple.timezone)); |
|---|
| | 791 | assertPred!"!="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), sysSimple.timezone), |
|---|
| | 792 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), UTC())); |
|---|
| | 793 | } |
|---|
| | 794 | |
|---|
| | 795 | { |
|---|
| | 796 | auto sysUTC = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), UTC()); |
|---|
| | 797 | auto sysSimple = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), new SimpleTimeZone(240)); |
|---|
| | 798 | |
|---|
| | 799 | assertPred!"!="(sysUTC, sysSimple); |
|---|
| | 800 | assertPred!"!="(sysSimple, sysUTC); |
|---|
| | 801 | |
|---|
| | 802 | sysUTC = SysTime(DateTime(Date(1999, 7, 5), TimeOfDay(20, 0, 0)), UTC()); |
|---|
| | 803 | |
|---|
| | 804 | assertPred!"=="(sysUTC, sysSimple); |
|---|
| | 805 | assertPred!"=="(sysSimple, sysUTC); |
|---|
| | 806 | } |
|---|
| | 807 | |
|---|
| | 808 | auto st = SysTime(DateTime(1999, 7, 6, 12, 33, 30)); |
|---|
| | 809 | const cst = SysTime(DateTime(1999, 7, 6, 12, 33, 30)); |
|---|
| | 810 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 33, 30)); |
|---|
| | 811 | static assert(__traits(compiles, st == st)); |
|---|
| | 812 | static assert(__traits(compiles, st == cst)); |
|---|
| | 813 | //static assert(__traits(compiles, st == ist)); |
|---|
| | 814 | static assert(__traits(compiles, cst == st)); |
|---|
| | 815 | static assert(__traits(compiles, cst == cst)); |
|---|
| | 816 | //static assert(__traits(compiles, cst == ist)); |
|---|
| | 817 | //static assert(__traits(compiles, ist == st)); |
|---|
| | 818 | //static assert(__traits(compiles, ist == cst)); |
|---|
| | 819 | //static assert(__traits(compiles, ist == ist)); |
|---|
| | 820 | } |
|---|
| | 821 | } |
|---|
| | 822 | |
|---|
| | 823 | |
|---|
| | 824 | /++ |
|---|
| | 825 | Compares this SysTime with the given SysTime. |
|---|
| | 826 | |
|---|
| | 827 | Time zone is irrelevant to comparing SysTimes. |
|---|
| | 828 | |
|---|
| | 829 | Returns: |
|---|
| | 830 | $(TABLE |
|---|
| | 831 | $(TR $(TD this < rhs) $(TD < 0)) |
|---|
| | 832 | $(TR $(TD this == rhs) $(TD 0)) |
|---|
| | 833 | $(TR $(TD this > rhs) $(TD > 0)) |
|---|
| | 834 | ) |
|---|
| | 835 | +/ |
|---|
| | 836 | int opCmp(in SysTime rhs) const pure nothrow |
|---|
| | 837 | { |
|---|
| | 838 | if(_stdTime < rhs._stdTime) |
|---|
| | 839 | return -1; |
|---|
| | 840 | if(_stdTime > rhs._stdTime) |
|---|
| | 841 | return 1; |
|---|
| | 842 | |
|---|
| | 843 | return 0; |
|---|
| | 844 | } |
|---|
| | 845 | |
|---|
| | 846 | unittest |
|---|
| | 847 | { |
|---|
| | 848 | version(testStdDateTime) |
|---|
| | 849 | { |
|---|
| | 850 | //Test A.D. |
|---|
| | 851 | assertPred!("opCmp", "==")(SysTime(DateTime.init, UTC()), SysTime(0)); |
|---|
| | 852 | assertPred!("opCmp", "==")(SysTime(Date.init, UTC()), SysTime(0)); |
|---|
| | 853 | |
|---|
| | 854 | assertPred!("opCmp", "==")(SysTime(Date(1999, 1, 1)), SysTime(Date(1999, 1, 1))); |
|---|
| | 855 | assertPred!("opCmp", "==")(SysTime(Date(1999, 1, 1)), SysTime(Date(1999, 1, 1))); |
|---|
| | 856 | assertPred!("opCmp", "==")(SysTime(Date(1, 7, 1)), SysTime(Date(1, 7, 1))); |
|---|
| | 857 | assertPred!("opCmp", "==")(SysTime(Date(1, 1, 6)), SysTime(Date(1, 1, 6))); |
|---|
| | 858 | |
|---|
| | 859 | assertPred!("opCmp", "==")(SysTime(Date(1999, 7, 1)), SysTime(Date(1999, 7, 1))); |
|---|
| | 860 | assertPred!("opCmp", "==")(SysTime(Date(1999, 7, 6)), SysTime(Date(1999, 7, 6))); |
|---|
| | 861 | |
|---|
| | 862 | assertPred!("opCmp", "==")(SysTime(Date(1, 7, 6)), SysTime(Date(1, 7, 6))); |
|---|
| | 863 | |
|---|
| | 864 | assertPred!("opCmp", ">")(SysTime(DateTime(1999, 1, 1, 11, 30, 20)), SysTime(Date(1999, 1, 1))); |
|---|
| | 865 | assertPred!("opCmp", "<")(SysTime(Date(1999, 1, 1)), SysTime(DateTime(1999, 1, 1, 11, 30, 20))); |
|---|
| | 866 | |
|---|
| | 867 | assertPred!("opCmp", "<")(SysTime(Date(1999, 7, 6)), SysTime(Date(2000, 7, 6))); |
|---|
| | 868 | assertPred!("opCmp", ">")(SysTime(Date(2000, 7, 6)), SysTime(Date(1999, 7, 6))); |
|---|
| | 869 | assertPred!("opCmp", "<")(SysTime(Date(1999, 7, 6)), SysTime(Date(1999, 8, 6))); |
|---|
| | 870 | assertPred!("opCmp", ">")(SysTime(Date(1999, 8, 6)), SysTime(Date(1999, 7, 6))); |
|---|
| | 871 | assertPred!("opCmp", "<")(SysTime(Date(1999, 7, 6)), SysTime(Date(1999, 7, 7))); |
|---|
| | 872 | assertPred!("opCmp", ">")(SysTime(Date(1999, 7, 7)), SysTime(Date(1999, 7, 6))); |
|---|
| | 873 | |
|---|
| | 874 | assertPred!("opCmp", "<")(SysTime(Date(1999, 8, 7)), SysTime(Date(2000, 7, 6))); |
|---|
| | 875 | assertPred!("opCmp", ">")(SysTime(Date(2000, 8, 6)), SysTime(Date(1999, 7, 7))); |
|---|
| | 876 | assertPred!("opCmp", "<")(SysTime(Date(1999, 7, 7)), SysTime(Date(2000, 7, 6))); |
|---|
| | 877 | assertPred!("opCmp", ">")(SysTime(Date(2000, 7, 6)), SysTime(Date(1999, 7, 7))); |
|---|
| | 878 | assertPred!("opCmp", "<")(SysTime(Date(1999, 7, 7)), SysTime(Date(1999, 8, 6))); |
|---|
| | 879 | assertPred!("opCmp", ">")(SysTime(Date(1999, 8, 6)), SysTime(Date(1999, 7, 7))); |
|---|
| | 880 | |
|---|
| | 881 | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0))), |
|---|
| | 882 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)))); |
|---|
| | 883 | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 0, 0))), |
|---|
| | 884 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 0, 0)))); |
|---|
| | 885 | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 0))), |
|---|
| | 886 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 0)))), |
|---|
| | 887 | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33))), |
|---|
| | 888 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33)))); |
|---|
| | 889 | |
|---|
| | 890 | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 0))), |
|---|
| | 891 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 0)))); |
|---|
| | 892 | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 893 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 894 | |
|---|
| | 895 | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 33))), |
|---|
| | 896 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 33)))); |
|---|
| | 897 | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33))), |
|---|
| | 898 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33)))); |
|---|
| | 899 | |
|---|
| | 900 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 901 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33)))); |
|---|
| | 902 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33))), |
|---|
| | 903 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 904 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 905 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33)))); |
|---|
| | 906 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33))), |
|---|
| | 907 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 908 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 909 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34)))); |
|---|
| | 910 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34))), |
|---|
| | 911 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 912 | |
|---|
| | 913 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33))), |
|---|
| | 914 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34)))); |
|---|
| | 915 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34))), |
|---|
| | 916 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33)))); |
|---|
| | 917 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33))), |
|---|
| | 918 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33)))); |
|---|
| | 919 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33))), |
|---|
| | 920 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33)))); |
|---|
| | 921 | |
|---|
| | 922 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33))), |
|---|
| | 923 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34)))); |
|---|
| | 924 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34))), |
|---|
| | 925 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33)))); |
|---|
| | 926 | |
|---|
| | 927 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33))), |
|---|
| | 928 | SysTime(DateTime(Date(2000, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 929 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(2000, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 930 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33)))); |
|---|
| | 931 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33))), |
|---|
| | 932 | SysTime(DateTime(Date(2000, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 933 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(2000, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 934 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33)))); |
|---|
| | 935 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34))), |
|---|
| | 936 | SysTime(DateTime(Date(2000, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 937 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(2000, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 938 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34)))); |
|---|
| | 939 | |
|---|
| | 940 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33))), |
|---|
| | 941 | SysTime(DateTime(Date(1999, 8, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 942 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 943 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33)))); |
|---|
| | 944 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33))), |
|---|
| | 945 | SysTime(DateTime(Date(1999, 8, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 946 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 947 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33)))); |
|---|
| | 948 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34))), |
|---|
| | 949 | SysTime(DateTime(Date(1999, 8, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 950 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 951 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34)))); |
|---|
| | 952 | |
|---|
| | 953 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33))), |
|---|
| | 954 | SysTime(DateTime(Date(1999, 7, 7), TimeOfDay(12, 30, 33)))); |
|---|
| | 955 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 7), TimeOfDay(12, 30, 33))), |
|---|
| | 956 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33)))); |
|---|
| | 957 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33))), |
|---|
| | 958 | SysTime(DateTime(Date(1999, 7, 7), TimeOfDay(12, 31, 33)))); |
|---|
| | 959 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 7), TimeOfDay(12, 30, 33))), |
|---|
| | 960 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 961 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34))), |
|---|
| | 962 | SysTime(DateTime(Date(1999, 7, 7), TimeOfDay(12, 30, 33)))); |
|---|
| | 963 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 7), TimeOfDay(12, 30, 33))), |
|---|
| | 964 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34)))); |
|---|
| | 965 | |
|---|
| | 966 | //Test B.C. |
|---|
| | 967 | assertPred!("opCmp", "==")(SysTime(DateTime(Date(-1, 1, 1), TimeOfDay(12, 30, 33))), |
|---|
| | 968 | SysTime(DateTime(Date(-1, 1, 1), TimeOfDay(12, 30, 33)))); |
|---|
| | 969 | assertPred!("opCmp", "==")(SysTime(DateTime(Date(-1, 7, 1), TimeOfDay(12, 30, 33))), |
|---|
| | 970 | SysTime(DateTime(Date(-1, 7, 1), TimeOfDay(12, 30, 33)))); |
|---|
| | 971 | assertPred!("opCmp", "==")(SysTime(DateTime(Date(-1, 1, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 972 | SysTime(DateTime(Date(-1, 1, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 973 | |
|---|
| | 974 | assertPred!("opCmp", "==")(SysTime(DateTime(Date(-1999, 7, 1), TimeOfDay(12, 30, 33))), |
|---|
| | 975 | SysTime(DateTime(Date(-1999, 7, 1), TimeOfDay(12, 30, 33)))); |
|---|
| | 976 | assertPred!("opCmp", "==")(SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 977 | SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 978 | |
|---|
| | 979 | assertPred!("opCmp", "==")(SysTime(DateTime(Date(-1, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 980 | SysTime(DateTime(Date(-1, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 981 | |
|---|
| | 982 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-2000, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 983 | SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 984 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 985 | SysTime(DateTime(Date(-2000, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 986 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 987 | SysTime(DateTime(Date(-1999, 8, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 988 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(-1999, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 989 | SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 990 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 991 | SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33)))); |
|---|
| | 992 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33))), |
|---|
| | 993 | SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 994 | |
|---|
| | 995 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-2000, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 996 | SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33)))); |
|---|
| | 997 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(-1999, 8, 7), TimeOfDay(12, 30, 33))), |
|---|
| | 998 | SysTime(DateTime(Date(-2000, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 999 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-2000, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 1000 | SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33)))); |
|---|
| | 1001 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33))), |
|---|
| | 1002 | SysTime(DateTime(Date(-2000, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 1003 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33))), |
|---|
| | 1004 | SysTime(DateTime(Date(-1999, 8, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 1005 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(-1999, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 1006 | SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33)))); |
|---|
| | 1007 | |
|---|
| | 1008 | //Test Both |
|---|
| | 1009 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 1010 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 1011 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 1012 | SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 1013 | |
|---|
| | 1014 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 1015 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 1016 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 1017 | SysTime(DateTime(Date(-1999, 8, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 1018 | |
|---|
| | 1019 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33))), |
|---|
| | 1020 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 1021 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 1022 | SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33)))); |
|---|
| | 1023 | |
|---|
| | 1024 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 8, 7), TimeOfDay(12, 30, 33))), |
|---|
| | 1025 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 1026 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 1027 | SysTime(DateTime(Date(-1999, 8, 7), TimeOfDay(12, 30, 33)))); |
|---|
| | 1028 | |
|---|
| | 1029 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| | 1030 | SysTime(DateTime(Date(1999, 6, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 1031 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 6, 8), TimeOfDay(12, 30, 33))), |
|---|
| | 1032 | SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| | 1033 | |
|---|
| | 1034 | { |
|---|
| | 1035 | auto sysUTC = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0))); |
|---|
| | 1036 | sysUTC.timezone = UTC(); |
|---|
| | 1037 | |
|---|
| | 1038 | auto sysSimple = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0))); |
|---|
| | 1039 | sysSimple.timezone = new SimpleTimeZone(-360); |
|---|
| | 1040 | |
|---|
| | 1041 | assertPred!("opCmp", "==")(sysUTC, sysSimple); |
|---|
| | 1042 | assertPred!("opCmp", "==")(sysSimple, sysUTC); |
|---|
| | 1043 | |
|---|
| | 1044 | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), UTC()), |
|---|
| | 1045 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), sysSimple.timezone)); |
|---|
| | 1046 | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), sysSimple.timezone), |
|---|
| | 1047 | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), UTC())); |
|---|
| | 1048 | } |
|---|
| | 1049 | |
|---|
| | 1050 | { |
|---|
| | 1051 | auto sysUTC = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), UTC()); |
|---|
| | 1052 | auto sysSimple = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), new SimpleTimeZone(240)); |
|---|
| | 1053 | |
|---|
| | 1054 | assertPred!("opCmp", ">")(sysUTC, sysSimple); |
|---|
| | 1055 | assertPred!("opCmp", "<")(sysSimple, sysUTC); |
|---|
| | 1056 | |
|---|
| | 1057 | sysUTC = SysTime(DateTime(Date(1999, 7, 5), TimeOfDay(20, 0, 0)), UTC()); |
|---|
| | 1058 | |
|---|
| | 1059 | assertPred!("opCmp", "==")(sysUTC, sysSimple); |
|---|
| | 1060 | assertPred!("opCmp", "==")(sysSimple, sysUTC); |
|---|
| | 1061 | } |
|---|
| | 1062 | |
|---|
| | 1063 | auto st = SysTime(DateTime(1999, 7, 6, 12, 33, 30)); |
|---|
| | 1064 | const cst = SysTime(DateTime(1999, 7, 6, 12, 33, 30)); |
|---|
| | 1065 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 33, 30)); |
|---|
| | 1066 | static assert(__traits(compiles, st.opCmp(st))); |
|---|
| | 1067 | static assert(__traits(compiles, st.opCmp(cst))); |
|---|
| | 1068 | //static assert(__traits(compiles, st.opCmp(ist))); |
|---|
| | 1069 | static assert(__traits(compiles, cst.opCmp(st))); |
|---|
| | 1070 | static assert(__traits(compiles, cst.opCmp(cst))); |
|---|
| | 1071 | //static assert(__traits(compiles, cst.opCmp(ist))); |
|---|
| | 1072 | //static assert(__traits(compiles, ist.opCmp(st))); |
|---|
| | 1073 | //static assert(__traits(compiles, ist.opCmp(cst))); |
|---|
| | 1074 | //static assert(__traits(compiles, ist.opCmp(ist))); |
|---|
| | 1075 | } |
|---|
| | 1076 | } |
|---|
| | 1077 | |
|---|
| | 1078 | |
|---|
| | 1079 | /++ |
|---|
| | 1080 | Year of the Gregorian Calendar. Positive numbers are A.D. Non-positive |
|---|
| | 1081 | are B.C. |
|---|
| | 1082 | +/ |
|---|
| | 1083 | @property short year() const nothrow |
|---|
| | 1084 | { |
|---|
| | 1085 | return (cast(Date)this).year; |
|---|
| | 1086 | } |
|---|
| | 1087 | |
|---|
| | 1088 | unittest |
|---|
| | 1089 | { |
|---|
| | 1090 | version(testStdDateTime) |
|---|
| | 1091 | { |
|---|
| | 1092 | assertPred!"=="(SysTime(0, UTC()).year, 1); |
|---|
| | 1093 | assertPred!"=="(SysTime(1, UTC()).year, 1); |
|---|
| | 1094 | assertPred!"=="(SysTime(-1, UTC()).year, 0); |
|---|
| | 1095 | assertPred!"=="(SysTime(DateTime(12, 1, 1, 0, 0, 0)).year, 12); |
|---|
| | 1096 | assertPred!"=="(SysTime(DateTime(-12, 1, 1, 0, 0, 0)).year, -12); |
|---|
| | 1097 | assertPred!"=="(SysTime(Date(1999, 7, 6)).year, 1999); |
|---|
| | 1098 | assertPred!"=="(SysTime(Date(-1999, 7, 6)).year, -1999); |
|---|
| | 1099 | |
|---|
| | 1100 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1101 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1102 | static assert(__traits(compiles, cst.year)); |
|---|
| | 1103 | //static assert(__traits(compiles, ist.year)); |
|---|
| | 1104 | } |
|---|
| | 1105 | } |
|---|
| | 1106 | |
|---|
| | 1107 | |
|---|
| | 1108 | /++ |
|---|
| | 1109 | Year of the Gregorian Calendar. Positive numbers are A.D. Non-positive |
|---|
| | 1110 | are B.C. |
|---|
| | 1111 | |
|---|
| | 1112 | Params: |
|---|
| | 1113 | year = The year to set this SysTime's year to. |
|---|
| | 1114 | |
|---|
| | 1115 | Throws: |
|---|
| | 1116 | DateTimeException if the new year is not a leap year and the resulting |
|---|
| | 1117 | date would be on February 29th. |
|---|
| | 1118 | |
|---|
| | 1119 | Examples: |
|---|
| | 1120 | -------------------- |
|---|
| | 1121 | assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).year == 1999); |
|---|
| | 1122 | assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).year == 2010); |
|---|
| | 1123 | assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).year == -7); |
|---|
| | 1124 | -------------------- |
|---|
| | 1125 | +/ |
|---|
| | 1126 | @property void year(int year) |
|---|
| | 1127 | { |
|---|
| | 1128 | auto hnsecs = adjTime; |
|---|
| | 1129 | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| | 1130 | |
|---|
| | 1131 | if(hnsecs < 0) |
|---|
| | 1132 | { |
|---|
| | 1133 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 1134 | --days; |
|---|
| | 1135 | } |
|---|
| | 1136 | |
|---|
| | 1137 | auto date = Date(cast(int)days); |
|---|
| | 1138 | date.year = year; |
|---|
| | 1139 | |
|---|
| | 1140 | immutable newDaysHNSecs = convert!("days", "hnsecs")(date.dayOfGregorianCal - 1); |
|---|
| | 1141 | |
|---|
| | 1142 | adjTime = newDaysHNSecs + hnsecs; |
|---|
| | 1143 | } |
|---|
| | 1144 | |
|---|
| | 1145 | unittest |
|---|
| | 1146 | { |
|---|
| | 1147 | version(testStdDateTime) |
|---|
| | 1148 | { |
|---|
| | 1149 | static void testST(SysTime st, int year, in SysTime expected, size_t line = __LINE__) |
|---|
| | 1150 | { |
|---|
| | 1151 | st.year = year; |
|---|
| | 1152 | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| | 1153 | } |
|---|
| | 1154 | |
|---|
| | 1155 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), 1999, SysTime(Date(1999, 1, 1))); |
|---|
| | 1156 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), 0, SysTime(Date(0, 1, 1))); |
|---|
| | 1157 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), -1999, SysTime(Date(-1999, 1, 1))); |
|---|
| | 1158 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1999, SysTime(DateTime(1999, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1159 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 0, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1160 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), -1999, SysTime(DateTime(-1999, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1161 | |
|---|
| | 1162 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), 1999, SysTime(Date(1999, 1, 1))); |
|---|
| | 1163 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), 0, SysTime(Date(0, 1, 1))); |
|---|
| | 1164 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), -1999, SysTime(Date(-1999, 1, 1))); |
|---|
| | 1165 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1999, SysTime(DateTime(1999, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1166 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 0, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1167 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), -1999, SysTime(DateTime(-1999, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1168 | |
|---|
| | 1169 | testST(SysTime(Date(1, 7, 2)), 12, SysTime(Date(12, 7, 2))); |
|---|
| | 1170 | testST(SysTime(Date(5007, 7, 2)), 5, SysTime(Date(5, 7, 2))); |
|---|
| | 1171 | testST(SysTime(Date(0, 7, 2)), 999, SysTime(Date(999, 7, 2))); |
|---|
| | 1172 | testST(SysTime(Date(-1202, 7, 2)), 2300, SysTime(Date(2300, 7, 2))); |
|---|
| | 1173 | |
|---|
| | 1174 | testST(SysTime(Date(1, 7, 2)), -12, SysTime(Date(-12, 7, 2))); |
|---|
| | 1175 | testST(SysTime(Date(5007, 7, 2)), -5, SysTime(Date(-5, 7, 2))); |
|---|
| | 1176 | testST(SysTime(Date(0, 7, 2)), -999, SysTime(Date(-999, 7, 2))); |
|---|
| | 1177 | testST(SysTime(Date(-1202, 7, 2)), -2300, SysTime(Date(-2300, 7, 2))); |
|---|
| | 1178 | |
|---|
| | 1179 | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 12, SysTime(DateTime(12, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| | 1180 | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 12, SysTime(DateTime(12, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1181 | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 0, SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1182 | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), -1, SysTime(DateTime(-1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1183 | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 1, SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1184 | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 999, SysTime(DateTime(999, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1185 | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2010, SysTime(DateTime(2010, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1186 | |
|---|
| | 1187 | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 5, SysTime(DateTime(5, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| | 1188 | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5, SysTime(DateTime(5, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1189 | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 0, SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1190 | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), -507, SysTime(DateTime(-507, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1191 | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2300, SysTime(DateTime(2300, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1192 | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5007, SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1193 | |
|---|
| | 1194 | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 12, SysTime(DateTime(12, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| | 1195 | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 12, SysTime(DateTime(12, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1196 | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 0, SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1197 | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), -1, SysTime(DateTime(-1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1198 | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 1, SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1199 | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 999, SysTime(DateTime(999, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1200 | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2010, SysTime(DateTime(2010, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1201 | |
|---|
| | 1202 | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 5, SysTime(DateTime(5, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| | 1203 | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5, SysTime(DateTime(5, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1204 | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 0, SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1205 | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), -507, SysTime(DateTime(-507, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1206 | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2300, SysTime(DateTime(2300, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1207 | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5007, SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1208 | |
|---|
| | 1209 | testST(SysTime(0, UTC()), 12, SysTime(DateTime(12, 1, 1, 0, 0, 0), UTC())); |
|---|
| | 1210 | |
|---|
| | 1211 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1212 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1213 | static assert(!__traits(compiles, cst.year = 7)); |
|---|
| | 1214 | //static assert(!__traits(compiles, ist.year = 7)); |
|---|
| | 1215 | |
|---|
| | 1216 | //Verify Examples. |
|---|
| | 1217 | assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).year == 1999); |
|---|
| | 1218 | assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).year == 2010); |
|---|
| | 1219 | assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).year == -7); |
|---|
| | 1220 | } |
|---|
| | 1221 | } |
|---|
| | 1222 | |
|---|
| | 1223 | |
|---|
| | 1224 | /++ |
|---|
| | 1225 | Year B.C. of the Gregorian Calendar counting year 0 as 1 B.C. |
|---|
| | 1226 | |
|---|
| | 1227 | Throws: |
|---|
| | 1228 | DateTimeException if $(D isAD) is true. |
|---|
| | 1229 | |
|---|
| | 1230 | Examples: |
|---|
| | 1231 | -------------------- |
|---|
| | 1232 | assert(SysTime(DateTime(0, 1, 1, 12, 30, 33)).yearBC == 1); |
|---|
| | 1233 | assert(SysTime(DateTime(-1, 1, 1, 10, 7, 2)).yearBC == 2); |
|---|
| | 1234 | assert(SysTime(DateTime(-100, 1, 1, 4, 59, 0)).yearBC == 101); |
|---|
| | 1235 | -------------------- |
|---|
| | 1236 | +/ |
|---|
| | 1237 | @property ushort yearBC() const |
|---|
| | 1238 | { |
|---|
| | 1239 | return (cast(Date)this).yearBC; |
|---|
| | 1240 | } |
|---|
| | 1241 | |
|---|
| | 1242 | unittest |
|---|
| | 1243 | { |
|---|
| | 1244 | version(testStdDateTime) |
|---|
| | 1245 | { |
|---|
| | 1246 | assertThrown!DateTimeException((in SysTime st){st.yearBC;}(SysTime(Date(1, 1, 1), UTC()))); |
|---|
| | 1247 | assertThrown!DateTimeException((in SysTime st){st.yearBC;}(SysTime(0, UTC()))); |
|---|
| | 1248 | assertThrown!DateTimeException((in SysTime st){st.yearBC;}(SysTime(1, UTC()))); |
|---|
| | 1249 | |
|---|
| | 1250 | assertPred!"=="(SysTime(-1, UTC()).yearBC, 1); |
|---|
| | 1251 | assertPred!"=="(SysTime(DateTime(-12, 1, 1, 0, 0, 0)).yearBC, 13); |
|---|
| | 1252 | |
|---|
| | 1253 | auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1254 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1255 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1256 | static assert(__traits(compiles, st.year = 12)); |
|---|
| | 1257 | static assert(!__traits(compiles, cst.year = 12)); |
|---|
| | 1258 | //static assert(!__traits(compiles, ist.year = 12)); |
|---|
| | 1259 | |
|---|
| | 1260 | //Verify Examples. |
|---|
| | 1261 | assert(SysTime(DateTime(0, 1, 1, 12, 30, 33)).yearBC == 1); |
|---|
| | 1262 | assert(SysTime(DateTime(-1, 1, 1, 10, 7, 2)).yearBC == 2); |
|---|
| | 1263 | assert(SysTime(DateTime(-100, 1, 1, 4, 59, 0)).yearBC == 101); |
|---|
| | 1264 | } |
|---|
| | 1265 | } |
|---|
| | 1266 | |
|---|
| | 1267 | |
|---|
| | 1268 | /++ |
|---|
| | 1269 | Year B.C. of the Gregorian Calendar counting year 0 as 1 B.C. |
|---|
| | 1270 | |
|---|
| | 1271 | Params: |
|---|
| | 1272 | year = The year B.C. to set this SysTime's year to. |
|---|
| | 1273 | |
|---|
| | 1274 | Throws: |
|---|
| | 1275 | DateTimeException if a non-positive value is given. |
|---|
| | 1276 | |
|---|
| | 1277 | Examples: |
|---|
| | 1278 | -------------------- |
|---|
| | 1279 | auto st = SysTime(DateTime(2010, 1, 1, 7, 30, 0)); |
|---|
| | 1280 | st.yearBC = 1; |
|---|
| | 1281 | assert(st == SysTime(DateTime(0, 1, 1, 7, 30, 0))); |
|---|
| | 1282 | |
|---|
| | 1283 | st.yearBC = 10; |
|---|
| | 1284 | assert(st == SysTime(DateTime(-9, 1, 1, 7, 30, 0))); |
|---|
| | 1285 | -------------------- |
|---|
| | 1286 | +/ |
|---|
| | 1287 | @property void yearBC(int year) |
|---|
| | 1288 | { |
|---|
| | 1289 | auto hnsecs = adjTime; |
|---|
| | 1290 | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| | 1291 | |
|---|
| | 1292 | if(hnsecs < 0) |
|---|
| | 1293 | { |
|---|
| | 1294 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 1295 | --days; |
|---|
| | 1296 | } |
|---|
| | 1297 | |
|---|
| | 1298 | auto date = Date(cast(int)days); |
|---|
| | 1299 | date.yearBC = year; |
|---|
| | 1300 | |
|---|
| | 1301 | immutable newDaysHNSecs = convert!("days", "hnsecs")(date.dayOfGregorianCal - 1); |
|---|
| | 1302 | |
|---|
| | 1303 | adjTime = newDaysHNSecs + hnsecs; |
|---|
| | 1304 | } |
|---|
| | 1305 | |
|---|
| | 1306 | unittest |
|---|
| | 1307 | { |
|---|
| | 1308 | version(testStdDateTime) |
|---|
| | 1309 | { |
|---|
| | 1310 | static void testSTInvalid(SysTime st, int year) |
|---|
| | 1311 | { |
|---|
| | 1312 | st.yearBC = year; |
|---|
| | 1313 | } |
|---|
| | 1314 | |
|---|
| | 1315 | static void testST(SysTime st, int year, in SysTime expected, size_t line = __LINE__) |
|---|
| | 1316 | { |
|---|
| | 1317 | st.yearBC = year; |
|---|
| | 1318 | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| | 1319 | } |
|---|
| | 1320 | |
|---|
| | 1321 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 1, 1)), 0)); |
|---|
| | 1322 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 1, 1)), -1)); |
|---|
| | 1323 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 1, 1)), -1202)); |
|---|
| | 1324 | |
|---|
| | 1325 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), 1999, SysTime(Date(-1998, 1, 1))); |
|---|
| | 1326 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), 1, SysTime(Date(0, 1, 1))); |
|---|
| | 1327 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1999, SysTime(DateTime(-1998, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1328 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1329 | |
|---|
| | 1330 | testST(SysTime(Date(1, 7, 2)), 12, SysTime(Date(-11, 7, 2))); |
|---|
| | 1331 | testST(SysTime(Date(5007, 7, 2)), 5, SysTime(Date(-4, 7, 2))); |
|---|
| | 1332 | testST(SysTime(Date(0, 7, 2)), 999, SysTime(Date(-998, 7, 2))); |
|---|
| | 1333 | testST(SysTime(Date(-1202, 7, 2)), 2300, SysTime(Date(-2299, 7, 2))); |
|---|
| | 1334 | |
|---|
| | 1335 | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 12, SysTime(DateTime(-11, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| | 1336 | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 12, SysTime(DateTime(-11, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1337 | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 1, SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1338 | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 999, SysTime(DateTime(-998, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1339 | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2010, SysTime(DateTime(-2009, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1340 | |
|---|
| | 1341 | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 5, SysTime(DateTime(-4, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| | 1342 | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5, SysTime(DateTime(-4, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1343 | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2300, SysTime(DateTime(-2299, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1344 | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5007, SysTime(DateTime(-5006, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1345 | |
|---|
| | 1346 | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 12, SysTime(DateTime(-11, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| | 1347 | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 12, SysTime(DateTime(-11, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1348 | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 1, SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1349 | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 999, SysTime(DateTime(-998, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1350 | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2010, SysTime(DateTime(-2009, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1351 | |
|---|
| | 1352 | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 5, SysTime(DateTime(-4, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| | 1353 | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5, SysTime(DateTime(-4, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1354 | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2300, SysTime(DateTime(-2299, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1355 | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5007, SysTime(DateTime(-5006, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| | 1356 | |
|---|
| | 1357 | testST(SysTime(0, UTC()), 12, SysTime(DateTime(-11, 1, 1, 0, 0, 0), UTC())); |
|---|
| | 1358 | |
|---|
| | 1359 | { |
|---|
| | 1360 | auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1361 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1362 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1363 | static assert(__traits(compiles, st.yearBC = 12)); |
|---|
| | 1364 | static assert(!__traits(compiles, cst.yearBC = 12)); |
|---|
| | 1365 | //static assert(!__traits(compiles, ist.yearBC = 12)); |
|---|
| | 1366 | } |
|---|
| | 1367 | |
|---|
| | 1368 | //Verify Examples. |
|---|
| | 1369 | { |
|---|
| | 1370 | auto st = SysTime(DateTime(2010, 1, 1, 7, 30, 0)); |
|---|
| | 1371 | st.yearBC = 1; |
|---|
| | 1372 | assert(st == SysTime(DateTime(0, 1, 1, 7, 30, 0))); |
|---|
| | 1373 | |
|---|
| | 1374 | st.yearBC = 10; |
|---|
| | 1375 | assert(st == SysTime(DateTime(-9, 1, 1, 7, 30, 0))); |
|---|
| | 1376 | } |
|---|
| | 1377 | } |
|---|
| | 1378 | } |
|---|
| | 1379 | |
|---|
| | 1380 | |
|---|
| | 1381 | /++ |
|---|
| | 1382 | Month of a Gregorian Year. |
|---|
| | 1383 | |
|---|
| | 1384 | Examples: |
|---|
| | 1385 | -------------------- |
|---|
| | 1386 | assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).month == 7); |
|---|
| | 1387 | assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).month == 10); |
|---|
| | 1388 | assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).month == 4); |
|---|
| | 1389 | -------------------- |
|---|
| | 1390 | +/ |
|---|
| | 1391 | @property Month month() const nothrow |
|---|
| | 1392 | { |
|---|
| | 1393 | return (cast(Date)this).month; |
|---|
| | 1394 | } |
|---|
| | 1395 | |
|---|
| | 1396 | unittest |
|---|
| | 1397 | { |
|---|
| | 1398 | version(testStdDateTime) |
|---|
| | 1399 | { |
|---|
| | 1400 | assertPred!"=="(SysTime(0, UTC()).month, 1); |
|---|
| | 1401 | assertPred!"=="(SysTime(1, UTC()).month, 1); |
|---|
| | 1402 | assertPred!"=="(SysTime(-1, UTC()).month, 12); |
|---|
| | 1403 | assertPred!"=="(SysTime(DateTime(1, 12, 1, 0, 0, 0)).month, 12); |
|---|
| | 1404 | assertPred!"=="(SysTime(DateTime(0, 12, 1, 0, 0, 0)).month, 12); |
|---|
| | 1405 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)).month, 7); |
|---|
| | 1406 | assertPred!"=="(SysTime(DateTime(-1999, 7, 6, 12, 30, 33)).month, 7); |
|---|
| | 1407 | |
|---|
| | 1408 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1409 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1410 | static assert(__traits(compiles, cst.month)); |
|---|
| | 1411 | //static assert(__traits(compiles, ist.month)); |
|---|
| | 1412 | |
|---|
| | 1413 | //Verify Examples. |
|---|
| | 1414 | assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).month == 7); |
|---|
| | 1415 | assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).month == 10); |
|---|
| | 1416 | assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).month == 4); |
|---|
| | 1417 | } |
|---|
| | 1418 | } |
|---|
| | 1419 | |
|---|
| | 1420 | |
|---|
| | 1421 | /++ |
|---|
| | 1422 | Month of a Gregorian Year. |
|---|
| | 1423 | |
|---|
| | 1424 | Params: |
|---|
| | 1425 | month = The month to set this SysTime's month to. |
|---|
| | 1426 | |
|---|
| | 1427 | Throws: |
|---|
| | 1428 | DateTimeException if the given month is not a valid month. |
|---|
| | 1429 | +/ |
|---|
| | 1430 | @property void month(Month month) |
|---|
| | 1431 | { |
|---|
| | 1432 | auto hnsecs = adjTime; |
|---|
| | 1433 | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| | 1434 | |
|---|
| | 1435 | if(hnsecs < 0) |
|---|
| | 1436 | { |
|---|
| | 1437 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 1438 | --days; |
|---|
| | 1439 | } |
|---|
| | 1440 | |
|---|
| | 1441 | auto date = Date(cast(int)days); |
|---|
| | 1442 | date.month = month; |
|---|
| | 1443 | |
|---|
| | 1444 | immutable newDaysHNSecs = convert!("days", "hnsecs")(date.dayOfGregorianCal - 1); |
|---|
| | 1445 | |
|---|
| | 1446 | adjTime = newDaysHNSecs + hnsecs; |
|---|
| | 1447 | } |
|---|
| | 1448 | |
|---|
| | 1449 | unittest |
|---|
| | 1450 | { |
|---|
| | 1451 | version(testStdDateTime) |
|---|
| | 1452 | { |
|---|
| | 1453 | static void testSTInvalid(SysTime st, Month month) |
|---|
| | 1454 | { |
|---|
| | 1455 | st.month = month; |
|---|
| | 1456 | } |
|---|
| | 1457 | |
|---|
| | 1458 | static void testST(SysTime st, Month month, in SysTime expected, size_t line = __LINE__) |
|---|
| | 1459 | { |
|---|
| | 1460 | st.month = month; |
|---|
| | 1461 | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| | 1462 | } |
|---|
| | 1463 | |
|---|
| | 1464 | assertThrown!DateTimeException(testSTInvalid(SysTime(DateTime(1, 1, 1, 12, 30, 33)), cast(Month)0)); |
|---|
| | 1465 | assertThrown!DateTimeException(testSTInvalid(SysTime(DateTime(1, 1, 1, 12, 30, 33)), cast(Month)13)); |
|---|
| | 1466 | assertThrown!DateTimeException(testSTInvalid(SysTime(DateTime(1, 1, 29, 12, 30, 33)), cast(Month)2)); |
|---|
| | 1467 | assertThrown!DateTimeException(testSTInvalid(SysTime(DateTime(1, 7, 31, 12, 30, 33)), cast(Month)6)); |
|---|
| | 1468 | assertThrown!DateTimeException(testSTInvalid(SysTime(DateTime(4, 7, 30, 12, 30, 33)), cast(Month)2)); |
|---|
| | 1469 | |
|---|
| | 1470 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), cast(Month)1, SysTime(Date(1, 1, 1))); |
|---|
| | 1471 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), cast(Month)7, SysTime(Date(1, 7, 1))); |
|---|
| | 1472 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), cast(Month)12, SysTime(Date(1, 12, 1))); |
|---|
| | 1473 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1474 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)7, SysTime(DateTime(1, 7, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1475 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)12, SysTime(DateTime(1, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1476 | |
|---|
| | 1477 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), cast(Month)1, SysTime(Date(0, 1, 1))); |
|---|
| | 1478 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), cast(Month)7, SysTime(Date(0, 7, 1))); |
|---|
| | 1479 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), cast(Month)12, SysTime(Date(0, 12, 1))); |
|---|
| | 1480 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)1, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1481 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)7, SysTime(DateTime(0, 7, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1482 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)12, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1483 | |
|---|
| | 1484 | testST(SysTime(Date(1, 7, 2)), cast(Month)12, SysTime(Date(1, 12, 2))); |
|---|
| | 1485 | testST(SysTime(Date(5007, 7, 2)), cast(Month)5, SysTime(Date(5007, 5, 2))); |
|---|
| | 1486 | testST(SysTime(Date(0, 7, 2)), cast(Month)7, SysTime(Date(0, 7, 2))); |
|---|
| | 1487 | testST(SysTime(Date(-1202, 7, 2)), cast(Month)1, SysTime(Date(-1202, 1, 2))); |
|---|
| | 1488 | |
|---|
| | 1489 | testST(SysTime(DateTime(1, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(0)), cast(Month)12, SysTime(DateTime(1, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(0))); |
|---|
| | 1490 | testST(SysTime(DateTime(1, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(1)), cast(Month)12, SysTime(DateTime(1, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(1))); |
|---|
| | 1491 | testST(SysTime(DateTime(1, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(2)), cast(Month)7, SysTime(DateTime(1, 7, 29, 9, 13, 2), FracSec.from!"hnsecs"(2))); |
|---|
| | 1492 | testST(SysTime(DateTime(1, 11, 28, 10, 13, 2), FracSec.from!"hnsecs"(3)), cast(Month)1, SysTime(DateTime(1, 1, 28, 10, 13, 2), FracSec.from!"hnsecs"(3))); |
|---|
| | 1493 | testST(SysTime(DateTime(1, 1, 28, 10, 13, 2), FracSec.from!"hnsecs"(4)), cast(Month)2, SysTime(DateTime(1, 2, 28, 10, 13, 2), FracSec.from!"hnsecs"(4))); |
|---|
| | 1494 | testST(SysTime(DateTime(1, 7, 28, 10, 13, 2), FracSec.from!"hnsecs"(5)),cast(Month) 6, SysTime(DateTime(1, 6, 28, 10, 13, 2), FracSec.from!"hnsecs"(5))); |
|---|
| | 1495 | testST(SysTime(DateTime(4, 7, 29, 10, 13, 2), FracSec.from!"hnsecs"(6)), cast(Month)2, SysTime(DateTime(4, 2, 29, 10, 13, 2), FracSec.from!"hnsecs"(6))); |
|---|
| | 1496 | testST(SysTime(DateTime(4, 7, 31, 10, 13, 2), FracSec.from!"hnsecs"(6)), cast(Month)8, SysTime(DateTime(4, 8, 31, 10, 13, 2), FracSec.from!"hnsecs"(6))); |
|---|
| | 1497 | |
|---|
| | 1498 | testST(SysTime(DateTime(1207, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(0)), cast(Month)12, SysTime(DateTime(1207, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(0))); |
|---|
| | 1499 | testST(SysTime(DateTime(1207, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(11)), cast(Month)12, SysTime(DateTime(1207, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(11))); |
|---|
| | 1500 | testST(SysTime(DateTime(1207, 12, 29, 9, 12, 3), FracSec.from!"hnsecs"(10)), cast(Month)7, SysTime(DateTime(1207, 7, 29, 9, 12, 3), FracSec.from!"hnsecs"(10))); |
|---|
| | 1501 | testST(SysTime(DateTime(1207, 11, 28, 10, 12, 3), FracSec.from!"hnsecs"(9)), cast(Month)1, SysTime(DateTime(1207, 1, 28, 10, 12, 3), FracSec.from!"hnsecs"(9))); |
|---|
| | 1502 | testST(SysTime(DateTime(1207, 1, 28, 10, 12, 3), FracSec.from!"hnsecs"(8)), cast(Month)2, SysTime(DateTime(1207, 2, 28, 10, 12, 3), FracSec.from!"hnsecs"(8))); |
|---|
| | 1503 | testST(SysTime(DateTime(1207, 7, 28, 10, 12, 3), FracSec.from!"hnsecs"(7)), cast(Month)6, SysTime(DateTime(1207, 6, 28, 10, 12, 3), FracSec.from!"hnsecs"(7))); |
|---|
| | 1504 | |
|---|
| | 1505 | testST(SysTime(DateTime(0, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(0)), cast(Month)12, SysTime(DateTime(0, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(0))); |
|---|
| | 1506 | testST(SysTime(DateTime(0, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(1)), cast(Month)12, SysTime(DateTime(0, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(1))); |
|---|
| | 1507 | testST(SysTime(DateTime(0, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(2)), cast(Month)7, SysTime(DateTime(0, 7, 29, 9, 13, 2), FracSec.from!"hnsecs"(2))); |
|---|
| | 1508 | testST(SysTime(DateTime(0, 11, 28, 10, 13, 2), FracSec.from!"hnsecs"(3)), cast(Month)1, SysTime(DateTime(0, 1, 28, 10, 13, 2), FracSec.from!"hnsecs"(3))); |
|---|
| | 1509 | testST(SysTime(DateTime(0, 1, 28, 10, 13, 2), FracSec.from!"hnsecs"(4)), cast(Month)2, SysTime(DateTime(0, 2, 28, 10, 13, 2), FracSec.from!"hnsecs"(4))); |
|---|
| | 1510 | testST(SysTime(DateTime(0, 7, 28, 10, 13, 2), FracSec.from!"hnsecs"(5)), cast(Month)6, SysTime(DateTime(0, 6, 28, 10, 13, 2), FracSec.from!"hnsecs"(5))); |
|---|
| | 1511 | |
|---|
| | 1512 | testST(SysTime(DateTime(0, 12, 30, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)11, SysTime(DateTime(0, 11, 30, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1513 | testST(SysTime(DateTime(-1, 7, 28, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)2, SysTime(DateTime(-1, 2, 28, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1514 | testST(SysTime(DateTime(0, 7, 29, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)2, SysTime(DateTime(0, 2, 29, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1515 | testST(SysTime(DateTime(0, 7, 29, 10, 13, 2), FracSec.from!"hnsecs"(6)), cast(Month)2, SysTime(DateTime(0, 2, 29, 10, 13, 2), FracSec.from!"hnsecs"(6))); |
|---|
| | 1516 | testST(SysTime(DateTime(0, 7, 31, 10, 13, 2), FracSec.from!"hnsecs"(6)), cast(Month)8, SysTime(DateTime(0, 8, 31, 10, 13, 2), FracSec.from!"hnsecs"(6))); |
|---|
| | 1517 | |
|---|
| | 1518 | testST(SysTime(DateTime(-9999, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(0)), cast(Month)12, SysTime(DateTime(-9999, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(0))); |
|---|
| | 1519 | testST(SysTime(DateTime(-9999, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(11)), cast(Month)12, SysTime(DateTime(-9999, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(11))); |
|---|
| | 1520 | testST(SysTime(DateTime(-9999, 12, 29, 9, 12, 3), FracSec.from!"hnsecs"(10)), cast(Month)7, SysTime(DateTime(-9999, 7, 29, 9, 12, 3), FracSec.from!"hnsecs"(10))); |
|---|
| | 1521 | testST(SysTime(DateTime(-9999, 11, 28, 10, 12, 3), FracSec.from!"hnsecs"(9)), cast(Month)1, SysTime(DateTime(-9999, 1, 28, 10, 12, 3), FracSec.from!"hnsecs"(9))); |
|---|
| | 1522 | testST(SysTime(DateTime(-9999, 1, 28, 10, 12, 3), FracSec.from!"hnsecs"(8)), cast(Month)2, SysTime(DateTime(-9999, 2, 28, 10, 12, 3), FracSec.from!"hnsecs"(8))); |
|---|
| | 1523 | testST(SysTime(DateTime(-9999, 7, 28, 10, 12, 3), FracSec.from!"hnsecs"(7)), cast(Month)6, SysTime(DateTime(-9999, 6, 28, 10, 12, 3), FracSec.from!"hnsecs"(7))); |
|---|
| | 1524 | |
|---|
| | 1525 | testST(SysTime(0, UTC()), cast(Month)12, SysTime(DateTime(1, 12, 1, 0, 0, 0), UTC())); |
|---|
| | 1526 | |
|---|
| | 1527 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1528 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1529 | static assert(!__traits(compiles, cst.month = 12)); |
|---|
| | 1530 | //static assert(!__traits(compiles, ist.month = 12)); |
|---|
| | 1531 | } |
|---|
| | 1532 | } |
|---|
| | 1533 | |
|---|
| | 1534 | |
|---|
| | 1535 | /++ |
|---|
| | 1536 | Day of a Gregorian Month. |
|---|
| | 1537 | |
|---|
| | 1538 | Examples: |
|---|
| | 1539 | -------------------- |
|---|
| | 1540 | assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).day == 6); |
|---|
| | 1541 | assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).day == 4); |
|---|
| | 1542 | assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).day == 5); |
|---|
| | 1543 | -------------------- |
|---|
| | 1544 | +/ |
|---|
| | 1545 | @property ubyte day() const nothrow |
|---|
| | 1546 | { |
|---|
| | 1547 | return (cast(Date)this).day; |
|---|
| | 1548 | } |
|---|
| | 1549 | |
|---|
| | 1550 | unittest |
|---|
| | 1551 | { |
|---|
| | 1552 | version(testStdDateTime) |
|---|
| | 1553 | { |
|---|
| | 1554 | assertPred!"=="(SysTime(0, UTC()).day, 1); |
|---|
| | 1555 | assertPred!"=="(SysTime(1, UTC()).day, 1); |
|---|
| | 1556 | assertPred!"=="(SysTime(-1, UTC()).day, 31); |
|---|
| | 1557 | assertPred!"=="(SysTime(DateTime(50, 2, 4)).day, 4); |
|---|
| | 1558 | assertPred!"=="(SysTime(DateTime(50, 2, 4, 0, 0, 1)).day, 4); |
|---|
| | 1559 | assertPred!"=="(SysTime(DateTime(1999, 7, 6)).day, 6); |
|---|
| | 1560 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 0, 0, 0)).day, 6); |
|---|
| | 1561 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)).day, 6); |
|---|
| | 1562 | assertPred!"=="(SysTime(DateTime(-50, 2, 4)).day, 4); |
|---|
| | 1563 | assertPred!"=="(SysTime(DateTime(-50, 2, 4, 0, 0, 1)).day, 4); |
|---|
| | 1564 | assertPred!"=="(SysTime(Date(-1999, 7, 6)).day, 6); |
|---|
| | 1565 | assertPred!"=="(SysTime(DateTime(-1999, 7, 6, 0, 0, 0)).day, 6); |
|---|
| | 1566 | assertPred!"=="(SysTime(DateTime(-1999, 7, 6, 12, 30, 33)).day, 6); |
|---|
| | 1567 | |
|---|
| | 1568 | assertPred!"=="(SysTime(DateTime(1, 1, 12, 0, 0, 0)).day, 12); |
|---|
| | 1569 | assertPred!"=="(SysTime(DateTime(0, 1, 12, 0, 0, 0)).day, 12); |
|---|
| | 1570 | |
|---|
| | 1571 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1572 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1573 | static assert(__traits(compiles, cst.day)); |
|---|
| | 1574 | //static assert(__traits(compiles, ist.day)); |
|---|
| | 1575 | |
|---|
| | 1576 | //Verify Examples. |
|---|
| | 1577 | assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).day == 6); |
|---|
| | 1578 | assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).day == 4); |
|---|
| | 1579 | assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).day == 5); |
|---|
| | 1580 | } |
|---|
| | 1581 | } |
|---|
| | 1582 | |
|---|
| | 1583 | |
|---|
| | 1584 | /++ |
|---|
| | 1585 | Day of a Gregorian Month. |
|---|
| | 1586 | |
|---|
| | 1587 | Params: |
|---|
| | 1588 | day = The day of the month to set this SysTime's day to. |
|---|
| | 1589 | |
|---|
| | 1590 | Throws: |
|---|
| | 1591 | DateTimeException if the given day is not a valid day of the current |
|---|
| | 1592 | month. |
|---|
| | 1593 | +/ |
|---|
| | 1594 | @property void day(int day) |
|---|
| | 1595 | { |
|---|
| | 1596 | auto hnsecs = adjTime; |
|---|
| | 1597 | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| | 1598 | |
|---|
| | 1599 | if(hnsecs < 0) |
|---|
| | 1600 | { |
|---|
| | 1601 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 1602 | --days; |
|---|
| | 1603 | } |
|---|
| | 1604 | |
|---|
| | 1605 | auto date = Date(cast(int)days); |
|---|
| | 1606 | date.day = day; |
|---|
| | 1607 | |
|---|
| | 1608 | immutable newDaysHNSecs = convert!("days", "hnsecs")(date.dayOfGregorianCal - 1); |
|---|
| | 1609 | |
|---|
| | 1610 | adjTime = newDaysHNSecs + hnsecs; |
|---|
| | 1611 | } |
|---|
| | 1612 | |
|---|
| | 1613 | unittest |
|---|
| | 1614 | { |
|---|
| | 1615 | version(testStdDateTime) |
|---|
| | 1616 | { |
|---|
| | 1617 | static void testSTInvalid(SysTime st, int day) |
|---|
| | 1618 | { |
|---|
| | 1619 | st.day = day; |
|---|
| | 1620 | } |
|---|
| | 1621 | |
|---|
| | 1622 | static void testST(SysTime st, int day, in SysTime expected, size_t line = __LINE__) |
|---|
| | 1623 | { |
|---|
| | 1624 | st.day = day; |
|---|
| | 1625 | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| | 1626 | } |
|---|
| | 1627 | |
|---|
| | 1628 | //Test A.D. |
|---|
| | 1629 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 1, 1)), 0)); |
|---|
| | 1630 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 1, 1)), 32)); |
|---|
| | 1631 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 2, 1)), 29)); |
|---|
| | 1632 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(4, 2, 1)), 30)); |
|---|
| | 1633 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 3, 1)), 32)); |
|---|
| | 1634 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 4, 1)), 31)); |
|---|
| | 1635 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 5, 1)), 32)); |
|---|
| | 1636 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 6, 1)), 31)); |
|---|
| | 1637 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 7, 1)), 32)); |
|---|
| | 1638 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 8, 1)), 32)); |
|---|
| | 1639 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 9, 1)), 31)); |
|---|
| | 1640 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 10, 1)), 32)); |
|---|
| | 1641 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 11, 1)), 31)); |
|---|
| | 1642 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 12, 1)), 32)); |
|---|
| | 1643 | |
|---|
| | 1644 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 1, 1)), 31)); |
|---|
| | 1645 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 2, 1)), 28)); |
|---|
| | 1646 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(4, 2, 1)), 29)); |
|---|
| | 1647 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 3, 1)), 31)); |
|---|
| | 1648 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 4, 1)), 30)); |
|---|
| | 1649 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 5, 1)), 31)); |
|---|
| | 1650 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 6, 1)), 30)); |
|---|
| | 1651 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 7, 1)), 31)); |
|---|
| | 1652 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 8, 1)), 31)); |
|---|
| | 1653 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 9, 1)), 30)); |
|---|
| | 1654 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 10, 1)), 31)); |
|---|
| | 1655 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 11, 1)), 30)); |
|---|
| | 1656 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 12, 1)), 31)); |
|---|
| | 1657 | |
|---|
| | 1658 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), 1, SysTime(Date(1, 1, 1))); |
|---|
| | 1659 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), 7, SysTime(Date(1, 1, 7))); |
|---|
| | 1660 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), 12, SysTime(Date(1, 1, 12))); |
|---|
| | 1661 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1662 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 1, 7, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1663 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 1, 12, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1664 | |
|---|
| | 1665 | testST(SysTime(Date(1, 7, 2)), 12, SysTime(Date(1, 7, 12))); |
|---|
| | 1666 | testST(SysTime(Date(5007, 7, 2)), 5, SysTime(Date(5007, 7, 5))); |
|---|
| | 1667 | |
|---|
| | 1668 | testST(SysTime(DateTime(1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(1, 1, 6, 12, 22, 17), FracSec.from!"hnsecs"(7))); |
|---|
| | 1669 | testST(SysTime(DateTime(1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70))); |
|---|
| | 1670 | testST(SysTime(DateTime(1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700))); |
|---|
| | 1671 | testST(SysTime(DateTime(1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(1, 2, 5, 12, 22, 17), FracSec.from!"hnsecs"(7000))); |
|---|
| | 1672 | testST(SysTime(DateTime(1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000))); |
|---|
| | 1673 | testST(SysTime(DateTime(1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 29, SysTime(DateTime(1, 12, 29, 12, 22, 17), FracSec.from!"hnsecs"(700_000))); |
|---|
| | 1674 | |
|---|
| | 1675 | testST(SysTime(DateTime(999, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(999, 1, 6, 12, 22, 17), FracSec.from!"hnsecs"(9))); |
|---|
| | 1676 | testST(SysTime(DateTime(999, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(999, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90))); |
|---|
| | 1677 | testST(SysTime(DateTime(999, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(999, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900))); |
|---|
| | 1678 | testST(SysTime(DateTime(999, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(999, 2, 5, 12, 22, 17), FracSec.from!"hnsecs"(9000))); |
|---|
| | 1679 | testST(SysTime(DateTime(999, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(999, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000))); |
|---|
| | 1680 | testST(SysTime(DateTime(999, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 29, SysTime(DateTime(999, 12, 29, 12, 22, 17), FracSec.from!"hnsecs"(900_000))); |
|---|
| | 1681 | |
|---|
| | 1682 | //Test B.C. |
|---|
| | 1683 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 1, 1)), 0)); |
|---|
| | 1684 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 1, 1)), 32)); |
|---|
| | 1685 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 2, 1)), 29)); |
|---|
| | 1686 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(0, 2, 1)), 30)); |
|---|
| | 1687 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 3, 1)), 32)); |
|---|
| | 1688 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 4, 1)), 31)); |
|---|
| | 1689 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 5, 1)), 32)); |
|---|
| | 1690 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 6, 1)), 31)); |
|---|
| | 1691 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 7, 1)), 32)); |
|---|
| | 1692 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 8, 1)), 32)); |
|---|
| | 1693 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 9, 1)), 31)); |
|---|
| | 1694 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 10, 1)), 32)); |
|---|
| | 1695 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 11, 1)), 31)); |
|---|
| | 1696 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 12, 1)), 32)); |
|---|
| | 1697 | |
|---|
| | 1698 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 1, 1)), 31)); |
|---|
| | 1699 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 2, 1)), 28)); |
|---|
| | 1700 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(0, 2, 1)), 29)); |
|---|
| | 1701 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 3, 1)), 31)); |
|---|
| | 1702 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 4, 1)), 30)); |
|---|
| | 1703 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 5, 1)), 31)); |
|---|
| | 1704 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 6, 1)), 30)); |
|---|
| | 1705 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 7, 1)), 31)); |
|---|
| | 1706 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 8, 1)), 31)); |
|---|
| | 1707 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 9, 1)), 30)); |
|---|
| | 1708 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 10, 1)), 31)); |
|---|
| | 1709 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 11, 1)), 30)); |
|---|
| | 1710 | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 12, 1)), 31)); |
|---|
| | 1711 | |
|---|
| | 1712 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), 1, SysTime(Date(0, 1, 1))); |
|---|
| | 1713 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), 7, SysTime(Date(0, 1, 7))); |
|---|
| | 1714 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), 12, SysTime(Date(0, 1, 12))); |
|---|
| | 1715 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1716 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 1, 7, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1717 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 1, 12, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1718 | |
|---|
| | 1719 | testST(SysTime(Date(0, 7, 2)), 7, SysTime(Date(0, 7, 7))); |
|---|
| | 1720 | testST(SysTime(Date(-1202, 7, 2)), 1, SysTime(Date(-1202, 7, 1))); |
|---|
| | 1721 | |
|---|
| | 1722 | testST(SysTime(DateTime(0, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(0, 1, 6, 12, 22, 17), FracSec.from!"hnsecs"(7))); |
|---|
| | 1723 | testST(SysTime(DateTime(0, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(0, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70))); |
|---|
| | 1724 | testST(SysTime(DateTime(0, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(0, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700))); |
|---|
| | 1725 | testST(SysTime(DateTime(0, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(0, 2, 5, 12, 22, 17), FracSec.from!"hnsecs"(7000))); |
|---|
| | 1726 | testST(SysTime(DateTime(0, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(0, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000))); |
|---|
| | 1727 | testST(SysTime(DateTime(0, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 29, SysTime(DateTime(0, 12, 29, 12, 22, 17), FracSec.from!"hnsecs"(700_000))); |
|---|
| | 1728 | |
|---|
| | 1729 | testST(SysTime(DateTime(-1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(-1, 1, 6, 12, 22, 17), FracSec.from!"hnsecs"(9))); |
|---|
| | 1730 | testST(SysTime(DateTime(-1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(-1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90))); |
|---|
| | 1731 | testST(SysTime(DateTime(-1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(-1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900))); |
|---|
| | 1732 | testST(SysTime(DateTime(-1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(-1, 2, 5, 12, 22, 17), FracSec.from!"hnsecs"(9000))); |
|---|
| | 1733 | testST(SysTime(DateTime(-1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(-1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000))); |
|---|
| | 1734 | testST(SysTime(DateTime(-1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 29, SysTime(DateTime(-1, 12, 29, 12, 22, 17), FracSec.from!"hnsecs"(900_000))); |
|---|
| | 1735 | |
|---|
| | 1736 | testST(SysTime(0, UTC()), 12, SysTime(DateTime(1, 1, 12, 0, 0, 0), UTC())); |
|---|
| | 1737 | |
|---|
| | 1738 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1739 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1740 | static assert(!__traits(compiles, cst.day = 27)); |
|---|
| | 1741 | //static assert(!__traits(compiles, ist.day = 27)); |
|---|
| | 1742 | } |
|---|
| | 1743 | } |
|---|
| | 1744 | |
|---|
| | 1745 | |
|---|
| | 1746 | /++ |
|---|
| | 1747 | Hours past midnight. |
|---|
| | 1748 | +/ |
|---|
| | 1749 | @property ubyte hour() const nothrow |
|---|
| | 1750 | { |
|---|
| | 1751 | auto hnsecs = adjTime; |
|---|
| | 1752 | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| | 1753 | |
|---|
| | 1754 | if(hnsecs < 0) |
|---|
| | 1755 | { |
|---|
| | 1756 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 1757 | --days; |
|---|
| | 1758 | } |
|---|
| | 1759 | |
|---|
| | 1760 | return cast(ubyte)getUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| | 1761 | } |
|---|
| | 1762 | |
|---|
| | 1763 | unittest |
|---|
| | 1764 | { |
|---|
| | 1765 | version(testStdDateTime) |
|---|
| | 1766 | { |
|---|
| | 1767 | assertPred!"=="(SysTime(0, UTC()).hour, 0); |
|---|
| | 1768 | assertPred!"=="(SysTime(1, UTC()).hour, 0); |
|---|
| | 1769 | assertPred!"=="(SysTime(-1, UTC()).hour, 23); |
|---|
| | 1770 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 12, 0, 0)).hour, 12); |
|---|
| | 1771 | assertPred!"=="(SysTime(DateTime(0, 1, 1, 12, 0, 0)).hour, 12); |
|---|
| | 1772 | |
|---|
| | 1773 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1774 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1775 | static assert(__traits(compiles, cst.hour)); |
|---|
| | 1776 | //static assert(__traits(compiles, ist.hour)); |
|---|
| | 1777 | } |
|---|
| | 1778 | } |
|---|
| | 1779 | |
|---|
| | 1780 | |
|---|
| | 1781 | /++ |
|---|
| | 1782 | Hours past midnight. |
|---|
| | 1783 | |
|---|
| | 1784 | Params: |
|---|
| | 1785 | hour = The hours to set this SysTime's hour to. |
|---|
| | 1786 | |
|---|
| | 1787 | Throws: |
|---|
| | 1788 | DateTimeException if the given hour are not a valid hour of the day. |
|---|
| | 1789 | +/ |
|---|
| | 1790 | @property void hour(int hour) |
|---|
| | 1791 | { |
|---|
| | 1792 | enforceValid!"hours"(hour); |
|---|
| | 1793 | |
|---|
| | 1794 | auto hnsecs = adjTime; |
|---|
| | 1795 | auto days = splitUnitsFromHNSecs!"days"(hnsecs); |
|---|
| | 1796 | immutable daysHNSecs = convert!("days", "hnsecs")(days); |
|---|
| | 1797 | immutable negative = hnsecs < 0; |
|---|
| | 1798 | |
|---|
| | 1799 | if(negative) |
|---|
| | 1800 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 1801 | |
|---|
| | 1802 | hnsecs = removeUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| | 1803 | hnsecs += convert!("hours", "hnsecs")(hour); |
|---|
| | 1804 | |
|---|
| | 1805 | if(negative) |
|---|
| | 1806 | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| | 1807 | |
|---|
| | 1808 | adjTime = daysHNSecs + hnsecs; |
|---|
| | 1809 | } |
|---|
| | 1810 | |
|---|
| | 1811 | unittest |
|---|
| | 1812 | { |
|---|
| | 1813 | version(testStdDateTime) |
|---|
| | 1814 | { |
|---|
| | 1815 | static void testSTInvalid(SysTime st, int hour) |
|---|
| | 1816 | { |
|---|
| | 1817 | st.hour = hour; |
|---|
| | 1818 | } |
|---|
| | 1819 | |
|---|
| | 1820 | static void testST(SysTime st, int hour, in SysTime expected, size_t line = __LINE__) |
|---|
| | 1821 | { |
|---|
| | 1822 | st.hour = hour; |
|---|
| | 1823 | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| | 1824 | } |
|---|
| | 1825 | |
|---|
| | 1826 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1999, 7, 6)), 24)); |
|---|
| | 1827 | |
|---|
| | 1828 | //Test A.D. |
|---|
| | 1829 | testST(SysTime(Date(1, 1, 1)), 1, SysTime(DateTime(1, 1, 1, 1, 0, 0))); |
|---|
| | 1830 | testST(SysTime(Date(1, 1, 1)), 7, SysTime(DateTime(1, 1, 1, 7, 0, 0))); |
|---|
| | 1831 | testST(SysTime(Date(1, 1, 1)), 12, SysTime(DateTime(1, 1, 1, 12, 0, 0))); |
|---|
| | 1832 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 1, 1, 1, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1833 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 1, 1, 7, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1834 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 1, 1, 12, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1835 | |
|---|
| | 1836 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(1, 12, 31, 1, 59, 59))); |
|---|
| | 1837 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(1, 12, 31, 7, 59, 59))); |
|---|
| | 1838 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(1, 12, 31, 12, 59, 59))); |
|---|
| | 1839 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 12, 31, 1, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 1840 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 12, 31, 7, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 1841 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 12, 31, 12, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 1842 | |
|---|
| | 1843 | testST(SysTime(Date(1, 7, 2)), 12, SysTime(DateTime(1, 7, 2, 12, 0, 0))); |
|---|
| | 1844 | testST(SysTime(Date(5007, 7, 2)), 5, SysTime(DateTime(5007, 7, 2, 5, 0, 0))); |
|---|
| | 1845 | |
|---|
| | 1846 | testST(SysTime(DateTime(1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(1, 1, 7, 6, 22, 17), FracSec.from!"hnsecs"(7))); |
|---|
| | 1847 | testST(SysTime(DateTime(1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(1, 1, 1, 1, 22, 17), FracSec.from!"hnsecs"(70))); |
|---|
| | 1848 | testST(SysTime(DateTime(1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(1, 2, 1, 1, 22, 17), FracSec.from!"hnsecs"(700))); |
|---|
| | 1849 | testST(SysTime(DateTime(1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(1, 2, 27, 5, 22, 17), FracSec.from!"hnsecs"(7000))); |
|---|
| | 1850 | testST(SysTime(DateTime(1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(1, 12, 1, 1, 22, 17), FracSec.from!"hnsecs"(70_000))); |
|---|
| | 1851 | testST(SysTime(DateTime(1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(1, 12, 31, 23, 22, 17), FracSec.from!"hnsecs"(700_000))); |
|---|
| | 1852 | |
|---|
| | 1853 | testST(SysTime(DateTime(999, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(999, 1, 7, 6, 22, 17), FracSec.from!"hnsecs"(9))); |
|---|
| | 1854 | testST(SysTime(DateTime(999, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(999, 1, 1, 1, 22, 17), FracSec.from!"hnsecs"(90))); |
|---|
| | 1855 | testST(SysTime(DateTime(999, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(999, 2, 1, 1, 22, 17), FracSec.from!"hnsecs"(900))); |
|---|
| | 1856 | testST(SysTime(DateTime(999, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(999, 2, 27, 5, 22, 17), FracSec.from!"hnsecs"(9000))); |
|---|
| | 1857 | testST(SysTime(DateTime(999, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(999, 12, 1, 1, 22, 17), FracSec.from!"hnsecs"(90_000))); |
|---|
| | 1858 | testST(SysTime(DateTime(999, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(999, 12, 31, 23, 22, 17), FracSec.from!"hnsecs"(900_000))); |
|---|
| | 1859 | |
|---|
| | 1860 | //Test B.C. |
|---|
| | 1861 | testST(SysTime(Date(0, 1, 1)), 1, SysTime(DateTime(0, 1, 1, 1, 0, 0))); |
|---|
| | 1862 | testST(SysTime(Date(0, 1, 1)), 7, SysTime(DateTime(0, 1, 1, 7, 0, 0))); |
|---|
| | 1863 | testST(SysTime(Date(0, 1, 1)), 12, SysTime(DateTime(0, 1, 1, 12, 0, 0))); |
|---|
| | 1864 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 1, 1, 1, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1865 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 1, 1, 7, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1866 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 1, 1, 12, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1867 | |
|---|
| | 1868 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(0, 12, 31, 1, 59, 59))); |
|---|
| | 1869 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(0, 12, 31, 7, 59, 59))); |
|---|
| | 1870 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(0, 12, 31, 12, 59, 59))); |
|---|
| | 1871 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 12, 31, 1, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 1872 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 12, 31, 7, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 1873 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 12, 31, 12, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 1874 | |
|---|
| | 1875 | testST(SysTime(Date(0, 7, 2)), 7, SysTime(DateTime(0, 7, 2, 7, 0, 0))); |
|---|
| | 1876 | testST(SysTime(Date(-1202, 7, 2)), 1, SysTime(DateTime(-1202, 7, 2, 1, 0, 0))); |
|---|
| | 1877 | |
|---|
| | 1878 | testST(SysTime(DateTime(0, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(0, 1, 7, 6, 22, 17), FracSec.from!"hnsecs"(7))); |
|---|
| | 1879 | testST(SysTime(DateTime(0, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(0, 1, 1, 1, 22, 17), FracSec.from!"hnsecs"(70))); |
|---|
| | 1880 | testST(SysTime(DateTime(0, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(0, 2, 1, 1, 22, 17), FracSec.from!"hnsecs"(700))); |
|---|
| | 1881 | testST(SysTime(DateTime(0, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(0, 2, 27, 5, 22, 17), FracSec.from!"hnsecs"(7000))); |
|---|
| | 1882 | testST(SysTime(DateTime(0, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(0, 12, 1, 1, 22, 17), FracSec.from!"hnsecs"(70_000))); |
|---|
| | 1883 | testST(SysTime(DateTime(0, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(0, 12, 31, 23, 22, 17), FracSec.from!"hnsecs"(700_000))); |
|---|
| | 1884 | |
|---|
| | 1885 | testST(SysTime(DateTime(-1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(-1, 1, 7, 6, 22, 17), FracSec.from!"hnsecs"(9))); |
|---|
| | 1886 | testST(SysTime(DateTime(-1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(-1, 1, 1, 1, 22, 17), FracSec.from!"hnsecs"(90))); |
|---|
| | 1887 | testST(SysTime(DateTime(-1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(-1, 2, 1, 1, 22, 17), FracSec.from!"hnsecs"(900))); |
|---|
| | 1888 | testST(SysTime(DateTime(-1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(-1, 2, 27, 5, 22, 17), FracSec.from!"hnsecs"(9000))); |
|---|
| | 1889 | testST(SysTime(DateTime(-1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(-1, 12, 1, 1, 22, 17), FracSec.from!"hnsecs"(90_000))); |
|---|
| | 1890 | testST(SysTime(DateTime(-1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(-1, 12, 31, 23, 22, 17), FracSec.from!"hnsecs"(900_000))); |
|---|
| | 1891 | |
|---|
| | 1892 | testST(SysTime(0, UTC()), 12, SysTime(DateTime(1, 1, 1, 12, 0, 0), UTC())); |
|---|
| | 1893 | |
|---|
| | 1894 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1895 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1896 | static assert(!__traits(compiles, cst.hour = 27)); |
|---|
| | 1897 | //static assert(!__traits(compiles, ist.hour = 27)); |
|---|
| | 1898 | } |
|---|
| | 1899 | } |
|---|
| | 1900 | |
|---|
| | 1901 | |
|---|
| | 1902 | /++ |
|---|
| | 1903 | Minutes past the current hour. |
|---|
| | 1904 | +/ |
|---|
| | 1905 | @property ubyte minute() const nothrow |
|---|
| | 1906 | { |
|---|
| | 1907 | auto hnsecs = adjTime; |
|---|
| | 1908 | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| | 1909 | |
|---|
| | 1910 | if(hnsecs < 0) |
|---|
| | 1911 | { |
|---|
| | 1912 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 1913 | --days; |
|---|
| | 1914 | } |
|---|
| | 1915 | |
|---|
| | 1916 | hnsecs = removeUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| | 1917 | |
|---|
| | 1918 | return cast(ubyte)getUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| | 1919 | } |
|---|
| | 1920 | |
|---|
| | 1921 | unittest |
|---|
| | 1922 | { |
|---|
| | 1923 | version(testStdDateTime) |
|---|
| | 1924 | { |
|---|
| | 1925 | assertPred!"=="(SysTime(0, UTC()).minute, 0); |
|---|
| | 1926 | assertPred!"=="(SysTime(1, UTC()).minute, 0); |
|---|
| | 1927 | assertPred!"=="(SysTime(-1, UTC()).minute, 59); |
|---|
| | 1928 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 30, 0)).minute, 30); |
|---|
| | 1929 | assertPred!"=="(SysTime(DateTime(0, 1, 1, 0, 30, 0)).minute, 30); |
|---|
| | 1930 | |
|---|
| | 1931 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1932 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 1933 | static assert(__traits(compiles, cst.minute)); |
|---|
| | 1934 | //static assert(__traits(compiles, ist.minute)); |
|---|
| | 1935 | } |
|---|
| | 1936 | } |
|---|
| | 1937 | |
|---|
| | 1938 | |
|---|
| | 1939 | /++ |
|---|
| | 1940 | Minutes past the current hour. |
|---|
| | 1941 | |
|---|
| | 1942 | Params: |
|---|
| | 1943 | minutes = The minute to set this SysTime's minute to. |
|---|
| | 1944 | |
|---|
| | 1945 | Throws: |
|---|
| | 1946 | DateTimeException if the given minute are not a valid minute of an |
|---|
| | 1947 | hour. |
|---|
| | 1948 | +/ |
|---|
| | 1949 | @property void minute(int minute) |
|---|
| | 1950 | { |
|---|
| | 1951 | enforceValid!"minutes"(minute); |
|---|
| | 1952 | |
|---|
| | 1953 | auto hnsecs = adjTime; |
|---|
| | 1954 | auto days = splitUnitsFromHNSecs!"days"(hnsecs); |
|---|
| | 1955 | immutable daysHNSecs = convert!("days", "hnsecs")(days); |
|---|
| | 1956 | immutable negative = hnsecs < 0; |
|---|
| | 1957 | |
|---|
| | 1958 | if(negative) |
|---|
| | 1959 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 1960 | |
|---|
| | 1961 | immutable hour = splitUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| | 1962 | hnsecs = removeUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| | 1963 | |
|---|
| | 1964 | hnsecs += convert!("hours", "hnsecs")(hour); |
|---|
| | 1965 | hnsecs += convert!("minutes", "hnsecs")(minute); |
|---|
| | 1966 | |
|---|
| | 1967 | if(negative) |
|---|
| | 1968 | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| | 1969 | |
|---|
| | 1970 | adjTime = daysHNSecs + hnsecs; |
|---|
| | 1971 | } |
|---|
| | 1972 | |
|---|
| | 1973 | unittest |
|---|
| | 1974 | { |
|---|
| | 1975 | version(testStdDateTime) |
|---|
| | 1976 | { |
|---|
| | 1977 | static void testSTInvalid(SysTime st, int minute) |
|---|
| | 1978 | { |
|---|
| | 1979 | st.minute = minute; |
|---|
| | 1980 | } |
|---|
| | 1981 | |
|---|
| | 1982 | static void testST(SysTime st, int minute, in SysTime expected, size_t line = __LINE__) |
|---|
| | 1983 | { |
|---|
| | 1984 | st.minute = minute; |
|---|
| | 1985 | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| | 1986 | } |
|---|
| | 1987 | |
|---|
| | 1988 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1999, 7, 6)), 60)); |
|---|
| | 1989 | |
|---|
| | 1990 | //Test A.D. |
|---|
| | 1991 | testST(SysTime(Date(1, 1, 1)), 1, SysTime(DateTime(1, 1, 1, 0, 1, 0))); |
|---|
| | 1992 | testST(SysTime(Date(1, 1, 1)), 7, SysTime(DateTime(1, 1, 1, 0, 7, 0))); |
|---|
| | 1993 | testST(SysTime(Date(1, 1, 1)), 12, SysTime(DateTime(1, 1, 1, 0, 12, 0))); |
|---|
| | 1994 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 1, 1, 0, 1, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1995 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 1, 1, 0, 7, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1996 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 1, 1, 0, 12, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 1997 | |
|---|
| | 1998 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(1, 12, 31, 23, 1, 59))); |
|---|
| | 1999 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(1, 12, 31, 23, 7, 59))); |
|---|
| | 2000 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(1, 12, 31, 23, 12, 59))); |
|---|
| | 2001 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 12, 31, 23, 1, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 2002 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 12, 31, 23, 7, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 2003 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 12, 31, 23, 12, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 2004 | |
|---|
| | 2005 | testST(SysTime(Date(1, 7, 2)), 12, SysTime(DateTime(1, 7, 2, 0, 12, 0))); |
|---|
| | 2006 | testST(SysTime(Date(5007, 7, 2)), 5, SysTime(DateTime(5007, 7, 2, 0, 5, 0))); |
|---|
| | 2007 | |
|---|
| | 2008 | testST(SysTime(DateTime(1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(1, 1, 7, 12, 6, 17), FracSec.from!"hnsecs"(7))); |
|---|
| | 2009 | testST(SysTime(DateTime(1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(1, 1, 1, 12, 1, 17), FracSec.from!"hnsecs"(70))); |
|---|
| | 2010 | testST(SysTime(DateTime(1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(1, 2, 1, 12, 1, 17), FracSec.from!"hnsecs"(700))); |
|---|
| | 2011 | testST(SysTime(DateTime(1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(1, 2, 27, 12, 5, 17), FracSec.from!"hnsecs"(7000))); |
|---|
| | 2012 | testST(SysTime(DateTime(1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(1, 12, 1, 12, 1, 17), FracSec.from!"hnsecs"(70_000))); |
|---|
| | 2013 | testST(SysTime(DateTime(1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(1, 12, 31, 12, 23, 17), FracSec.from!"hnsecs"(700_000))); |
|---|
| | 2014 | |
|---|
| | 2015 | testST(SysTime(DateTime(999, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(999, 1, 7, 12, 6, 17), FracSec.from!"hnsecs"(9))); |
|---|
| | 2016 | testST(SysTime(DateTime(999, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(999, 1, 1, 12, 1, 17), FracSec.from!"hnsecs"(90))); |
|---|
| | 2017 | testST(SysTime(DateTime(999, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(999, 2, 1, 12, 1, 17), FracSec.from!"hnsecs"(900))); |
|---|
| | 2018 | testST(SysTime(DateTime(999, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(999, 2, 27, 12, 5, 17), FracSec.from!"hnsecs"(9000))); |
|---|
| | 2019 | testST(SysTime(DateTime(999, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(999, 12, 1, 12, 1, 17), FracSec.from!"hnsecs"(90_000))); |
|---|
| | 2020 | testST(SysTime(DateTime(999, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(999, 12, 31, 12, 23, 17), FracSec.from!"hnsecs"(900_000))); |
|---|
| | 2021 | |
|---|
| | 2022 | //Test B.C. |
|---|
| | 2023 | testST(SysTime(Date(0, 1, 1)), 1, SysTime(DateTime(0, 1, 1, 0, 1, 0))); |
|---|
| | 2024 | testST(SysTime(Date(0, 1, 1)), 7, SysTime(DateTime(0, 1, 1, 0, 7, 0))); |
|---|
| | 2025 | testST(SysTime(Date(0, 1, 1)), 12, SysTime(DateTime(0, 1, 1, 0, 12, 0))); |
|---|
| | 2026 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 1, 1, 0, 1, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 2027 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 1, 1, 0, 7, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 2028 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 1, 1, 0, 12, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 2029 | |
|---|
| | 2030 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(0, 12, 31, 23, 1, 59))); |
|---|
| | 2031 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(0, 12, 31, 23, 7, 59))); |
|---|
| | 2032 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(0, 12, 31, 23, 12, 59))); |
|---|
| | 2033 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 12, 31, 23, 1, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 2034 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 12, 31, 23, 7, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 2035 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 12, 31, 23, 12, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 2036 | |
|---|
| | 2037 | testST(SysTime(Date(0, 7, 2)), 7, SysTime(DateTime(0, 7, 2, 0, 7, 0))); |
|---|
| | 2038 | testST(SysTime(Date(-1202, 7, 2)), 1, SysTime(DateTime(-1202, 7, 2, 0, 1, 0))); |
|---|
| | 2039 | |
|---|
| | 2040 | testST(SysTime(DateTime(0, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(0, 1, 7, 12, 6, 17), FracSec.from!"hnsecs"(7))); |
|---|
| | 2041 | testST(SysTime(DateTime(0, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(0, 1, 1, 12, 1, 17), FracSec.from!"hnsecs"(70))); |
|---|
| | 2042 | testST(SysTime(DateTime(0, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(0, 2, 1, 12, 1, 17), FracSec.from!"hnsecs"(700))); |
|---|
| | 2043 | testST(SysTime(DateTime(0, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(0, 2, 27, 12, 5, 17), FracSec.from!"hnsecs"(7000))); |
|---|
| | 2044 | testST(SysTime(DateTime(0, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(0, 12, 1, 12, 1, 17), FracSec.from!"hnsecs"(70_000))); |
|---|
| | 2045 | testST(SysTime(DateTime(0, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(0, 12, 31, 12, 23, 17), FracSec.from!"hnsecs"(700_000))); |
|---|
| | 2046 | |
|---|
| | 2047 | testST(SysTime(DateTime(-1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(-1, 1, 7, 12, 6, 17), FracSec.from!"hnsecs"(9))); |
|---|
| | 2048 | testST(SysTime(DateTime(-1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(-1, 1, 1, 12, 1, 17), FracSec.from!"hnsecs"(90))); |
|---|
| | 2049 | testST(SysTime(DateTime(-1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(-1, 2, 1, 12, 1, 17), FracSec.from!"hnsecs"(900))); |
|---|
| | 2050 | testST(SysTime(DateTime(-1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(-1, 2, 27, 12, 5, 17), FracSec.from!"hnsecs"(9000))); |
|---|
| | 2051 | testST(SysTime(DateTime(-1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(-1, 12, 1, 12, 1, 17), FracSec.from!"hnsecs"(90_000))); |
|---|
| | 2052 | testST(SysTime(DateTime(-1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(-1, 12, 31, 12, 23, 17), FracSec.from!"hnsecs"(900_000))); |
|---|
| | 2053 | |
|---|
| | 2054 | testST(SysTime(0, UTC()), 12, SysTime(DateTime(1, 1, 1, 0, 12, 0), UTC())); |
|---|
| | 2055 | |
|---|
| | 2056 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 2057 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 2058 | static assert(!__traits(compiles, cst.minute = 27)); |
|---|
| | 2059 | //static assert(!__traits(compiles, ist.minute = 27)); |
|---|
| | 2060 | } |
|---|
| | 2061 | } |
|---|
| | 2062 | |
|---|
| | 2063 | |
|---|
| | 2064 | /++ |
|---|
| | 2065 | Seconds past the current minute. |
|---|
| | 2066 | +/ |
|---|
| | 2067 | @property ubyte second() const nothrow |
|---|
| | 2068 | { |
|---|
| | 2069 | auto hnsecs = adjTime; |
|---|
| | 2070 | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| | 2071 | |
|---|
| | 2072 | if(hnsecs < 0) |
|---|
| | 2073 | { |
|---|
| | 2074 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 2075 | --days; |
|---|
| | 2076 | } |
|---|
| | 2077 | |
|---|
| | 2078 | hnsecs = removeUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| | 2079 | hnsecs = removeUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| | 2080 | |
|---|
| | 2081 | return cast(ubyte)getUnitsFromHNSecs!"seconds"(hnsecs); |
|---|
| | 2082 | } |
|---|
| | 2083 | |
|---|
| | 2084 | unittest |
|---|
| | 2085 | { |
|---|
| | 2086 | version(testStdDateTime) |
|---|
| | 2087 | { |
|---|
| | 2088 | assertPred!"=="(SysTime(0, UTC()).second, 0); |
|---|
| | 2089 | assertPred!"=="(SysTime(1, UTC()).second, 0); |
|---|
| | 2090 | assertPred!"=="(SysTime(-1, UTC()).second, 59); |
|---|
| | 2091 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 33)).second, 33); |
|---|
| | 2092 | assertPred!"=="(SysTime(DateTime(0, 1, 1, 0, 0, 33)).second, 33); |
|---|
| | 2093 | |
|---|
| | 2094 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 2095 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 2096 | static assert(__traits(compiles, cst.second)); |
|---|
| | 2097 | //static assert(__traits(compiles, ist.second)); |
|---|
| | 2098 | } |
|---|
| | 2099 | } |
|---|
| | 2100 | |
|---|
| | 2101 | |
|---|
| | 2102 | /++ |
|---|
| | 2103 | Seconds past the current minute. |
|---|
| | 2104 | |
|---|
| | 2105 | Params |
|---|
| | 2106 | second = The second to set this SysTime's second to. |
|---|
| | 2107 | |
|---|
| | 2108 | Throws: |
|---|
| | 2109 | DateTimeException if the given second are not a valid second of a minute. |
|---|
| | 2110 | +/ |
|---|
| | 2111 | @property void second(int second) |
|---|
| | 2112 | { |
|---|
| | 2113 | enforceValid!"seconds"(second); |
|---|
| | 2114 | |
|---|
| | 2115 | auto hnsecs = adjTime; |
|---|
| | 2116 | auto days = splitUnitsFromHNSecs!"days"(hnsecs); |
|---|
| | 2117 | immutable daysHNSecs = convert!("days", "hnsecs")(days); |
|---|
| | 2118 | immutable negative = hnsecs < 0; |
|---|
| | 2119 | |
|---|
| | 2120 | if(negative) |
|---|
| | 2121 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 2122 | |
|---|
| | 2123 | immutable hour = splitUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| | 2124 | immutable minute = splitUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| | 2125 | hnsecs = removeUnitsFromHNSecs!"seconds"(hnsecs); |
|---|
| | 2126 | |
|---|
| | 2127 | hnsecs += convert!("hours", "hnsecs")(hour); |
|---|
| | 2128 | hnsecs += convert!("minutes", "hnsecs")(minute); |
|---|
| | 2129 | hnsecs += convert!("seconds", "hnsecs")(second); |
|---|
| | 2130 | |
|---|
| | 2131 | if(negative) |
|---|
| | 2132 | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| | 2133 | |
|---|
| | 2134 | adjTime = daysHNSecs + hnsecs; |
|---|
| | 2135 | } |
|---|
| | 2136 | |
|---|
| | 2137 | unittest |
|---|
| | 2138 | { |
|---|
| | 2139 | version(testStdDateTime) |
|---|
| | 2140 | { |
|---|
| | 2141 | static void testSTInvalid(SysTime st, int second) |
|---|
| | 2142 | { |
|---|
| | 2143 | st.second = second; |
|---|
| | 2144 | } |
|---|
| | 2145 | |
|---|
| | 2146 | static void testST(SysTime st, int second, in SysTime expected, size_t line = __LINE__) |
|---|
| | 2147 | { |
|---|
| | 2148 | st.second = second; |
|---|
| | 2149 | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| | 2150 | } |
|---|
| | 2151 | |
|---|
| | 2152 | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1999, 7, 6)), 60)); |
|---|
| | 2153 | |
|---|
| | 2154 | //Test A.D. |
|---|
| | 2155 | testST(SysTime(Date(1, 1, 1)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 1))); |
|---|
| | 2156 | testST(SysTime(Date(1, 1, 1)), 7, SysTime(DateTime(1, 1, 1, 0, 0, 7))); |
|---|
| | 2157 | testST(SysTime(Date(1, 1, 1)), 12, SysTime(DateTime(1, 1, 1, 0, 0, 12))); |
|---|
| | 2158 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 1), FracSec.from!"hnsecs"(1))); |
|---|
| | 2159 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 1, 1, 0, 0, 7), FracSec.from!"hnsecs"(1))); |
|---|
| | 2160 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 1, 1, 0, 0, 12), FracSec.from!"hnsecs"(1))); |
|---|
| | 2161 | |
|---|
| | 2162 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(1, 12, 31, 23, 59, 1))); |
|---|
| | 2163 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(1, 12, 31, 23, 59, 7))); |
|---|
| | 2164 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(1, 12, 31, 23, 59, 12))); |
|---|
| | 2165 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 12, 31, 23, 59, 1), FracSec.from!"hnsecs"(1))); |
|---|
| | 2166 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 12, 31, 23, 59, 7), FracSec.from!"hnsecs"(1))); |
|---|
| | 2167 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 12, 31, 23, 59, 12), FracSec.from!"hnsecs"(1))); |
|---|
| | 2168 | |
|---|
| | 2169 | testST(SysTime(Date(1, 7, 2)), 12, SysTime(DateTime(1, 7, 2, 0, 0, 12))); |
|---|
| | 2170 | testST(SysTime(Date(5007, 7, 2)), 5, SysTime(DateTime(5007, 7, 2, 0, 0, 5))); |
|---|
| | 2171 | |
|---|
| | 2172 | testST(SysTime(DateTime(1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(1, 1, 7, 12, 22, 6), FracSec.from!"hnsecs"(7))); |
|---|
| | 2173 | testST(SysTime(DateTime(1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(1, 1, 1, 12, 22, 1), FracSec.from!"hnsecs"(70))); |
|---|
| | 2174 | testST(SysTime(DateTime(1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(1, 2, 1, 12, 22, 1), FracSec.from!"hnsecs"(700))); |
|---|
| | 2175 | testST(SysTime(DateTime(1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(1, 2, 27, 12, 22, 5), FracSec.from!"hnsecs"(7000))); |
|---|
| | 2176 | testST(SysTime(DateTime(1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(1, 12, 1, 12, 22, 1), FracSec.from!"hnsecs"(70_000))); |
|---|
| | 2177 | testST(SysTime(DateTime(1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(1, 12, 31, 12, 22, 23), FracSec.from!"hnsecs"(700_000))); |
|---|
| | 2178 | |
|---|
| | 2179 | testST(SysTime(DateTime(999, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(999, 1, 7, 12, 22, 6), FracSec.from!"hnsecs"(9))); |
|---|
| | 2180 | testST(SysTime(DateTime(999, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(999, 1, 1, 12, 22, 1), FracSec.from!"hnsecs"(90))); |
|---|
| | 2181 | testST(SysTime(DateTime(999, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(999, 2, 1, 12, 22, 1), FracSec.from!"hnsecs"(900))); |
|---|
| | 2182 | testST(SysTime(DateTime(999, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(999, 2, 27, 12, 22, 5), FracSec.from!"hnsecs"(9000))); |
|---|
| | 2183 | testST(SysTime(DateTime(999, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(999, 12, 1, 12, 22, 1), FracSec.from!"hnsecs"(90_000))); |
|---|
| | 2184 | testST(SysTime(DateTime(999, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(999, 12, 31, 12, 22, 23), FracSec.from!"hnsecs"(900_000))); |
|---|
| | 2185 | |
|---|
| | 2186 | //Test B.C. |
|---|
| | 2187 | testST(SysTime(Date(0, 1, 1)), 1, SysTime(DateTime(0, 1, 1, 0, 0, 1))); |
|---|
| | 2188 | testST(SysTime(Date(0, 1, 1)), 7, SysTime(DateTime(0, 1, 1, 0, 0, 7))); |
|---|
| | 2189 | testST(SysTime(Date(0, 1, 1)), 12, SysTime(DateTime(0, 1, 1, 0, 0, 12))); |
|---|
| | 2190 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 1, 1, 0, 0, 1), FracSec.from!"hnsecs"(1))); |
|---|
| | 2191 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 1, 1, 0, 0, 7), FracSec.from!"hnsecs"(1))); |
|---|
| | 2192 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 1, 1, 0, 0, 12), FracSec.from!"hnsecs"(1))); |
|---|
| | 2193 | |
|---|
| | 2194 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(0, 12, 31, 23, 59, 1))); |
|---|
| | 2195 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(0, 12, 31, 23, 59, 7))); |
|---|
| | 2196 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(0, 12, 31, 23, 59, 12))); |
|---|
| | 2197 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 12, 31, 23, 59, 1), FracSec.from!"hnsecs"(1))); |
|---|
| | 2198 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 12, 31, 23, 59, 7), FracSec.from!"hnsecs"(1))); |
|---|
| | 2199 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 12, 31, 23, 59, 12), FracSec.from!"hnsecs"(1))); |
|---|
| | 2200 | |
|---|
| | 2201 | testST(SysTime(Date(0, 7, 2)), 7, SysTime(DateTime(0, 7, 2, 0, 0, 7))); |
|---|
| | 2202 | testST(SysTime(Date(-1202, 7, 2)), 1, SysTime(DateTime(-1202, 7, 2, 0, 0, 1))); |
|---|
| | 2203 | |
|---|
| | 2204 | testST(SysTime(DateTime(0, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(0, 1, 7, 12, 22, 6), FracSec.from!"hnsecs"(7))); |
|---|
| | 2205 | testST(SysTime(DateTime(0, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(0, 1, 1, 12, 22, 1), FracSec.from!"hnsecs"(70))); |
|---|
| | 2206 | testST(SysTime(DateTime(0, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(0, 2, 1, 12, 22, 1), FracSec.from!"hnsecs"(700))); |
|---|
| | 2207 | testST(SysTime(DateTime(0, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(0, 2, 27, 12, 22, 5), FracSec.from!"hnsecs"(7000))); |
|---|
| | 2208 | testST(SysTime(DateTime(0, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(0, 12, 1, 12, 22, 1), FracSec.from!"hnsecs"(70_000))); |
|---|
| | 2209 | testST(SysTime(DateTime(0, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(0, 12, 31, 12, 22, 23), FracSec.from!"hnsecs"(700_000))); |
|---|
| | 2210 | |
|---|
| | 2211 | testST(SysTime(DateTime(-1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(-1, 1, 7, 12, 22, 6), FracSec.from!"hnsecs"(9))); |
|---|
| | 2212 | testST(SysTime(DateTime(-1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(-1, 1, 1, 12, 22, 1), FracSec.from!"hnsecs"(90))); |
|---|
| | 2213 | testST(SysTime(DateTime(-1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(-1, 2, 1, 12, 22, 1), FracSec.from!"hnsecs"(900))); |
|---|
| | 2214 | testST(SysTime(DateTime(-1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(-1, 2, 27, 12, 22, 5), FracSec.from!"hnsecs"(9000))); |
|---|
| | 2215 | testST(SysTime(DateTime(-1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(-1, 12, 1, 12, 22, 1), FracSec.from!"hnsecs"(90_000))); |
|---|
| | 2216 | testST(SysTime(DateTime(-1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(-1, 12, 31, 12, 22, 23), FracSec.from!"hnsecs"(900_000))); |
|---|
| | 2217 | |
|---|
| | 2218 | testST(SysTime(0, UTC()), 12, SysTime(DateTime(1, 1, 1, 0, 0, 12), UTC())); |
|---|
| | 2219 | |
|---|
| | 2220 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 2221 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 2222 | static assert(!__traits(compiles, cst.seconds = 27)); |
|---|
| | 2223 | //static assert(!__traits(compiles, ist.seconds = 27)); |
|---|
| | 2224 | } |
|---|
| | 2225 | } |
|---|
| | 2226 | |
|---|
| | 2227 | |
|---|
| | 2228 | /++ |
|---|
| | 2229 | Fractional seconds passed the second. |
|---|
| | 2230 | +/ |
|---|
| | 2231 | @property FracSec fracSec() const nothrow |
|---|
| | 2232 | { |
|---|
| | 2233 | try |
|---|
| | 2234 | { |
|---|
| | 2235 | auto hnsecs = removeUnitsFromHNSecs!"days"(adjTime); |
|---|
| | 2236 | |
|---|
| | 2237 | if(hnsecs < 0) |
|---|
| | 2238 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 2239 | |
|---|
| | 2240 | hnsecs = removeUnitsFromHNSecs!"seconds"(hnsecs); |
|---|
| | 2241 | |
|---|
| | 2242 | return FracSec.from!"hnsecs"(cast(int)hnsecs); |
|---|
| | 2243 | } |
|---|
| | 2244 | catch(Exception e) |
|---|
| | 2245 | assert(0, "FracSec.from!\"hnsecs\"() threw."); |
|---|
| | 2246 | } |
|---|
| | 2247 | |
|---|
| | 2248 | unittest |
|---|
| | 2249 | { |
|---|
| | 2250 | version(testStdDateTime) |
|---|
| | 2251 | { |
|---|
| | 2252 | assertPred!"=="(SysTime(0, UTC()).fracSec.hnsecs, 0); |
|---|
| | 2253 | assertPred!"=="(SysTime(1, UTC()).fracSec.hnsecs, 1); |
|---|
| | 2254 | assertPred!"=="(SysTime(-1, UTC()).fracSec.hnsecs, 9_999_999); |
|---|
| | 2255 | |
|---|
| | 2256 | assertPred!"=="(SysTime(DateTime(200, 3, 30, 1, 27, 19), FracSec.from!"hnsecs"(348), UTC()).fracSec.hnsecs, 348); |
|---|
| | 2257 | assertPred!"=="(SysTime(DateTime(-1, 2, 17, 4, 5, 22), FracSec.from!"hnsecs"(347), UTC()).fracSec.hnsecs, 347); |
|---|
| | 2258 | |
|---|
| | 2259 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 33), FracSec.from!"hnsecs"(502)).fracSec, FracSec.from!"hnsecs"(502)); |
|---|
| | 2260 | assertPred!"=="(SysTime(DateTime(0, 1, 1, 0, 0, 33), FracSec.from!"hnsecs"(502)).fracSec, FracSec.from!"hnsecs"(502)); |
|---|
| | 2261 | |
|---|
| | 2262 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 2263 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 2264 | static assert(__traits(compiles, cst.fracSec)); |
|---|
| | 2265 | //static assert(__traits(compiles, ist.fracSec)); |
|---|
| | 2266 | } |
|---|
| | 2267 | } |
|---|
| | 2268 | |
|---|
| | 2269 | |
|---|
| | 2270 | /++ |
|---|
| | 2271 | Fractional seconds passed the second. |
|---|
| | 2272 | |
|---|
| | 2273 | Params |
|---|
| | 2274 | fracSec = The fractional seconds to set this SysTimes's fractional |
|---|
| | 2275 | seconds to. |
|---|
| | 2276 | +/ |
|---|
| | 2277 | @property void fracSec(FracSec fracSec) nothrow |
|---|
| | 2278 | { |
|---|
| | 2279 | auto hnsecs = adjTime; |
|---|
| | 2280 | auto days = splitUnitsFromHNSecs!"days"(hnsecs); |
|---|
| | 2281 | immutable daysHNSecs = convert!("days", "hnsecs")(days); |
|---|
| | 2282 | immutable negative = hnsecs < 0; |
|---|
| | 2283 | |
|---|
| | 2284 | if(negative) |
|---|
| | 2285 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 2286 | |
|---|
| | 2287 | immutable hour = splitUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| | 2288 | immutable minute = splitUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| | 2289 | immutable second = getUnitsFromHNSecs!"seconds"(hnsecs); |
|---|
| | 2290 | |
|---|
| | 2291 | hnsecs = fracSec.hnsecs; |
|---|
| | 2292 | hnsecs += convert!("hours", "hnsecs")(hour); |
|---|
| | 2293 | hnsecs += convert!("minutes", "hnsecs")(minute); |
|---|
| | 2294 | hnsecs += convert!("seconds", "hnsecs")(second); |
|---|
| | 2295 | |
|---|
| | 2296 | if(negative) |
|---|
| | 2297 | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| | 2298 | |
|---|
| | 2299 | adjTime = daysHNSecs + hnsecs; |
|---|
| | 2300 | } |
|---|
| | 2301 | |
|---|
| | 2302 | unittest |
|---|
| | 2303 | { |
|---|
| | 2304 | version(testStdDateTime) |
|---|
| | 2305 | { |
|---|
| | 2306 | static void testST(SysTime st, int hnsecs, in SysTime expected, size_t line = __LINE__) |
|---|
| | 2307 | { |
|---|
| | 2308 | st.fracSec = FracSec.from!"hnsecs"(hnsecs); |
|---|
| | 2309 | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| | 2310 | } |
|---|
| | 2311 | |
|---|
| | 2312 | //Test A.D. |
|---|
| | 2313 | testST(SysTime(Date(1, 1, 1)), 0, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 2314 | testST(SysTime(Date(1, 1, 1)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 2315 | testST(SysTime(Date(1, 1, 1)), 7, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(7))); |
|---|
| | 2316 | testST(SysTime(Date(1, 1, 1)), 12, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(12))); |
|---|
| | 2317 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 2318 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(7))); |
|---|
| | 2319 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(12))); |
|---|
| | 2320 | |
|---|
| | 2321 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 0, SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0))); |
|---|
| | 2322 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 2323 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(7))); |
|---|
| | 2324 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(12))); |
|---|
| | 2325 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 2326 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(7))); |
|---|
| | 2327 | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(12))); |
|---|
| | 2328 | |
|---|
| | 2329 | testST(SysTime(Date(1, 7, 2)), 12, SysTime(DateTime(1, 7, 2, 0, 0, 0), FracSec.from!"hnsecs"(12))); |
|---|
| | 2330 | testST(SysTime(Date(5007, 7, 2)), 5, SysTime(DateTime(5007, 7, 2, 0, 0, 0), FracSec.from!"hnsecs"(5))); |
|---|
| | 2331 | |
|---|
| | 2332 | testST(SysTime(DateTime(1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(6))); |
|---|
| | 2333 | testST(SysTime(DateTime(1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| | 2334 | testST(SysTime(DateTime(1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| | 2335 | testST(SysTime(DateTime(1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(5))); |
|---|
| | 2336 | testST(SysTime(DateTime(1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| | 2337 | testST(SysTime(DateTime(1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(23))); |
|---|
| | 2338 | |
|---|
| | 2339 | testST(SysTime(DateTime(999, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(999, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(6))); |
|---|
| | 2340 | testST(SysTime(DateTime(999, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(999, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| | 2341 | testST(SysTime(DateTime(999, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(999, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| | 2342 | testST(SysTime(DateTime(999, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(999, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(5))); |
|---|
| | 2343 | testST(SysTime(DateTime(999, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(999, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| | 2344 | testST(SysTime(DateTime(999, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(999, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(23))); |
|---|
| | 2345 | |
|---|
| | 2346 | //Test B.C. |
|---|
| | 2347 | testST(SysTime(Date(0, 1, 1)), 0, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 2348 | testST(SysTime(Date(0, 1, 1)), 1, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 2349 | testST(SysTime(Date(0, 1, 1)), 7, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(7))); |
|---|
| | 2350 | testST(SysTime(Date(0, 1, 1)), 12, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(12))); |
|---|
| | 2351 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 0, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 2352 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 2353 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(7))); |
|---|
| | 2354 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(12))); |
|---|
| | 2355 | |
|---|
| | 2356 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 0, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0))); |
|---|
| | 2357 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 2358 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(7))); |
|---|
| | 2359 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(12))); |
|---|
| | 2360 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 2361 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(7))); |
|---|
| | 2362 | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(12))); |
|---|
| | 2363 | |
|---|
| | 2364 | testST(SysTime(Date(0, 7, 2)), 7, SysTime(DateTime(0, 7, 2, 0, 0, 0), FracSec.from!"hnsecs"(7))); |
|---|
| | 2365 | testST(SysTime(Date(-1202, 7, 2)), 1, SysTime(DateTime(-1202, 7, 2, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 2366 | |
|---|
| | 2367 | testST(SysTime(DateTime(0, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(0, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(6))); |
|---|
| | 2368 | testST(SysTime(DateTime(0, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(0, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| | 2369 | testST(SysTime(DateTime(0, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(0, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| | 2370 | testST(SysTime(DateTime(0, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(0, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(5))); |
|---|
| | 2371 | testST(SysTime(DateTime(0, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(0, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| | 2372 | testST(SysTime(DateTime(0, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(0, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(23))); |
|---|
| | 2373 | |
|---|
| | 2374 | testST(SysTime(DateTime(-1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(-1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(6))); |
|---|
| | 2375 | testST(SysTime(DateTime(-1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(-1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| | 2376 | testST(SysTime(DateTime(-1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(-1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| | 2377 | testST(SysTime(DateTime(-1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(-1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(5))); |
|---|
| | 2378 | testST(SysTime(DateTime(-1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(-1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| | 2379 | testST(SysTime(DateTime(-1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(-1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(23))); |
|---|
| | 2380 | |
|---|
| | 2381 | testST(SysTime(0, UTC()), 12, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(12), UTC())); |
|---|
| | 2382 | |
|---|
| | 2383 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 2384 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 2385 | static assert(!__traits(compiles, cst.fracSec = FracSec.from!"msecs"(7))); |
|---|
| | 2386 | //static assert(!__traits(compiles, ist.fracSec = FracSec.from!"msecs"(7))); |
|---|
| | 2387 | } |
|---|
| | 2388 | } |
|---|
| | 2389 | |
|---|
| | 2390 | |
|---|
| | 2391 | /++ |
|---|
| | 2392 | The total hnsecs from midnight, January 1st, 1 A.D. UTC. This is the internal |
|---|
| | 2393 | representation of SysTime. |
|---|
| | 2394 | +/ |
|---|
| | 2395 | @property long stdTime() const pure nothrow |
|---|
| | 2396 | { |
|---|
| | 2397 | return _stdTime; |
|---|
| | 2398 | } |
|---|
| | 2399 | |
|---|
| | 2400 | unittest |
|---|
| | 2401 | { |
|---|
| | 2402 | version(testStdDateTime) |
|---|
| | 2403 | { |
|---|
| | 2404 | assertPred!"=="(SysTime(0).stdTime, 0); |
|---|
| | 2405 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 33), FracSec.from!"hnsecs"(502), UTC()).stdTime, 330000502L); |
|---|
| | 2406 | assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), UTC()).stdTime, 621355968000000000L); |
|---|
| | 2407 | |
|---|
| | 2408 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 2409 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 2410 | static assert(__traits(compiles, cst.stdTime)); |
|---|
| | 2411 | //static assert(__traits(compiles, ist.stdTime)); |
|---|
| | 2412 | } |
|---|
| | 2413 | } |
|---|
| | 2414 | |
|---|
| | 2415 | |
|---|
| | 2416 | /++ |
|---|
| | 2417 | The total hnsecs from midnight, January 1st, 1 A.D. UTC. This is the internal |
|---|
| | 2418 | representation of SysTime. |
|---|
| | 2419 | |
|---|
| | 2420 | Params |
|---|
| | 2421 | stdTime = The number of hnsecs since January 1st, 1 A.D. UTC. |
|---|
| | 2422 | +/ |
|---|
| | 2423 | @property void stdTime(long stdTime) pure nothrow |
|---|
| | 2424 | { |
|---|
| | 2425 | _stdTime = stdTime; |
|---|
| | 2426 | } |
|---|
| | 2427 | |
|---|
| | 2428 | unittest |
|---|
| | 2429 | { |
|---|
| | 2430 | version(testStdDateTime) |
|---|
| | 2431 | { |
|---|
| | 2432 | { |
|---|
| | 2433 | auto st = SysTime(0, UTC()); |
|---|
| | 2434 | st.stdTime = 330000502L; |
|---|
| | 2435 | assertPred!"=="(st, SysTime(DateTime(1, 1, 1, 0, 0, 33), FracSec.from!"hnsecs"(502), UTC())); |
|---|
| | 2436 | } |
|---|
| | 2437 | |
|---|
| | 2438 | { |
|---|
| | 2439 | auto st = SysTime(0, UTC()); |
|---|
| | 2440 | st.stdTime = 621355968000000000L; |
|---|
| | 2441 | assertPred!"=="(st, SysTime(DateTime(1970, 1, 1, 0, 0, 0), UTC())); |
|---|
| | 2442 | } |
|---|
| | 2443 | |
|---|
| | 2444 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 2445 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 2446 | static assert(!__traits(compiles, cst.stdTime = 27)); |
|---|
| | 2447 | //static assert(!__traits(compiles, ist.stdTime = 27)); |
|---|
| | 2448 | } |
|---|
| | 2449 | } |
|---|
| | 2450 | |
|---|
| | 2451 | |
|---|
| | 2452 | /++ |
|---|
| | 2453 | The current time zone of this SysTime. Its internal time is always kept |
|---|
| | 2454 | in UTC, so there are no conversion issues between time zones due to DST. |
|---|
| | 2455 | Functions which return all or part of the time - such as hours - adjust |
|---|
| | 2456 | the time to this SysTime's time zone before returning. |
|---|
| | 2457 | +/ |
|---|
| | 2458 | @property immutable(TimeZone) timezone() const pure nothrow |
|---|
| | 2459 | { |
|---|
| | 2460 | return _timezone.get; |
|---|
| | 2461 | } |
|---|
| | 2462 | |
|---|
| | 2463 | |
|---|
| | 2464 | /++ |
|---|
| | 2465 | The current time zone of this SysTime. It's internal time is always kept |
|---|
| | 2466 | in UTC, so there are no conversion issues between time zones due to DST. |
|---|
| | 2467 | Functions which return all or part of the time - such as hours - adjust |
|---|
| | 2468 | the time to this SysTime's time zone before returning. |
|---|
| | 2469 | +/ |
|---|
| | 2470 | @property void timezone(immutable TimeZone timezone) pure nothrow |
|---|
| | 2471 | { |
|---|
| | 2472 | _timezone = timezone; |
|---|
| | 2473 | } |
|---|
| | 2474 | |
|---|
| | 2475 | |
|---|
| | 2476 | /++ |
|---|
| | 2477 | Returns whether DST is in effect for this SysTime. |
|---|
| | 2478 | +/ |
|---|
| | 2479 | @property bool dstInEffect() const nothrow |
|---|
| | 2480 | { |
|---|
| | 2481 | return _timezone.dstInEffect(_stdTime); |
|---|
| | 2482 | //This function's unit testing is done in the time zone classes. |
|---|
| | 2483 | } |
|---|
| | 2484 | |
|---|
| | 2485 | |
|---|
| | 2486 | /++ |
|---|
| | 2487 | Returns a SysTime with the same std time as this one, but with LocalTime |
|---|
| | 2488 | as its time zone. |
|---|
| | 2489 | +/ |
|---|
| | 2490 | SysTime toLocalTime() const nothrow |
|---|
| | 2491 | { |
|---|
| | 2492 | return SysTime(_stdTime, LocalTime()); |
|---|
| | 2493 | } |
|---|
| | 2494 | |
|---|
| | 2495 | unittest |
|---|
| | 2496 | { |
|---|
| | 2497 | version(testStdDateTime) |
|---|
| | 2498 | { |
|---|
| | 2499 | { |
|---|
| | 2500 | auto sysTime = SysTime(DateTime(1982, 1, 4, 8, 59, 7), FracSec.from!"hnsecs"(27)); |
|---|
| | 2501 | assertPred!"=="(sysTime, sysTime.toLocalTime()); |
|---|
| | 2502 | assertPred!"=="(sysTime._stdTime, sysTime.toLocalTime()._stdTime); |
|---|
| | 2503 | assert(sysTime.toLocalTime().timezone is LocalTime()); |
|---|
| | 2504 | assert(sysTime.toLocalTime().timezone is sysTime.timezone); |
|---|
| | 2505 | assert(sysTime.toLocalTime().timezone !is UTC()); |
|---|
| | 2506 | } |
|---|
| | 2507 | |
|---|
| | 2508 | { |
|---|
| | 2509 | immutable stz = new SimpleTimeZone(-3 * 60); |
|---|
| | 2510 | auto sysTime = SysTime(DateTime(1982, 1, 4, 8, 59, 7), FracSec.from!"hnsecs"(27), stz); |
|---|
| | 2511 | assertPred!"=="(sysTime, sysTime.toLocalTime()); |
|---|
| | 2512 | assertPred!"=="(sysTime._stdTime, sysTime.toLocalTime()._stdTime); |
|---|
| | 2513 | assert(sysTime.toLocalTime().timezone is LocalTime()); |
|---|
| | 2514 | assert(sysTime.toLocalTime().timezone !is UTC()); |
|---|
| | 2515 | assert(sysTime.toLocalTime().timezone !is stz); |
|---|
| | 2516 | } |
|---|
| | 2517 | } |
|---|
| | 2518 | } |
|---|
| | 2519 | |
|---|
| | 2520 | |
|---|
| | 2521 | /++ |
|---|
| | 2522 | Returns a SysTime with the same std time as this one, but with UTC as |
|---|
| | 2523 | its time zone. |
|---|
| | 2524 | +/ |
|---|
| | 2525 | SysTime toUTC() const pure nothrow |
|---|
| | 2526 | { |
|---|
| | 2527 | return SysTime(_stdTime, UTC()); |
|---|
| | 2528 | } |
|---|
| | 2529 | |
|---|
| | 2530 | unittest |
|---|
| | 2531 | { |
|---|
| | 2532 | version(testStdDateTime) |
|---|
| | 2533 | { |
|---|
| | 2534 | auto sysTime = SysTime(DateTime(1982, 1, 4, 8, 59, 7), FracSec.from!"hnsecs"(27)); |
|---|
| | 2535 | assertPred!"=="(sysTime, sysTime.toUTC()); |
|---|
| | 2536 | assertPred!"=="(sysTime._stdTime, sysTime.toUTC()._stdTime); |
|---|
| | 2537 | assert(sysTime.toUTC().timezone is UTC()); |
|---|
| | 2538 | assert(sysTime.toUTC().timezone !is LocalTime()); |
|---|
| | 2539 | assert(sysTime.toUTC().timezone !is sysTime.timezone); |
|---|
| | 2540 | } |
|---|
| | 2541 | } |
|---|
| | 2542 | |
|---|
| | 2543 | |
|---|
| | 2544 | /++ |
|---|
| | 2545 | Returns a SysTime with the same std time as this one, but with given |
|---|
| | 2546 | time zone as its time zone. |
|---|
| | 2547 | +/ |
|---|
| | 2548 | SysTime toOtherTZ(immutable TimeZone tz) const pure nothrow |
|---|
| | 2549 | { |
|---|
| | 2550 | return SysTime(_stdTime, tz); |
|---|
| | 2551 | } |
|---|
| | 2552 | |
|---|
| | 2553 | unittest |
|---|
| | 2554 | { |
|---|
| | 2555 | version(testStdDateTime) |
|---|
| | 2556 | { |
|---|
| | 2557 | immutable stz = new SimpleTimeZone(11 * 60); |
|---|
| | 2558 | auto sysTime = SysTime(DateTime(1982, 1, 4, 8, 59, 7), FracSec.from!"hnsecs"(27)); |
|---|
| | 2559 | assertPred!"=="(sysTime, sysTime.toOtherTZ(stz)); |
|---|
| | 2560 | assertPred!"=="(sysTime._stdTime, sysTime.toOtherTZ(stz)._stdTime); |
|---|
| | 2561 | assert(sysTime.toOtherTZ(stz).timezone is stz); |
|---|
| | 2562 | assert(sysTime.toOtherTZ(stz).timezone !is LocalTime()); |
|---|
| | 2563 | assert(sysTime.toOtherTZ(stz).timezone !is UTC()); |
|---|
| | 2564 | } |
|---|
| | 2565 | } |
|---|
| | 2566 | |
|---|
| | 2567 | |
|---|
| | 2568 | /++ |
|---|
| | 2569 | Returns a time_t which represents this SysTime. |
|---|
| | 2570 | |
|---|
| | 2571 | If time_t is 32 bits, rather than 64, and the result can't fit in a 32-bit |
|---|
| | 2572 | value, then the closest value that can be held in 32 bits will be used |
|---|
| | 2573 | (so time_t.max if it goes over or time_t.min if it goes under). |
|---|
| | 2574 | +/ |
|---|
| | 2575 | time_t toUnixTime() const pure nothrow |
|---|
| | 2576 | { |
|---|
| | 2577 | return stdTimeToUnixTime(_stdTime); |
|---|
| | 2578 | } |
|---|
| | 2579 | |
|---|
| | 2580 | unittest |
|---|
| | 2581 | { |
|---|
| | 2582 | version(testStdDateTime) |
|---|
| | 2583 | { |
|---|
| | 2584 | assertPred!"=="(SysTime(DateTime(1970, 1, 1), UTC()).toUnixTime, 0); |
|---|
| | 2585 | assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1), UTC()).toUnixTime, 0); |
|---|
| | 2586 | assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), FracSec.from!"usecs"(1), UTC()).toUnixTime, 0); |
|---|
| | 2587 | assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), FracSec.from!"msecs"(1), UTC()).toUnixTime, 0); |
|---|
| | 2588 | assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 1), UTC()).toUnixTime, 1); |
|---|
| | 2589 | assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).toUnixTime, 0); |
|---|
| | 2590 | assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"usecs"(999_999), UTC()).toUnixTime, 0); |
|---|
| | 2591 | assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"msecs"(999), UTC()).toUnixTime, 0); |
|---|
| | 2592 | assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), UTC()).toUnixTime, -1); |
|---|
| | 2593 | } |
|---|
| | 2594 | } |
|---|
| | 2595 | |
|---|
| | 2596 | |
|---|
| | 2597 | /++ |
|---|
| | 2598 | Returns a timeval which represents this SysTime. |
|---|
| | 2599 | |
|---|
| | 2600 | If time_t is 32 bits, rather than 64, and the result can't fit in a 32-bit |
|---|
| | 2601 | value, then the closest value that can be held in 32 bits will be used |
|---|
| | 2602 | for tv_sec. (so time_t.max if it goes over or time_t.min if it goes under). |
|---|
| | 2603 | +/ |
|---|
| | 2604 | timeval toTimeVal() const pure nothrow |
|---|
| | 2605 | { |
|---|
| | 2606 | immutable tv_sec = toUnixTime(); |
|---|
| | 2607 | |
|---|
| | 2608 | immutable fracHNSecs = removeUnitsFromHNSecs!"seconds"(_stdTime - 621355968000000000L); |
|---|
| | 2609 | immutable tv_usec = cast(int)convert!("hnsecs", "usecs")(fracHNSecs); |
|---|
| | 2610 | |
|---|
| | 2611 | return timeval(tv_sec, tv_usec); |
|---|
| | 2612 | } |
|---|
| | 2613 | |
|---|
| | 2614 | unittest |
|---|
| | 2615 | { |
|---|
| | 2616 | version(testStdDateTime) |
|---|
| | 2617 | { |
|---|
| | 2618 | assert(SysTime(DateTime(1970, 1, 1), UTC()).toTimeVal() == timeval(0, 0)); |
|---|
| | 2619 | assert(SysTime(DateTime(1970, 1, 1), FracSec.from!"hnsecs"(9), UTC()).toTimeVal() == timeval(0, 0)); |
|---|
| | 2620 | assert(SysTime(DateTime(1970, 1, 1), FracSec.from!"hnsecs"(10), UTC()).toTimeVal() == timeval(0, 1)); |
|---|
| | 2621 | assert(SysTime(DateTime(1970, 1, 1), FracSec.from!"usecs"(7), UTC()).toTimeVal() == timeval(0, 7)); |
|---|
| | 2622 | |
|---|
| | 2623 | assert(SysTime(DateTime(1970, 1, 1, 0, 0, 1), UTC()).toTimeVal() == timeval(1, 0)); |
|---|
| | 2624 | assert(SysTime(DateTime(1970, 1, 1, 0, 0, 1), FracSec.from!"hnsecs"(9), UTC()).toTimeVal() == timeval(1, 0)); |
|---|
| | 2625 | assert(SysTime(DateTime(1970, 1, 1, 0, 0, 1), FracSec.from!"hnsecs"(10), UTC()).toTimeVal() == timeval(1, 1)); |
|---|
| | 2626 | assert(SysTime(DateTime(1970, 1, 1, 0, 0, 1), FracSec.from!"usecs"(7), UTC()).toTimeVal() == timeval(1, 7)); |
|---|
| | 2627 | |
|---|
| | 2628 | assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).toTimeVal() == |
|---|
| | 2629 | timeval(0, 0)); |
|---|
| | 2630 | assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_990), UTC()).toTimeVal() == |
|---|
| | 2631 | timeval(0, -1)); |
|---|
| | 2632 | |
|---|
| | 2633 | assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"usecs"(999_999), UTC()).toTimeVal() == |
|---|
| | 2634 | timeval(0, -1)); |
|---|
| | 2635 | assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"usecs"(999), UTC()).toTimeVal() == |
|---|
| | 2636 | timeval(0, -999_001)); |
|---|
| | 2637 | assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"msecs"(999), UTC()).toTimeVal() == |
|---|
| | 2638 | timeval(0, -1000)); |
|---|
| | 2639 | assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), UTC()).toTimeVal() == timeval(-1, 0)); |
|---|
| | 2640 | assert(SysTime(DateTime(1969, 12, 31, 23, 59, 58), FracSec.from!"usecs"(17), UTC()).toTimeVal() == |
|---|
| | 2641 | timeval(-1, -999_983)); |
|---|
| | 2642 | } |
|---|
| | 2643 | } |
|---|
| | 2644 | |
|---|
| | 2645 | |
|---|
| | 2646 | /++ |
|---|
| | 2647 | Returns a tm which represents this SysTime. |
|---|
| | 2648 | +/ |
|---|
| | 2649 | tm toTM() const nothrow |
|---|
| | 2650 | { |
|---|
| | 2651 | try |
|---|
| | 2652 | { |
|---|
| | 2653 | auto dateTime = cast(DateTime)this; |
|---|
| | 2654 | tm timeInfo; |
|---|
| | 2655 | |
|---|
| | 2656 | timeInfo.tm_sec = dateTime.second; |
|---|
| | 2657 | timeInfo.tm_min = dateTime.minute; |
|---|
| | 2658 | timeInfo.tm_hour = dateTime.hour; |
|---|
| | 2659 | timeInfo.tm_mday = dateTime.day; |
|---|
| | 2660 | timeInfo.tm_mon = dateTime.month - 1; |
|---|
| | 2661 | timeInfo.tm_year = dateTime.year - 1900; |
|---|
| | 2662 | timeInfo.tm_wday = dateTime.dayOfWeek; |
|---|
| | 2663 | timeInfo.tm_yday = dateTime.dayOfYear - 1; |
|---|
| | 2664 | timeInfo.tm_isdst = _timezone.dstInEffect(_stdTime); |
|---|
| | 2665 | |
|---|
| | 2666 | version(Posix) |
|---|
| | 2667 | { |
|---|
| | 2668 | char[] zone = (timeInfo.tm_isdst ? _timezone.dstName : _timezone.stdName).dup; |
|---|
| | 2669 | zone ~= "\0"; |
|---|
| | 2670 | |
|---|
| | 2671 | timeInfo.tm_gmtoff = cast(int)convert!("hnsecs", "seconds")(adjTime - _stdTime); |
|---|
| | 2672 | timeInfo.tm_zone = zone.ptr; |
|---|
| | 2673 | } |
|---|
| | 2674 | |
|---|
| | 2675 | return timeInfo; |
|---|
| | 2676 | } |
|---|
| | 2677 | catch(Exception e) |
|---|
| | 2678 | assert(0, "Either DateTime's constructor threw."); |
|---|
| | 2679 | } |
|---|
| | 2680 | |
|---|
| | 2681 | unittest |
|---|
| | 2682 | { |
|---|
| | 2683 | version(testStdDateTime) |
|---|
| | 2684 | { |
|---|
| | 2685 | version(Posix) |
|---|
| | 2686 | { |
|---|
| | 2687 | scope(exit) clearTZEnvVar(); |
|---|
| | 2688 | setTZEnvVar("America/Los_Angeles"); |
|---|
| | 2689 | } |
|---|
| | 2690 | |
|---|
| | 2691 | { |
|---|
| | 2692 | auto timeInfo = SysTime(DateTime(1970, 1, 1)).toTM(); |
|---|
| | 2693 | |
|---|
| | 2694 | assertPred!"=="(timeInfo.tm_sec, 0); |
|---|
| | 2695 | assertPred!"=="(timeInfo.tm_min, 0); |
|---|
| | 2696 | assertPred!"=="(timeInfo.tm_hour, 0); |
|---|
| | 2697 | assertPred!"=="(timeInfo.tm_mday, 1); |
|---|
| | 2698 | assertPred!"=="(timeInfo.tm_mon, 0); |
|---|
| | 2699 | assertPred!"=="(timeInfo.tm_year, 70); |
|---|
| | 2700 | assertPred!"=="(timeInfo.tm_wday, 4); |
|---|
| | 2701 | assertPred!"=="(timeInfo.tm_yday, 0); |
|---|
| | 2702 | |
|---|
| | 2703 | version(Posix) |
|---|
| | 2704 | assertPred!"=="(timeInfo.tm_isdst, 0); |
|---|
| | 2705 | else version(Windows) |
|---|
| | 2706 | assert(timeInfo.tm_isdst == 0 || timeInfo.tm_isdst == 1); |
|---|
| | 2707 | |
|---|
| | 2708 | version(Posix) |
|---|
| | 2709 | { |
|---|
| | 2710 | assertPred!"=="(timeInfo.tm_gmtoff, -8 * 60 * 60); |
|---|
| | 2711 | assertPred!"=="(to!string(timeInfo.tm_zone), "PST"); |
|---|
| | 2712 | } |
|---|
| | 2713 | } |
|---|
| | 2714 | |
|---|
| | 2715 | { |
|---|
| | 2716 | auto timeInfo = SysTime(DateTime(2010, 7, 4, 12, 15, 7), FracSec.from!"hnsecs"(15)).toTM(); |
|---|
| | 2717 | |
|---|
| | 2718 | assertPred!"=="(timeInfo.tm_sec, 7); |
|---|
| | 2719 | assertPred!"=="(timeInfo.tm_min, 15); |
|---|
| | 2720 | assertPred!"=="(timeInfo.tm_hour, 12); |
|---|
| | 2721 | assertPred!"=="(timeInfo.tm_mday, 4); |
|---|
| | 2722 | assertPred!"=="(timeInfo.tm_mon, 6); |
|---|
| | 2723 | assertPred!"=="(timeInfo.tm_year, 110); |
|---|
| | 2724 | assertPred!"=="(timeInfo.tm_wday, 0); |
|---|
| | 2725 | assertPred!"=="(timeInfo.tm_yday, 184); |
|---|
| | 2726 | |
|---|
| | 2727 | version(Posix) |
|---|
| | 2728 | assertPred!"=="(timeInfo.tm_isdst, 1); |
|---|
| | 2729 | else version(Windows) |
|---|
| | 2730 | assert(timeInfo.tm_isdst == 0 || timeInfo.tm_isdst == 1); |
|---|
| | 2731 | |
|---|
| | 2732 | version(Posix) |
|---|
| | 2733 | { |
|---|
| | 2734 | assertPred!"=="(timeInfo.tm_gmtoff, -7 * 60 * 60); |
|---|
| | 2735 | assertPred!"=="(to!string(timeInfo.tm_zone), "PDT"); |
|---|
| | 2736 | } |
|---|
| | 2737 | } |
|---|
| | 2738 | } |
|---|
| | 2739 | } |
|---|
| | 2740 | |
|---|
| | 2741 | |
|---|
| | 2742 | /++ |
|---|
| | 2743 | Adds the given number of years or months to this SysTime. A negative |
|---|
| | 2744 | number will subtract. |
|---|
| | 2745 | |
|---|
| | 2746 | Note that if day overflow is allowed, and the date with the adjusted |
|---|
| | 2747 | year/month overflows the number of days in the new month, then the month |
|---|
| | 2748 | will be incremented by one, and the days set to the number of days overflowed. |
|---|
| | 2749 | (e.g. if the day were 31 and the new month were June, then the month would |
|---|
| | 2750 | be incremented to July, and the new day would be 1). If day overflow is not |
|---|
| | 2751 | allowed, then the day will be set to the last valid day in the month |
|---|
| | 2752 | (e.g. June 31st would become June 30th). |
|---|
| | 2753 | |
|---|
| | 2754 | Params: |
|---|
| | 2755 | units = The type of units to add ("years" or "months"). |
|---|
| | 2756 | value = The number of months or years to add to this SysTime. |
|---|
| | 2757 | allowOverflow = Whether the days should be allowed to overflow, causing |
|---|
| | 2758 | the month to increment. |
|---|
| | 2759 | |
|---|
| | 2760 | Examples: |
|---|
| | 2761 | -------------------- |
|---|
| | 2762 | auto st1 = SysTime(DateTime(2010, 1, 1, 12, 30, 33)); |
|---|
| | 2763 | st1.add!"months"(11); |
|---|
| | 2764 | assert(st1 == SysTime(DateTime(2010, 12, 1, 12, 30, 33))); |
|---|
| | 2765 | |
|---|
| | 2766 | auto st2 = SysTime(DateTime(2010, 1, 1, 12, 30, 33)); |
|---|
| | 2767 | st2.add!"months"(-11); |
|---|
| | 2768 | assert(st2 == SysTime(DateTime(2009, 2, 1, 12, 30, 33))); |
|---|
| | 2769 | |
|---|
| | 2770 | auto st3 = SysTime(DateTime(2000, 2, 29, 12, 30, 33)); |
|---|
| | 2771 | st3.add!"years"(1); |
|---|
| | 2772 | assert(st3 == SysTime(DateTime(2001, 3, 1, 12, 30, 33))); |
|---|
| | 2773 | |
|---|
| | 2774 | auto st4 = SysTime(DateTime(2000, 2, 29, 12, 30, 33)); |
|---|
| | 2775 | st4.add!"years"(1, AllowDayOverflow.no); |
|---|
| | 2776 | assert(st4 == SysTime(DateTime(2001, 2, 28, 12, 30, 33))); |
|---|
| | 2777 | -------------------- |
|---|
| | 2778 | +/ |
|---|
| | 2779 | ref SysTime add(string units)(long years, AllowDayOverflow allowOverflow = AllowDayOverflow.yes) nothrow |
|---|
| | 2780 | if(units == "years" || |
|---|
| | 2781 | units == "months") |
|---|
| | 2782 | { |
|---|
| | 2783 | auto hnsecs = adjTime; |
|---|
| | 2784 | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| | 2785 | |
|---|
| | 2786 | if(hnsecs < 0) |
|---|
| | 2787 | { |
|---|
| | 2788 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 2789 | --days; |
|---|
| | 2790 | } |
|---|
| | 2791 | |
|---|
| | 2792 | auto date = Date(cast(int)days); |
|---|
| | 2793 | date.add!units(years, allowOverflow); |
|---|
| | 2794 | days = date.dayOfGregorianCal - 1; |
|---|
| | 2795 | |
|---|
| | 2796 | if(days < 0) |
|---|
| | 2797 | { |
|---|
| | 2798 | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| | 2799 | ++days; |
|---|
| | 2800 | } |
|---|
| | 2801 | |
|---|
| | 2802 | immutable newDaysHNSecs = convert!("days", "hnsecs")(days); |
|---|
| | 2803 | |
|---|
| | 2804 | adjTime = newDaysHNSecs + hnsecs; |
|---|
| | 2805 | |
|---|
| | 2806 | return this; |
|---|
| | 2807 | } |
|---|
| | 2808 | |
|---|
| | 2809 | //Test add!"years"() with AllowDayOverlow.yes |
|---|
| | 2810 | unittest |
|---|
| | 2811 | { |
|---|
| | 2812 | version(testStdDateTime) |
|---|
| | 2813 | { |
|---|
| | 2814 | //Test A.D. |
|---|
| | 2815 | { |
|---|
| | 2816 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 2817 | sysTime.add!"years"(7); |
|---|
| | 2818 | assertPred!"=="(sysTime, SysTime(Date(2006, 7, 6))); |
|---|
| | 2819 | sysTime.add!"years"(-9); |
|---|
| | 2820 | assertPred!"=="(sysTime, SysTime(Date(1997, 7, 6))); |
|---|
| | 2821 | } |
|---|
| | 2822 | |
|---|
| | 2823 | { |
|---|
| | 2824 | auto sysTime = SysTime(Date(1999, 2, 28)); |
|---|
| | 2825 | sysTime.add!"years"(1); |
|---|
| | 2826 | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 28))); |
|---|
| | 2827 | } |
|---|
| | 2828 | |
|---|
| | 2829 | { |
|---|
| | 2830 | auto sysTime = SysTime(Date(2000, 2, 29)); |
|---|
| | 2831 | sysTime.add!"years"(-1); |
|---|
| | 2832 | assertPred!"=="(sysTime, SysTime(Date(1999, 3, 1))); |
|---|
| | 2833 | } |
|---|
| | 2834 | |
|---|
| | 2835 | { |
|---|
| | 2836 | auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)); |
|---|
| | 2837 | sysTime.add!"years"(7); |
|---|
| | 2838 | assertPred!"=="(sysTime, SysTime(DateTime(2006, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| | 2839 | sysTime.add!"years"(-9); |
|---|
| | 2840 | assertPred!"=="(sysTime, SysTime(DateTime(1997, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| | 2841 | } |
|---|
| | 2842 | |
|---|
| | 2843 | { |
|---|
| | 2844 | auto sysTime = SysTime(DateTime(1999, 2, 28, 0, 7, 2), FracSec.from!"usecs"(1207)); |
|---|
| | 2845 | sysTime.add!"years"(1); |
|---|
| | 2846 | assertPred!"=="(sysTime, SysTime(DateTime(2000, 2, 28, 0, 7, 2), FracSec.from!"usecs"(1207))); |
|---|
| | 2847 | } |
|---|
| | 2848 | |
|---|
| | 2849 | { |
|---|
| | 2850 | auto sysTime = SysTime(DateTime(2000, 2, 29, 0, 7, 2), FracSec.from!"usecs"(1207)); |
|---|
| | 2851 | sysTime.add!"years"(-1); |
|---|
| | 2852 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 3, 1, 0, 7, 2), FracSec.from!"usecs"(1207))); |
|---|
| | 2853 | } |
|---|
| | 2854 | |
|---|
| | 2855 | //Test B.C. |
|---|
| | 2856 | { |
|---|
| | 2857 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 2858 | sysTime.add!"years"(-7); |
|---|
| | 2859 | assertPred!"=="(sysTime, SysTime(Date(-2006, 7, 6))); |
|---|
| | 2860 | sysTime.add!"years"(9); |
|---|
| | 2861 | assertPred!"=="(sysTime, SysTime(Date(-1997, 7, 6))); |
|---|
| | 2862 | } |
|---|
| | 2863 | |
|---|
| | 2864 | { |
|---|
| | 2865 | auto sysTime = SysTime(Date(-1999, 2, 28)); |
|---|
| | 2866 | sysTime.add!"years"(-1); |
|---|
| | 2867 | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 28))); |
|---|
| | 2868 | } |
|---|
| | 2869 | |
|---|
| | 2870 | { |
|---|
| | 2871 | auto sysTime = SysTime(Date(-2000, 2, 29)); |
|---|
| | 2872 | sysTime.add!"years"(1); |
|---|
| | 2873 | assertPred!"=="(sysTime, SysTime(Date(-1999, 3, 1))); |
|---|
| | 2874 | } |
|---|
| | 2875 | |
|---|
| | 2876 | { |
|---|
| | 2877 | auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)); |
|---|
| | 2878 | sysTime.add!"years"(-7); |
|---|
| | 2879 | assertPred!"=="(sysTime, SysTime(DateTime(-2006, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| | 2880 | sysTime.add!"years"(9); |
|---|
| | 2881 | assertPred!"=="(sysTime, SysTime(DateTime(-1997, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| | 2882 | } |
|---|
| | 2883 | |
|---|
| | 2884 | { |
|---|
| | 2885 | auto sysTime = SysTime(DateTime(-1999, 2, 28, 3, 3, 3), FracSec.from!"hnsecs"(3)); |
|---|
| | 2886 | sysTime.add!"years"(-1); |
|---|
| | 2887 | assertPred!"=="(sysTime, SysTime(DateTime(-2000, 2, 28, 3, 3, 3), FracSec.from!"hnsecs"(3))); |
|---|
| | 2888 | } |
|---|
| | 2889 | |
|---|
| | 2890 | { |
|---|
| | 2891 | auto sysTime = SysTime(DateTime(-2000, 2, 29, 3, 3, 3), FracSec.from!"hnsecs"(3)); |
|---|
| | 2892 | sysTime.add!"years"(1); |
|---|
| | 2893 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 3, 1, 3, 3, 3), FracSec.from!"hnsecs"(3))); |
|---|
| | 2894 | } |
|---|
| | 2895 | |
|---|
| | 2896 | //Test Both |
|---|
| | 2897 | { |
|---|
| | 2898 | auto sysTime = SysTime(Date(4, 7, 6)); |
|---|
| | 2899 | sysTime.add!"years"(-5); |
|---|
| | 2900 | assertPred!"=="(sysTime, SysTime(Date(-1, 7, 6))); |
|---|
| | 2901 | sysTime.add!"years"(5); |
|---|
| | 2902 | assertPred!"=="(sysTime, SysTime(Date(4, 7, 6))); |
|---|
| | 2903 | } |
|---|
| | 2904 | |
|---|
| | 2905 | { |
|---|
| | 2906 | auto sysTime = SysTime(Date(-4, 7, 6)); |
|---|
| | 2907 | sysTime.add!"years"(5); |
|---|
| | 2908 | assertPred!"=="(sysTime, SysTime(Date(1, 7, 6))); |
|---|
| | 2909 | sysTime.add!"years"(-5); |
|---|
| | 2910 | assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6))); |
|---|
| | 2911 | } |
|---|
| | 2912 | |
|---|
| | 2913 | { |
|---|
| | 2914 | auto sysTime = SysTime(Date(4, 7, 6)); |
|---|
| | 2915 | sysTime.add!"years"(-8); |
|---|
| | 2916 | assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6))); |
|---|
| | 2917 | sysTime.add!"years"(8); |
|---|
| | 2918 | assertPred!"=="(sysTime, SysTime(Date(4, 7, 6))); |
|---|
| | 2919 | } |
|---|
| | 2920 | |
|---|
| | 2921 | { |
|---|
| | 2922 | auto sysTime = SysTime(Date(-4, 7, 6)); |
|---|
| | 2923 | sysTime.add!"years"(8); |
|---|
| | 2924 | assertPred!"=="(sysTime, SysTime(Date(4, 7, 6))); |
|---|
| | 2925 | sysTime.add!"years"(-8); |
|---|
| | 2926 | assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6))); |
|---|
| | 2927 | } |
|---|
| | 2928 | |
|---|
| | 2929 | { |
|---|
| | 2930 | auto sysTime = SysTime(Date(-4, 2, 29)); |
|---|
| | 2931 | sysTime.add!"years"(5); |
|---|
| | 2932 | assertPred!"=="(sysTime, SysTime(Date(1, 3, 1))); |
|---|
| | 2933 | } |
|---|
| | 2934 | |
|---|
| | 2935 | { |
|---|
| | 2936 | auto sysTime = SysTime(Date(4, 2, 29)); |
|---|
| | 2937 | sysTime.add!"years"(-5); |
|---|
| | 2938 | assertPred!"=="(sysTime, SysTime(Date(-1, 3, 1))); |
|---|
| | 2939 | } |
|---|
| | 2940 | |
|---|
| | 2941 | { |
|---|
| | 2942 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 2943 | sysTime.add!"years"(-1); |
|---|
| | 2944 | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 2945 | sysTime.add!"years"(1); |
|---|
| | 2946 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 2947 | } |
|---|
| | 2948 | |
|---|
| | 2949 | { |
|---|
| | 2950 | auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 2951 | sysTime.add!"years"(-1); |
|---|
| | 2952 | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 2953 | sysTime.add!"years"(1); |
|---|
| | 2954 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 2955 | } |
|---|
| | 2956 | |
|---|
| | 2957 | { |
|---|
| | 2958 | auto sysTime = SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 2959 | sysTime.add!"years"(1); |
|---|
| | 2960 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 2961 | sysTime.add!"years"(-1); |
|---|
| | 2962 | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 2963 | } |
|---|
| | 2964 | |
|---|
| | 2965 | { |
|---|
| | 2966 | auto sysTime = SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 2967 | sysTime.add!"years"(1); |
|---|
| | 2968 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 2969 | sysTime.add!"years"(-1); |
|---|
| | 2970 | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 2971 | } |
|---|
| | 2972 | |
|---|
| | 2973 | { |
|---|
| | 2974 | auto sysTime = SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)); |
|---|
| | 2975 | sysTime.add!"years"(-5); |
|---|
| | 2976 | assertPred!"=="(sysTime, SysTime(DateTime(-1, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| | 2977 | sysTime.add!"years"(5); |
|---|
| | 2978 | assertPred!"=="(sysTime, SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| | 2979 | } |
|---|
| | 2980 | |
|---|
| | 2981 | { |
|---|
| | 2982 | auto sysTime = SysTime(DateTime(-4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)); |
|---|
| | 2983 | sysTime.add!"years"(5); |
|---|
| | 2984 | assertPred!"=="(sysTime, SysTime(DateTime(1, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| | 2985 | sysTime.add!"years"(-5); |
|---|
| | 2986 | assertPred!"=="(sysTime, SysTime(DateTime(-4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| | 2987 | } |
|---|
| | 2988 | |
|---|
| | 2989 | { |
|---|
| | 2990 | auto sysTime = SysTime(DateTime(-4, 2, 29, 5, 5, 5), FracSec.from!"msecs"(555)); |
|---|
| | 2991 | sysTime.add!"years"(5); |
|---|
| | 2992 | assertPred!"=="(sysTime, SysTime(DateTime(1, 3, 1, 5, 5, 5), FracSec.from!"msecs"(555))); |
|---|
| | 2993 | } |
|---|
| | 2994 | |
|---|
| | 2995 | { |
|---|
| | 2996 | auto sysTime = SysTime(DateTime(4, 2, 29, 5, 5, 5), FracSec.from!"msecs"(555)); |
|---|
| | 2997 | sysTime.add!"years"(-5); |
|---|
| | 2998 | assertPred!"=="(sysTime, SysTime(DateTime(-1, 3, 1, 5, 5, 5), FracSec.from!"msecs"(555))); |
|---|
| | 2999 | } |
|---|
| | 3000 | |
|---|
| | 3001 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 3002 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 3003 | static assert(!__traits(compiles, cst.add!"years"(4))); |
|---|
| | 3004 | //static assert(!__traits(compiles, ist.add!"years"(4))); |
|---|
| | 3005 | |
|---|
| | 3006 | //Verify Examples. |
|---|
| | 3007 | auto st1 = SysTime(DateTime(2010, 1, 1, 12, 30, 33)); |
|---|
| | 3008 | st1.add!"months"(11); |
|---|
| | 3009 | assert(st1 == SysTime(DateTime(2010, 12, 1, 12, 30, 33))); |
|---|
| | 3010 | |
|---|
| | 3011 | auto st2 = SysTime(DateTime(2010, 1, 1, 12, 30, 33)); |
|---|
| | 3012 | st2.add!"months"(-11); |
|---|
| | 3013 | assert(st2 == SysTime(DateTime(2009, 2, 1, 12, 30, 33))); |
|---|
| | 3014 | |
|---|
| | 3015 | auto st3 = SysTime(DateTime(2000, 2, 29, 12, 30, 33)); |
|---|
| | 3016 | st3.add!"years"(1); |
|---|
| | 3017 | assert(st3 == SysTime(DateTime(2001, 3, 1, 12, 30, 33))); |
|---|
| | 3018 | |
|---|
| | 3019 | auto st4 = SysTime(DateTime(2000, 2, 29, 12, 30, 33)); |
|---|
| | 3020 | st4.add!"years"(1, AllowDayOverflow.no); |
|---|
| | 3021 | assert(st4 == SysTime(DateTime(2001, 2, 28, 12, 30, 33))); |
|---|
| | 3022 | } |
|---|
| | 3023 | } |
|---|
| | 3024 | |
|---|
| | 3025 | //Test add!"years"() with AllowDayOverlow.no |
|---|
| | 3026 | unittest |
|---|
| | 3027 | { |
|---|
| | 3028 | version(testStdDateTime) |
|---|
| | 3029 | { |
|---|
| | 3030 | //Test A.D. |
|---|
| | 3031 | { |
|---|
| | 3032 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 3033 | sysTime.add!"years"(7, AllowDayOverflow.no); |
|---|
| | 3034 | assertPred!"=="(sysTime, SysTime(Date(2006, 7, 6))); |
|---|
| | 3035 | sysTime.add!"years"(-9, AllowDayOverflow.no); |
|---|
| | 3036 | assertPred!"=="(sysTime, SysTime(Date(1997, 7, 6))); |
|---|
| | 3037 | } |
|---|
| | 3038 | |
|---|
| | 3039 | { |
|---|
| | 3040 | auto sysTime = SysTime(Date(1999, 2, 28)); |
|---|
| | 3041 | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| | 3042 | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 28))); |
|---|
| | 3043 | } |
|---|
| | 3044 | |
|---|
| | 3045 | { |
|---|
| | 3046 | auto sysTime = SysTime(Date(2000, 2, 29)); |
|---|
| | 3047 | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| | 3048 | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28))); |
|---|
| | 3049 | } |
|---|
| | 3050 | |
|---|
| | 3051 | { |
|---|
| | 3052 | auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)); |
|---|
| | 3053 | sysTime.add!"years"(7, AllowDayOverflow.no); |
|---|
| | 3054 | assertPred!"=="(sysTime, SysTime(DateTime(2006, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| | 3055 | sysTime.add!"years"(-9, AllowDayOverflow.no); |
|---|
| | 3056 | assertPred!"=="(sysTime, SysTime(DateTime(1997, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| | 3057 | } |
|---|
| | 3058 | |
|---|
| | 3059 | { |
|---|
| | 3060 | auto sysTime = SysTime(DateTime(1999, 2, 28, 0, 7, 2), FracSec.from!"usecs"(1207)); |
|---|
| | 3061 | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| | 3062 | assertPred!"=="(sysTime, SysTime(DateTime(2000, 2, 28, 0, 7, 2), FracSec.from!"usecs"(1207))); |
|---|
| | 3063 | } |
|---|
| | 3064 | |
|---|
| | 3065 | { |
|---|
| | 3066 | auto sysTime = SysTime(DateTime(2000, 2, 29, 0, 7, 2), FracSec.from!"usecs"(1207)); |
|---|
| | 3067 | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| | 3068 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 2, 28, 0, 7, 2), FracSec.from!"usecs"(1207))); |
|---|
| | 3069 | } |
|---|
| | 3070 | |
|---|
| | 3071 | //Test B.C. |
|---|
| | 3072 | { |
|---|
| | 3073 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 3074 | sysTime.add!"years"(-7, AllowDayOverflow.no); |
|---|
| | 3075 | assertPred!"=="(sysTime, SysTime(Date(-2006, 7, 6))); |
|---|
| | 3076 | sysTime.add!"years"(9, AllowDayOverflow.no); |
|---|
| | 3077 | assertPred!"=="(sysTime, SysTime(Date(-1997, 7, 6))); |
|---|
| | 3078 | } |
|---|
| | 3079 | |
|---|
| | 3080 | { |
|---|
| | 3081 | auto sysTime = SysTime(Date(-1999, 2, 28)); |
|---|
| | 3082 | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| | 3083 | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 28))); |
|---|
| | 3084 | } |
|---|
| | 3085 | |
|---|
| | 3086 | { |
|---|
| | 3087 | auto sysTime = SysTime(Date(-2000, 2, 29)); |
|---|
| | 3088 | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| | 3089 | assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 28))); |
|---|
| | 3090 | } |
|---|
| | 3091 | |
|---|
| | 3092 | { |
|---|
| | 3093 | auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)); |
|---|
| | 3094 | sysTime.add!"years"(-7, AllowDayOverflow.no); |
|---|
| | 3095 | assertPred!"=="(sysTime, SysTime(DateTime(-2006, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| | 3096 | sysTime.add!"years"(9, AllowDayOverflow.no); |
|---|
| | 3097 | assertPred!"=="(sysTime, SysTime(DateTime(-1997, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| | 3098 | } |
|---|
| | 3099 | |
|---|
| | 3100 | { |
|---|
| | 3101 | auto sysTime = SysTime(DateTime(-1999, 2, 28, 3, 3, 3), FracSec.from!"hnsecs"(3)); |
|---|
| | 3102 | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| | 3103 | assertPred!"=="(sysTime, SysTime(DateTime(-2000, 2, 28, 3, 3, 3), FracSec.from!"hnsecs"(3))); |
|---|
| | 3104 | } |
|---|
| | 3105 | |
|---|
| | 3106 | { |
|---|
| | 3107 | auto sysTime = SysTime(DateTime(-2000, 2, 29, 3, 3, 3), FracSec.from!"hnsecs"(3)); |
|---|
| | 3108 | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| | 3109 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 2, 28, 3, 3, 3), FracSec.from!"hnsecs"(3))); |
|---|
| | 3110 | } |
|---|
| | 3111 | |
|---|
| | 3112 | //Test Both |
|---|
| | 3113 | { |
|---|
| | 3114 | auto sysTime = SysTime(Date(4, 7, 6)); |
|---|
| | 3115 | sysTime.add!"years"(-5, AllowDayOverflow.no); |
|---|
| | 3116 | assertPred!"=="(sysTime, SysTime(Date(-1, 7, 6))); |
|---|
| | 3117 | sysTime.add!"years"(5, AllowDayOverflow.no); |
|---|
| | 3118 | assertPred!"=="(sysTime, SysTime(Date(4, 7, 6))); |
|---|
| | 3119 | } |
|---|
| | 3120 | |
|---|
| | 3121 | { |
|---|
| | 3122 | auto sysTime = SysTime(Date(-4, 7, 6)); |
|---|
| | 3123 | sysTime.add!"years"(5, AllowDayOverflow.no); |
|---|
| | 3124 | assertPred!"=="(sysTime, SysTime(Date(1, 7, 6))); |
|---|
| | 3125 | sysTime.add!"years"(-5, AllowDayOverflow.no); |
|---|
| | 3126 | assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6))); |
|---|
| | 3127 | } |
|---|
| | 3128 | |
|---|
| | 3129 | { |
|---|
| | 3130 | auto sysTime = SysTime(Date(4, 7, 6)); |
|---|
| | 3131 | sysTime.add!"years"(-8, AllowDayOverflow.no); |
|---|
| | 3132 | assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6))); |
|---|
| | 3133 | sysTime.add!"years"(8, AllowDayOverflow.no); |
|---|
| | 3134 | assertPred!"=="(sysTime, SysTime(Date(4, 7, 6))); |
|---|
| | 3135 | } |
|---|
| | 3136 | |
|---|
| | 3137 | { |
|---|
| | 3138 | auto sysTime = SysTime(Date(-4, 7, 6)); |
|---|
| | 3139 | sysTime.add!"years"(8, AllowDayOverflow.no); |
|---|
| | 3140 | assertPred!"=="(sysTime, SysTime(Date(4, 7, 6))); |
|---|
| | 3141 | sysTime.add!"years"(-8, AllowDayOverflow.no); |
|---|
| | 3142 | assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6))); |
|---|
| | 3143 | } |
|---|
| | 3144 | |
|---|
| | 3145 | { |
|---|
| | 3146 | auto sysTime = SysTime(Date(-4, 2, 29)); |
|---|
| | 3147 | sysTime.add!"years"(5, AllowDayOverflow.no); |
|---|
| | 3148 | assertPred!"=="(sysTime, SysTime(Date(1, 2, 28))); |
|---|
| | 3149 | } |
|---|
| | 3150 | |
|---|
| | 3151 | { |
|---|
| | 3152 | auto sysTime = SysTime(Date(4, 2, 29)); |
|---|
| | 3153 | sysTime.add!"years"(-5, AllowDayOverflow.no); |
|---|
| | 3154 | assertPred!"=="(sysTime, SysTime(Date(-1, 2, 28))); |
|---|
| | 3155 | } |
|---|
| | 3156 | |
|---|
| | 3157 | { |
|---|
| | 3158 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 3159 | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| | 3160 | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 3161 | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| | 3162 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 3163 | } |
|---|
| | 3164 | |
|---|
| | 3165 | { |
|---|
| | 3166 | auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 3167 | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| | 3168 | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 3169 | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| | 3170 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 3171 | } |
|---|
| | 3172 | |
|---|
| | 3173 | { |
|---|
| | 3174 | auto sysTime = SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 3175 | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| | 3176 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 3177 | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| | 3178 | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 3179 | } |
|---|
| | 3180 | |
|---|
| | 3181 | { |
|---|
| | 3182 | auto sysTime = SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 3183 | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| | 3184 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 3185 | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| | 3186 | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 3187 | } |
|---|
| | 3188 | |
|---|
| | 3189 | { |
|---|
| | 3190 | auto sysTime = SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)); |
|---|
| | 3191 | sysTime.add!"years"(-5); |
|---|
| | 3192 | assertPred!"=="(sysTime, SysTime(DateTime(-1, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| | 3193 | sysTime.add!"years"(5); |
|---|
| | 3194 | assertPred!"=="(sysTime, SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| | 3195 | } |
|---|
| | 3196 | |
|---|
| | 3197 | { |
|---|
| | 3198 | auto sysTime = SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)); |
|---|
| | 3199 | sysTime.add!"years"(-5, AllowDayOverflow.no); |
|---|
| | 3200 | assertPred!"=="(sysTime, SysTime(DateTime(-1, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| | 3201 | sysTime.add!"years"(5, AllowDayOverflow.no); |
|---|
| | 3202 | assertPred!"=="(sysTime, SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| | 3203 | } |
|---|
| | 3204 | |
|---|
| | 3205 | { |
|---|
| | 3206 | auto sysTime = SysTime(DateTime(-4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)); |
|---|
| | 3207 | sysTime.add!"years"(5, AllowDayOverflow.no); |
|---|
| | 3208 | assertPred!"=="(sysTime, SysTime(DateTime(1, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| | 3209 | sysTime.add!"years"(-5, AllowDayOverflow.no); |
|---|
| | 3210 | assertPred!"=="(sysTime, SysTime(DateTime(-4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| | 3211 | } |
|---|
| | 3212 | |
|---|
| | 3213 | { |
|---|
| | 3214 | auto sysTime = SysTime(DateTime(-4, 2, 29, 5, 5, 5), FracSec.from!"msecs"(555)); |
|---|
| | 3215 | sysTime.add!"years"(5, AllowDayOverflow.no); |
|---|
| | 3216 | assertPred!"=="(sysTime, SysTime(DateTime(1, 2, 28, 5, 5, 5), FracSec.from!"msecs"(555))); |
|---|
| | 3217 | } |
|---|
| | 3218 | |
|---|
| | 3219 | { |
|---|
| | 3220 | auto sysTime = SysTime(DateTime(4, 2, 29, 5, 5, 5), FracSec.from!"msecs"(555)); |
|---|
| | 3221 | sysTime.add!"years"(-5, AllowDayOverflow.no); |
|---|
| | 3222 | assertPred!"=="(sysTime, SysTime(DateTime(-1, 2, 28, 5, 5, 5), FracSec.from!"msecs"(555))); |
|---|
| | 3223 | } |
|---|
| | 3224 | } |
|---|
| | 3225 | } |
|---|
| | 3226 | |
|---|
| | 3227 | //Test add!"months"() with AllowDayOverlow.yes |
|---|
| | 3228 | unittest |
|---|
| | 3229 | { |
|---|
| | 3230 | version(testStdDateTime) |
|---|
| | 3231 | { |
|---|
| | 3232 | //Test A.D. |
|---|
| | 3233 | { |
|---|
| | 3234 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 3235 | sysTime.add!"months"(3); |
|---|
| | 3236 | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6))); |
|---|
| | 3237 | sysTime.add!"months"(-4); |
|---|
| | 3238 | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| | 3239 | } |
|---|
| | 3240 | |
|---|
| | 3241 | { |
|---|
| | 3242 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 3243 | sysTime.add!"months"(6); |
|---|
| | 3244 | assertPred!"=="(sysTime, SysTime(Date(2000, 1, 6))); |
|---|
| | 3245 | sysTime.add!"months"(-6); |
|---|
| | 3246 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6))); |
|---|
| | 3247 | } |
|---|
| | 3248 | |
|---|
| | 3249 | { |
|---|
| | 3250 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 3251 | sysTime.add!"months"(27); |
|---|
| | 3252 | assertPred!"=="(sysTime, SysTime(Date(2001, 10, 6))); |
|---|
| | 3253 | sysTime.add!"months"(-28); |
|---|
| | 3254 | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| | 3255 | } |
|---|
| | 3256 | |
|---|
| | 3257 | { |
|---|
| | 3258 | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| | 3259 | sysTime.add!"months"(1); |
|---|
| | 3260 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 1))); |
|---|
| | 3261 | } |
|---|
| | 3262 | |
|---|
| | 3263 | { |
|---|
| | 3264 | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| | 3265 | sysTime.add!"months"(-1); |
|---|
| | 3266 | assertPred!"=="(sysTime, SysTime(Date(1999, 5, 1))); |
|---|
| | 3267 | } |
|---|
| | 3268 | |
|---|
| | 3269 | { |
|---|
| | 3270 | auto sysTime = SysTime(Date(1999, 2, 28)); |
|---|
| | 3271 | sysTime.add!"months"(12); |
|---|
| | 3272 | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 28))); |
|---|
| | 3273 | } |
|---|
| | 3274 | |
|---|
| | 3275 | { |
|---|
| | 3276 | auto sysTime = SysTime(Date(2000, 2, 29)); |
|---|
| | 3277 | sysTime.add!"months"(12); |
|---|
| | 3278 | assertPred!"=="(sysTime, SysTime(Date(2001, 3, 1))); |
|---|
| | 3279 | } |
|---|
| | 3280 | |
|---|
| | 3281 | { |
|---|
| | 3282 | auto sysTime = SysTime(Date(1999, 7, 31)); |
|---|
| | 3283 | sysTime.add!"months"(1); |
|---|
| | 3284 | assertPred!"=="(sysTime, SysTime(Date(1999, 8, 31))); |
|---|
| | 3285 | sysTime.add!"months"(1); |
|---|
| | 3286 | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 1))); |
|---|
| | 3287 | } |
|---|
| | 3288 | |
|---|
| | 3289 | { |
|---|
| | 3290 | auto sysTime = SysTime(Date(1998, 8, 31)); |
|---|
| | 3291 | sysTime.add!"months"(13); |
|---|
| | 3292 | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 1))); |
|---|
| | 3293 | sysTime.add!"months"(-13); |
|---|
| | 3294 | assertPred!"=="(sysTime, SysTime(Date(1998, 9, 1))); |
|---|
| | 3295 | } |
|---|
| | 3296 | |
|---|
| | 3297 | { |
|---|
| | 3298 | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| | 3299 | sysTime.add!"months"(13); |
|---|
| | 3300 | assertPred!"=="(sysTime, SysTime(Date(1999, 1, 31))); |
|---|
| | 3301 | sysTime.add!"months"(-13); |
|---|
| | 3302 | assertPred!"=="(sysTime, SysTime(Date(1997, 12, 31))); |
|---|
| | 3303 | } |
|---|
| | 3304 | |
|---|
| | 3305 | { |
|---|
| | 3306 | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| | 3307 | sysTime.add!"months"(14); |
|---|
| | 3308 | assertPred!"=="(sysTime, SysTime(Date(1999, 3, 3))); |
|---|
| | 3309 | sysTime.add!"months"(-14); |
|---|
| | 3310 | assertPred!"=="(sysTime, SysTime(Date(1998, 1, 3))); |
|---|
| | 3311 | } |
|---|
| | 3312 | |
|---|
| | 3313 | { |
|---|
| | 3314 | auto sysTime = SysTime(Date(1998, 12, 31)); |
|---|
| | 3315 | sysTime.add!"months"(14); |
|---|
| | 3316 | assertPred!"=="(sysTime, SysTime(Date(2000, 3, 2))); |
|---|
| | 3317 | sysTime.add!"months"(-14); |
|---|
| | 3318 | assertPred!"=="(sysTime, SysTime(Date(1999, 1, 2))); |
|---|
| | 3319 | } |
|---|
| | 3320 | |
|---|
| | 3321 | { |
|---|
| | 3322 | auto sysTime = SysTime(Date(1999, 12, 31)); |
|---|
| | 3323 | sysTime.add!"months"(14); |
|---|
| | 3324 | assertPred!"=="(sysTime, SysTime(Date(2001, 3, 3))); |
|---|
| | 3325 | sysTime.add!"months"(-14); |
|---|
| | 3326 | assertPred!"=="(sysTime, SysTime(Date(2000, 1, 3))); |
|---|
| | 3327 | } |
|---|
| | 3328 | |
|---|
| | 3329 | { |
|---|
| | 3330 | auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007)); |
|---|
| | 3331 | sysTime.add!"months"(3); |
|---|
| | 3332 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| | 3333 | sysTime.add!"months"(-4); |
|---|
| | 3334 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| | 3335 | } |
|---|
| | 3336 | |
|---|
| | 3337 | { |
|---|
| | 3338 | auto sysTime = SysTime(DateTime(1998, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 3339 | sysTime.add!"months"(14); |
|---|
| | 3340 | assertPred!"=="(sysTime, SysTime(DateTime(2000, 3, 2, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3341 | sysTime.add!"months"(-14); |
|---|
| | 3342 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 1, 2, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3343 | } |
|---|
| | 3344 | |
|---|
| | 3345 | { |
|---|
| | 3346 | auto sysTime = SysTime(DateTime(1999, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 3347 | sysTime.add!"months"(14); |
|---|
| | 3348 | assertPred!"=="(sysTime, SysTime(DateTime(2001, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3349 | sysTime.add!"months"(-14); |
|---|
| | 3350 | assertPred!"=="(sysTime, SysTime(DateTime(2000, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3351 | } |
|---|
| | 3352 | |
|---|
| | 3353 | //Test B.C. |
|---|
| | 3354 | { |
|---|
| | 3355 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 3356 | sysTime.add!"months"(3); |
|---|
| | 3357 | assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 6))); |
|---|
| | 3358 | sysTime.add!"months"(-4); |
|---|
| | 3359 | assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 6))); |
|---|
| | 3360 | } |
|---|
| | 3361 | |
|---|
| | 3362 | { |
|---|
| | 3363 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 3364 | sysTime.add!"months"(6); |
|---|
| | 3365 | assertPred!"=="(sysTime, SysTime(Date(-1998, 1, 6))); |
|---|
| | 3366 | sysTime.add!"months"(-6); |
|---|
| | 3367 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6))); |
|---|
| | 3368 | } |
|---|
| | 3369 | |
|---|
| | 3370 | { |
|---|
| | 3371 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 3372 | sysTime.add!"months"(-27); |
|---|
| | 3373 | assertPred!"=="(sysTime, SysTime(Date(-2001, 4, 6))); |
|---|
| | 3374 | sysTime.add!"months"(28); |
|---|
| | 3375 | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 6))); |
|---|
| | 3376 | } |
|---|
| | 3377 | |
|---|
| | 3378 | { |
|---|
| | 3379 | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| | 3380 | sysTime.add!"months"(1); |
|---|
| | 3381 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 1))); |
|---|
| | 3382 | } |
|---|
| | 3383 | |
|---|
| | 3384 | { |
|---|
| | 3385 | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| | 3386 | sysTime.add!"months"(-1); |
|---|
| | 3387 | assertPred!"=="(sysTime, SysTime(Date(-1999, 5, 1))); |
|---|
| | 3388 | } |
|---|
| | 3389 | |
|---|
| | 3390 | { |
|---|
| | 3391 | auto sysTime = SysTime(Date(-1999, 2, 28)); |
|---|
| | 3392 | sysTime.add!"months"(-12); |
|---|
| | 3393 | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 28))); |
|---|
| | 3394 | } |
|---|
| | 3395 | |
|---|
| | 3396 | { |
|---|
| | 3397 | auto sysTime = SysTime(Date(-2000, 2, 29)); |
|---|
| | 3398 | sysTime.add!"months"(-12); |
|---|
| | 3399 | assertPred!"=="(sysTime, SysTime(Date(-2001, 3, 1))); |
|---|
| | 3400 | } |
|---|
| | 3401 | |
|---|
| | 3402 | { |
|---|
| | 3403 | auto sysTime = SysTime(Date(-1999, 7, 31)); |
|---|
| | 3404 | sysTime.add!"months"(1); |
|---|
| | 3405 | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 31))); |
|---|
| | 3406 | sysTime.add!"months"(1); |
|---|
| | 3407 | assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 1))); |
|---|
| | 3408 | } |
|---|
| | 3409 | |
|---|
| | 3410 | { |
|---|
| | 3411 | auto sysTime = SysTime(Date(-1998, 8, 31)); |
|---|
| | 3412 | sysTime.add!"months"(13); |
|---|
| | 3413 | assertPred!"=="(sysTime, SysTime(Date(-1997, 10, 1))); |
|---|
| | 3414 | sysTime.add!"months"(-13); |
|---|
| | 3415 | assertPred!"=="(sysTime, SysTime(Date(-1998, 9, 1))); |
|---|
| | 3416 | } |
|---|
| | 3417 | |
|---|
| | 3418 | { |
|---|
| | 3419 | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| | 3420 | sysTime.add!"months"(13); |
|---|
| | 3421 | assertPred!"=="(sysTime, SysTime(Date(-1995, 1, 31))); |
|---|
| | 3422 | sysTime.add!"months"(-13); |
|---|
| | 3423 | assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 31))); |
|---|
| | 3424 | } |
|---|
| | 3425 | |
|---|
| | 3426 | { |
|---|
| | 3427 | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| | 3428 | sysTime.add!"months"(14); |
|---|
| | 3429 | assertPred!"=="(sysTime, SysTime(Date(-1995, 3, 3))); |
|---|
| | 3430 | sysTime.add!"months"(-14); |
|---|
| | 3431 | assertPred!"=="(sysTime, SysTime(Date(-1996, 1, 3))); |
|---|
| | 3432 | } |
|---|
| | 3433 | |
|---|
| | 3434 | { |
|---|
| | 3435 | auto sysTime = SysTime(Date(-2002, 12, 31)); |
|---|
| | 3436 | sysTime.add!"months"(14); |
|---|
| | 3437 | assertPred!"=="(sysTime, SysTime(Date(-2000, 3, 2))); |
|---|
| | 3438 | sysTime.add!"months"(-14); |
|---|
| | 3439 | assertPred!"=="(sysTime, SysTime(Date(-2001, 1, 2))); |
|---|
| | 3440 | } |
|---|
| | 3441 | |
|---|
| | 3442 | { |
|---|
| | 3443 | auto sysTime = SysTime(Date(-2001, 12, 31)); |
|---|
| | 3444 | sysTime.add!"months"(14); |
|---|
| | 3445 | assertPred!"=="(sysTime, SysTime(Date(-1999, 3, 3))); |
|---|
| | 3446 | sysTime.add!"months"(-14); |
|---|
| | 3447 | assertPred!"=="(sysTime, SysTime(Date(-2000, 1, 3))); |
|---|
| | 3448 | } |
|---|
| | 3449 | |
|---|
| | 3450 | { |
|---|
| | 3451 | auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007)); |
|---|
| | 3452 | sysTime.add!"months"(3); |
|---|
| | 3453 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| | 3454 | sysTime.add!"months"(-4); |
|---|
| | 3455 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| | 3456 | } |
|---|
| | 3457 | |
|---|
| | 3458 | { |
|---|
| | 3459 | auto sysTime = SysTime(DateTime(-2002, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 3460 | sysTime.add!"months"(14); |
|---|
| | 3461 | assertPred!"=="(sysTime, SysTime(DateTime(-2000, 3, 2, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3462 | sysTime.add!"months"(-14); |
|---|
| | 3463 | assertPred!"=="(sysTime, SysTime(DateTime(-2001, 1, 2, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3464 | } |
|---|
| | 3465 | |
|---|
| | 3466 | { |
|---|
| | 3467 | auto sysTime = SysTime(DateTime(-2001, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 3468 | sysTime.add!"months"(14); |
|---|
| | 3469 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3470 | sysTime.add!"months"(-14); |
|---|
| | 3471 | assertPred!"=="(sysTime, SysTime(DateTime(-2000, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3472 | } |
|---|
| | 3473 | |
|---|
| | 3474 | //Test Both |
|---|
| | 3475 | { |
|---|
| | 3476 | auto sysTime = SysTime(Date(1, 1, 1)); |
|---|
| | 3477 | sysTime.add!"months"(-1); |
|---|
| | 3478 | assertPred!"=="(sysTime, SysTime(Date(0, 12, 1))); |
|---|
| | 3479 | sysTime.add!"months"(1); |
|---|
| | 3480 | assertPred!"=="(sysTime, SysTime(Date(1, 1, 1))); |
|---|
| | 3481 | } |
|---|
| | 3482 | |
|---|
| | 3483 | { |
|---|
| | 3484 | auto sysTime = SysTime(Date(4, 1, 1)); |
|---|
| | 3485 | sysTime.add!"months"(-48); |
|---|
| | 3486 | assertPred!"=="(sysTime, SysTime(Date(0, 1, 1))); |
|---|
| | 3487 | sysTime.add!"months"(48); |
|---|
| | 3488 | assertPred!"=="(sysTime, SysTime(Date(4, 1, 1))); |
|---|
| | 3489 | } |
|---|
| | 3490 | |
|---|
| | 3491 | { |
|---|
| | 3492 | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| | 3493 | sysTime.add!"months"(-49); |
|---|
| | 3494 | assertPred!"=="(sysTime, SysTime(Date(0, 3, 2))); |
|---|
| | 3495 | sysTime.add!"months"(49); |
|---|
| | 3496 | assertPred!"=="(sysTime, SysTime(Date(4, 4, 2))); |
|---|
| | 3497 | } |
|---|
| | 3498 | |
|---|
| | 3499 | { |
|---|
| | 3500 | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| | 3501 | sysTime.add!"months"(-85); |
|---|
| | 3502 | assertPred!"=="(sysTime, SysTime(Date(-3, 3, 3))); |
|---|
| | 3503 | sysTime.add!"months"(85); |
|---|
| | 3504 | assertPred!"=="(sysTime, SysTime(Date(4, 4, 3))); |
|---|
| | 3505 | } |
|---|
| | 3506 | |
|---|
| | 3507 | { |
|---|
| | 3508 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 3509 | sysTime.add!"months"(-1); |
|---|
| | 3510 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 3511 | sysTime.add!"months"(1); |
|---|
| | 3512 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 3513 | } |
|---|
| | 3514 | |
|---|
| | 3515 | { |
|---|
| | 3516 | auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 3517 | sysTime.add!"months"(-1); |
|---|
| | 3518 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 3519 | sysTime.add!"months"(1); |
|---|
| | 3520 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 3521 | } |
|---|
| | 3522 | |
|---|
| | 3523 | { |
|---|
| | 3524 | auto sysTime = SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 3525 | sysTime.add!"months"(1); |
|---|
| | 3526 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 3527 | sysTime.add!"months"(-1); |
|---|
| | 3528 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 3529 | } |
|---|
| | 3530 | |
|---|
| | 3531 | { |
|---|
| | 3532 | auto sysTime = SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 3533 | sysTime.add!"months"(1); |
|---|
| | 3534 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 3535 | sysTime.add!"months"(-1); |
|---|
| | 3536 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 3537 | } |
|---|
| | 3538 | |
|---|
| | 3539 | { |
|---|
| | 3540 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)); |
|---|
| | 3541 | sysTime.add!"months"(-1); |
|---|
| | 3542 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| | 3543 | sysTime.add!"months"(1); |
|---|
| | 3544 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| | 3545 | } |
|---|
| | 3546 | |
|---|
| | 3547 | { |
|---|
| | 3548 | auto sysTime = SysTime(DateTime(4, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| | 3549 | sysTime.add!"months"(-85); |
|---|
| | 3550 | assertPred!"=="(sysTime, SysTime(DateTime(-3, 3, 3, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 3551 | sysTime.add!"months"(85); |
|---|
| | 3552 | assertPred!"=="(sysTime, SysTime(DateTime(4, 4, 3, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 3553 | } |
|---|
| | 3554 | |
|---|
| | 3555 | { |
|---|
| | 3556 | auto sysTime = SysTime(DateTime(-3, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| | 3557 | sysTime.add!"months"(85); |
|---|
| | 3558 | assertPred!"=="(sysTime, SysTime(DateTime(4, 5, 1, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 3559 | sysTime.add!"months"(-85); |
|---|
| | 3560 | assertPred!"=="(sysTime, SysTime(DateTime(-3, 4, 1, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 3561 | } |
|---|
| | 3562 | |
|---|
| | 3563 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 3564 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 3565 | static assert(!__traits(compiles, cst.add!"months"(4))); |
|---|
| | 3566 | //static assert(!__traits(compiles, ist.add!"months"(4))); |
|---|
| | 3567 | |
|---|
| | 3568 | //Verify Examples. |
|---|
| | 3569 | auto st1 = SysTime(DateTime(2010, 1, 1, 12, 30 ,33)); |
|---|
| | 3570 | st1.add!"months"(1); |
|---|
| | 3571 | assert(st1 == SysTime(DateTime(2010, 2, 1, 12, 30 ,33))); |
|---|
| | 3572 | |
|---|
| | 3573 | auto st2 = SysTime(DateTime(2010, 1, 1, 12, 30 ,33)); |
|---|
| | 3574 | st2.add!"months"(-1); |
|---|
| | 3575 | assert(st2 == SysTime(DateTime(2009, 12, 1, 12, 30 ,33))); |
|---|
| | 3576 | |
|---|
| | 3577 | auto st3 = SysTime(DateTime(1999, 1, 29, 12, 30 ,33)); |
|---|
| | 3578 | st3.add!"months"(1); |
|---|
| | 3579 | assert(st3 == SysTime(DateTime(1999, 3, 1, 12, 30 ,33))); |
|---|
| | 3580 | |
|---|
| | 3581 | auto st4 = SysTime(DateTime(1999, 1, 29, 12, 30 ,33)); |
|---|
| | 3582 | st4.add!"months"(1, AllowDayOverflow.no); |
|---|
| | 3583 | assert(st4 == SysTime(DateTime(1999, 2, 28, 12, 30 ,33))); |
|---|
| | 3584 | } |
|---|
| | 3585 | } |
|---|
| | 3586 | |
|---|
| | 3587 | //Test add!"months"() with AllowDayOverlow.no |
|---|
| | 3588 | unittest |
|---|
| | 3589 | { |
|---|
| | 3590 | version(testStdDateTime) |
|---|
| | 3591 | { |
|---|
| | 3592 | //Test A.D. |
|---|
| | 3593 | { |
|---|
| | 3594 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 3595 | sysTime.add!"months"(3, AllowDayOverflow.no); |
|---|
| | 3596 | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6))); |
|---|
| | 3597 | sysTime.add!"months"(-4, AllowDayOverflow.no); |
|---|
| | 3598 | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| | 3599 | } |
|---|
| | 3600 | |
|---|
| | 3601 | { |
|---|
| | 3602 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 3603 | sysTime.add!"months"(6, AllowDayOverflow.no); |
|---|
| | 3604 | assertPred!"=="(sysTime, SysTime(Date(2000, 1, 6))); |
|---|
| | 3605 | sysTime.add!"months"(-6, AllowDayOverflow.no); |
|---|
| | 3606 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6))); |
|---|
| | 3607 | } |
|---|
| | 3608 | |
|---|
| | 3609 | { |
|---|
| | 3610 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 3611 | sysTime.add!"months"(27, AllowDayOverflow.no); |
|---|
| | 3612 | assertPred!"=="(sysTime, SysTime(Date(2001, 10, 6))); |
|---|
| | 3613 | sysTime.add!"months"(-28, AllowDayOverflow.no); |
|---|
| | 3614 | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| | 3615 | } |
|---|
| | 3616 | |
|---|
| | 3617 | { |
|---|
| | 3618 | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| | 3619 | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| | 3620 | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 30))); |
|---|
| | 3621 | } |
|---|
| | 3622 | |
|---|
| | 3623 | { |
|---|
| | 3624 | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| | 3625 | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| | 3626 | assertPred!"=="(sysTime, SysTime(Date(1999, 4, 30))); |
|---|
| | 3627 | } |
|---|
| | 3628 | |
|---|
| | 3629 | { |
|---|
| | 3630 | auto sysTime = SysTime(Date(1999, 2, 28)); |
|---|
| | 3631 | sysTime.add!"months"(12, AllowDayOverflow.no); |
|---|
| | 3632 | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 28))); |
|---|
| | 3633 | } |
|---|
| | 3634 | |
|---|
| | 3635 | { |
|---|
| | 3636 | auto sysTime = SysTime(Date(2000, 2, 29)); |
|---|
| | 3637 | sysTime.add!"months"(12, AllowDayOverflow.no); |
|---|
| | 3638 | assertPred!"=="(sysTime, SysTime(Date(2001, 2, 28))); |
|---|
| | 3639 | } |
|---|
| | 3640 | |
|---|
| | 3641 | { |
|---|
| | 3642 | auto sysTime = SysTime(Date(1999, 7, 31)); |
|---|
| | 3643 | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| | 3644 | assertPred!"=="(sysTime, SysTime(Date(1999, 8, 31))); |
|---|
| | 3645 | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| | 3646 | assertPred!"=="(sysTime, SysTime(Date(1999, 9, 30))); |
|---|
| | 3647 | } |
|---|
| | 3648 | |
|---|
| | 3649 | { |
|---|
| | 3650 | auto sysTime = SysTime(Date(1998, 8, 31)); |
|---|
| | 3651 | sysTime.add!"months"(13, AllowDayOverflow.no); |
|---|
| | 3652 | assertPred!"=="(sysTime, SysTime(Date(1999, 9, 30))); |
|---|
| | 3653 | sysTime.add!"months"(-13, AllowDayOverflow.no); |
|---|
| | 3654 | assertPred!"=="(sysTime, SysTime(Date(1998, 8, 30))); |
|---|
| | 3655 | } |
|---|
| | 3656 | |
|---|
| | 3657 | { |
|---|
| | 3658 | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| | 3659 | sysTime.add!"months"(13, AllowDayOverflow.no); |
|---|
| | 3660 | assertPred!"=="(sysTime, SysTime(Date(1999, 1, 31))); |
|---|
| | 3661 | sysTime.add!"months"(-13, AllowDayOverflow.no); |
|---|
| | 3662 | assertPred!"=="(sysTime, SysTime(Date(1997, 12, 31))); |
|---|
| | 3663 | } |
|---|
| | 3664 | |
|---|
| | 3665 | { |
|---|
| | 3666 | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| | 3667 | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| | 3668 | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28))); |
|---|
| | 3669 | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| | 3670 | assertPred!"=="(sysTime, SysTime(Date(1997, 12, 28))); |
|---|
| | 3671 | } |
|---|
| | 3672 | |
|---|
| | 3673 | { |
|---|
| | 3674 | auto sysTime = SysTime(Date(1998, 12, 31)); |
|---|
| | 3675 | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| | 3676 | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 29))); |
|---|
| | 3677 | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| | 3678 | assertPred!"=="(sysTime, SysTime(Date(1998, 12, 29))); |
|---|
| | 3679 | } |
|---|
| | 3680 | |
|---|
| | 3681 | { |
|---|
| | 3682 | auto sysTime = SysTime(Date(1999, 12, 31)); |
|---|
| | 3683 | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| | 3684 | assertPred!"=="(sysTime, SysTime(Date(2001, 2, 28))); |
|---|
| | 3685 | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| | 3686 | assertPred!"=="(sysTime, SysTime(Date(1999, 12, 28))); |
|---|
| | 3687 | } |
|---|
| | 3688 | |
|---|
| | 3689 | { |
|---|
| | 3690 | auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007)); |
|---|
| | 3691 | sysTime.add!"months"(3, AllowDayOverflow.no); |
|---|
| | 3692 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| | 3693 | sysTime.add!"months"(-4, AllowDayOverflow.no); |
|---|
| | 3694 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| | 3695 | } |
|---|
| | 3696 | |
|---|
| | 3697 | { |
|---|
| | 3698 | auto sysTime = SysTime(DateTime(1998, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 3699 | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| | 3700 | assertPred!"=="(sysTime, SysTime(DateTime(2000, 2, 29, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3701 | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| | 3702 | assertPred!"=="(sysTime, SysTime(DateTime(1998, 12, 29, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3703 | } |
|---|
| | 3704 | |
|---|
| | 3705 | { |
|---|
| | 3706 | auto sysTime = SysTime(DateTime(1999, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 3707 | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| | 3708 | assertPred!"=="(sysTime, SysTime(DateTime(2001, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3709 | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| | 3710 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3711 | } |
|---|
| | 3712 | |
|---|
| | 3713 | //Test B.C. |
|---|
| | 3714 | { |
|---|
| | 3715 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 3716 | sysTime.add!"months"(3, AllowDayOverflow.no); |
|---|
| | 3717 | assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 6))); |
|---|
| | 3718 | sysTime.add!"months"(-4, AllowDayOverflow.no); |
|---|
| | 3719 | assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 6))); |
|---|
| | 3720 | } |
|---|
| | 3721 | |
|---|
| | 3722 | { |
|---|
| | 3723 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 3724 | sysTime.add!"months"(6, AllowDayOverflow.no); |
|---|
| | 3725 | assertPred!"=="(sysTime, SysTime(Date(-1998, 1, 6))); |
|---|
| | 3726 | sysTime.add!"months"(-6, AllowDayOverflow.no); |
|---|
| | 3727 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6))); |
|---|
| | 3728 | } |
|---|
| | 3729 | |
|---|
| | 3730 | { |
|---|
| | 3731 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 3732 | sysTime.add!"months"(-27, AllowDayOverflow.no); |
|---|
| | 3733 | assertPred!"=="(sysTime, SysTime(Date(-2001, 4, 6))); |
|---|
| | 3734 | sysTime.add!"months"(28, AllowDayOverflow.no); |
|---|
| | 3735 | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 6))); |
|---|
| | 3736 | } |
|---|
| | 3737 | |
|---|
| | 3738 | { |
|---|
| | 3739 | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| | 3740 | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| | 3741 | assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 30))); |
|---|
| | 3742 | } |
|---|
| | 3743 | |
|---|
| | 3744 | { |
|---|
| | 3745 | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| | 3746 | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| | 3747 | assertPred!"=="(sysTime, SysTime(Date(-1999, 4, 30))); |
|---|
| | 3748 | } |
|---|
| | 3749 | |
|---|
| | 3750 | { |
|---|
| | 3751 | auto sysTime = SysTime(Date(-1999, 2, 28)); |
|---|
| | 3752 | sysTime.add!"months"(-12, AllowDayOverflow.no); |
|---|
| | 3753 | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 28))); |
|---|
| | 3754 | } |
|---|
| | 3755 | |
|---|
| | 3756 | { |
|---|
| | 3757 | auto sysTime = SysTime(Date(-2000, 2, 29)); |
|---|
| | 3758 | sysTime.add!"months"(-12, AllowDayOverflow.no); |
|---|
| | 3759 | assertPred!"=="(sysTime, SysTime(Date(-2001, 2, 28))); |
|---|
| | 3760 | } |
|---|
| | 3761 | |
|---|
| | 3762 | { |
|---|
| | 3763 | auto sysTime = SysTime(Date(-1999, 7, 31)); |
|---|
| | 3764 | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| | 3765 | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 31))); |
|---|
| | 3766 | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| | 3767 | assertPred!"=="(sysTime, SysTime(Date(-1999, 9, 30))); |
|---|
| | 3768 | } |
|---|
| | 3769 | |
|---|
| | 3770 | { |
|---|
| | 3771 | auto sysTime = SysTime(Date(-1998, 8, 31)); |
|---|
| | 3772 | sysTime.add!"months"(13, AllowDayOverflow.no); |
|---|
| | 3773 | assertPred!"=="(sysTime, SysTime(Date(-1997, 9, 30))); |
|---|
| | 3774 | sysTime.add!"months"(-13, AllowDayOverflow.no); |
|---|
| | 3775 | assertPred!"=="(sysTime, SysTime(Date(-1998, 8, 30))); |
|---|
| | 3776 | } |
|---|
| | 3777 | |
|---|
| | 3778 | { |
|---|
| | 3779 | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| | 3780 | sysTime.add!"months"(13, AllowDayOverflow.no); |
|---|
| | 3781 | assertPred!"=="(sysTime, SysTime(Date(-1995, 1, 31))); |
|---|
| | 3782 | sysTime.add!"months"(-13, AllowDayOverflow.no); |
|---|
| | 3783 | assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 31))); |
|---|
| | 3784 | } |
|---|
| | 3785 | |
|---|
| | 3786 | { |
|---|
| | 3787 | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| | 3788 | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| | 3789 | assertPred!"=="(sysTime, SysTime(Date(-1995, 2, 28))); |
|---|
| | 3790 | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| | 3791 | assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 28))); |
|---|
| | 3792 | } |
|---|
| | 3793 | |
|---|
| | 3794 | { |
|---|
| | 3795 | auto sysTime = SysTime(Date(-2002, 12, 31)); |
|---|
| | 3796 | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| | 3797 | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 29))); |
|---|
| | 3798 | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| | 3799 | assertPred!"=="(sysTime, SysTime(Date(-2002, 12, 29))); |
|---|
| | 3800 | } |
|---|
| | 3801 | |
|---|
| | 3802 | { |
|---|
| | 3803 | auto sysTime = SysTime(Date(-2001, 12, 31)); |
|---|
| | 3804 | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| | 3805 | assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 28))); |
|---|
| | 3806 | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| | 3807 | assertPred!"=="(sysTime, SysTime(Date(-2001, 12, 28))); |
|---|
| | 3808 | } |
|---|
| | 3809 | |
|---|
| | 3810 | { |
|---|
| | 3811 | auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007)); |
|---|
| | 3812 | sysTime.add!"months"(3, AllowDayOverflow.no); |
|---|
| | 3813 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| | 3814 | sysTime.add!"months"(-4, AllowDayOverflow.no); |
|---|
| | 3815 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| | 3816 | } |
|---|
| | 3817 | |
|---|
| | 3818 | { |
|---|
| | 3819 | auto sysTime = SysTime(DateTime(-2002, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 3820 | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| | 3821 | assertPred!"=="(sysTime, SysTime(DateTime(-2000, 2, 29, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3822 | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| | 3823 | assertPred!"=="(sysTime, SysTime(DateTime(-2002, 12, 29, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3824 | } |
|---|
| | 3825 | |
|---|
| | 3826 | { |
|---|
| | 3827 | auto sysTime = SysTime(DateTime(-2001, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 3828 | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| | 3829 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3830 | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| | 3831 | assertPred!"=="(sysTime, SysTime(DateTime(-2001, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 3832 | } |
|---|
| | 3833 | |
|---|
| | 3834 | //Test Both |
|---|
| | 3835 | { |
|---|
| | 3836 | auto sysTime = SysTime(Date(1, 1, 1)); |
|---|
| | 3837 | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| | 3838 | assertPred!"=="(sysTime, SysTime(Date(0, 12, 1))); |
|---|
| | 3839 | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| | 3840 | assertPred!"=="(sysTime, SysTime(Date(1, 1, 1))); |
|---|
| | 3841 | } |
|---|
| | 3842 | |
|---|
| | 3843 | { |
|---|
| | 3844 | auto sysTime = SysTime(Date(4, 1, 1)); |
|---|
| | 3845 | sysTime.add!"months"(-48, AllowDayOverflow.no); |
|---|
| | 3846 | assertPred!"=="(sysTime, SysTime(Date(0, 1, 1))); |
|---|
| | 3847 | sysTime.add!"months"(48, AllowDayOverflow.no); |
|---|
| | 3848 | assertPred!"=="(sysTime, SysTime(Date(4, 1, 1))); |
|---|
| | 3849 | } |
|---|
| | 3850 | |
|---|
| | 3851 | { |
|---|
| | 3852 | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| | 3853 | sysTime.add!"months"(-49, AllowDayOverflow.no); |
|---|
| | 3854 | assertPred!"=="(sysTime, SysTime(Date(0, 2, 29))); |
|---|
| | 3855 | sysTime.add!"months"(49, AllowDayOverflow.no); |
|---|
| | 3856 | assertPred!"=="(sysTime, SysTime(Date(4, 3, 29))); |
|---|
| | 3857 | } |
|---|
| | 3858 | |
|---|
| | 3859 | { |
|---|
| | 3860 | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| | 3861 | sysTime.add!"months"(-85, AllowDayOverflow.no); |
|---|
| | 3862 | assertPred!"=="(sysTime, SysTime(Date(-3, 2, 28))); |
|---|
| | 3863 | sysTime.add!"months"(85, AllowDayOverflow.no); |
|---|
| | 3864 | assertPred!"=="(sysTime, SysTime(Date(4, 3, 28))); |
|---|
| | 3865 | } |
|---|
| | 3866 | |
|---|
| | 3867 | { |
|---|
| | 3868 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 3869 | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| | 3870 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 3871 | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| | 3872 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 3873 | } |
|---|
| | 3874 | |
|---|
| | 3875 | { |
|---|
| | 3876 | auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 3877 | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| | 3878 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 3879 | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| | 3880 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 3881 | } |
|---|
| | 3882 | |
|---|
| | 3883 | { |
|---|
| | 3884 | auto sysTime = SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 3885 | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| | 3886 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 3887 | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| | 3888 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 3889 | } |
|---|
| | 3890 | |
|---|
| | 3891 | { |
|---|
| | 3892 | auto sysTime = SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 3893 | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| | 3894 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 3895 | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| | 3896 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 3897 | } |
|---|
| | 3898 | |
|---|
| | 3899 | { |
|---|
| | 3900 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)); |
|---|
| | 3901 | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| | 3902 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| | 3903 | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| | 3904 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| | 3905 | } |
|---|
| | 3906 | |
|---|
| | 3907 | { |
|---|
| | 3908 | auto sysTime = SysTime(DateTime(4, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| | 3909 | sysTime.add!"months"(-85, AllowDayOverflow.no); |
|---|
| | 3910 | assertPred!"=="(sysTime, SysTime(DateTime(-3, 2, 28, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 3911 | sysTime.add!"months"(85, AllowDayOverflow.no); |
|---|
| | 3912 | assertPred!"=="(sysTime, SysTime(DateTime(4, 3, 28, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 3913 | } |
|---|
| | 3914 | |
|---|
| | 3915 | { |
|---|
| | 3916 | auto sysTime = SysTime(DateTime(-3, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| | 3917 | sysTime.add!"months"(85, AllowDayOverflow.no); |
|---|
| | 3918 | assertPred!"=="(sysTime, SysTime(DateTime(4, 4, 30, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 3919 | sysTime.add!"months"(-85, AllowDayOverflow.no); |
|---|
| | 3920 | assertPred!"=="(sysTime, SysTime(DateTime(-3, 3, 30, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 3921 | } |
|---|
| | 3922 | } |
|---|
| | 3923 | } |
|---|
| | 3924 | |
|---|
| | 3925 | |
|---|
| | 3926 | /++ |
|---|
| | 3927 | Adds the given number of years to this SysTime. A negative number will |
|---|
| | 3928 | subtract. |
|---|
| | 3929 | |
|---|
| | 3930 | For years, because they are the largest unit in SysTime, there is no |
|---|
| | 3931 | difference between adding or rolling. |
|---|
| | 3932 | |
|---|
| | 3933 | Params: |
|---|
| | 3934 | years = The number of years to add to this SysTime. |
|---|
| | 3935 | allowOverflow = Whether the days should be allowed to overflow, |
|---|
| | 3936 | causing the month to increment. |
|---|
| | 3937 | +/ |
|---|
| | 3938 | /+ref SysTime+/ void roll(string units)(long years, AllowDayOverflow allowOverflow = AllowDayOverflow.yes) nothrow |
|---|
| | 3939 | if(units == "years") |
|---|
| | 3940 | { |
|---|
| | 3941 | add!"years"(years, allowOverflow); |
|---|
| | 3942 | } |
|---|
| | 3943 | |
|---|
| | 3944 | unittest |
|---|
| | 3945 | { |
|---|
| | 3946 | version(testStdDateTime) |
|---|
| | 3947 | { |
|---|
| | 3948 | auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 3949 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 3950 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 3951 | static assert(__traits(compiles, st.roll!"years"(4))); |
|---|
| | 3952 | static assert(!__traits(compiles, cst.roll!"years"(4))); |
|---|
| | 3953 | //static assert(!__traits(compiles, ist.roll!"years"(4))); |
|---|
| | 3954 | } |
|---|
| | 3955 | } |
|---|
| | 3956 | |
|---|
| | 3957 | |
|---|
| | 3958 | /++ |
|---|
| | 3959 | Adds the given number of months to this SysTime. A negative number will |
|---|
| | 3960 | subtract. |
|---|
| | 3961 | |
|---|
| | 3962 | The difference between rolling and adding is that rolling does not affect |
|---|
| | 3963 | larger units. So, if you roll the SysTime 12 months, you get the exact |
|---|
| | 3964 | same SysTime. However, the days can still be affected due to the differing |
|---|
| | 3965 | number of days in each month. |
|---|
| | 3966 | |
|---|
| | 3967 | Params: |
|---|
| | 3968 | months = The number of months to add to this SysTime. |
|---|
| | 3969 | allowOverflow = Whether the days should be allowed to overflow, |
|---|
| | 3970 | causing the month to increment. |
|---|
| | 3971 | |
|---|
| | 3972 | Examples: |
|---|
| | 3973 | -------------------- |
|---|
| | 3974 | auto st1 = SysTime(DateTime(2010, 1, 1, 12, 33, 33)); |
|---|
| | 3975 | st1.roll!"months"(1); |
|---|
| | 3976 | assert(st1 == SysTime(DateTime(2010, 2, 1, 12, 33, 33))); |
|---|
| | 3977 | |
|---|
| | 3978 | auto st2 = SysTime(DateTime(2010, 1, 1, 12, 33, 33)); |
|---|
| | 3979 | st2.roll!"months"(-1); |
|---|
| | 3980 | assert(st2 == SysTime(DateTime(2010, 12, 1, 12, 33, 33))); |
|---|
| | 3981 | |
|---|
| | 3982 | auto st3 = SysTime(DateTime(1999, 1, 29, 12, 33, 33)); |
|---|
| | 3983 | st3.roll!"months"(1); |
|---|
| | 3984 | assert(st3 == SysTime(DateTime(1999, 3, 1, 12, 33, 33))); |
|---|
| | 3985 | |
|---|
| | 3986 | auto st4 = SysTime(DateTime(1999, 1, 29, 12, 33, 33)); |
|---|
| | 3987 | st4.roll!"months"(1, AllowDayOverflow.no); |
|---|
| | 3988 | assert(st4 == SysTime(DateTime(1999, 2, 28, 12, 33, 33))); |
|---|
| | 3989 | -------------------- |
|---|
| | 3990 | +/ |
|---|
| | 3991 | /+ref SysTime+/ void roll(string units)(long months, AllowDayOverflow allowOverflow = AllowDayOverflow.yes) nothrow |
|---|
| | 3992 | if(units == "months") |
|---|
| | 3993 | { |
|---|
| | 3994 | auto hnsecs = adjTime; |
|---|
| | 3995 | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| | 3996 | |
|---|
| | 3997 | if(hnsecs < 0) |
|---|
| | 3998 | { |
|---|
| | 3999 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 4000 | --days; |
|---|
| | 4001 | } |
|---|
| | 4002 | |
|---|
| | 4003 | auto date = Date(cast(int)days); |
|---|
| | 4004 | date.roll!"months"(months, allowOverflow); |
|---|
| | 4005 | days = date.dayOfGregorianCal - 1; |
|---|
| | 4006 | |
|---|
| | 4007 | if(days < 0) |
|---|
| | 4008 | { |
|---|
| | 4009 | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| | 4010 | ++days; |
|---|
| | 4011 | } |
|---|
| | 4012 | |
|---|
| | 4013 | immutable newDaysHNSecs = convert!("days", "hnsecs")(days); |
|---|
| | 4014 | |
|---|
| | 4015 | adjTime = newDaysHNSecs + hnsecs; |
|---|
| | 4016 | } |
|---|
| | 4017 | |
|---|
| | 4018 | //Test roll!"months"() with AllowDayOverlow.yes |
|---|
| | 4019 | unittest |
|---|
| | 4020 | { |
|---|
| | 4021 | version(testStdDateTime) |
|---|
| | 4022 | { |
|---|
| | 4023 | //Test A.D. |
|---|
| | 4024 | { |
|---|
| | 4025 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 4026 | sysTime.roll!"months"(3); |
|---|
| | 4027 | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6))); |
|---|
| | 4028 | sysTime.roll!"months"(-4); |
|---|
| | 4029 | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| | 4030 | } |
|---|
| | 4031 | |
|---|
| | 4032 | { |
|---|
| | 4033 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 4034 | sysTime.roll!"months"(6); |
|---|
| | 4035 | assertPred!"=="(sysTime, SysTime(Date(1999, 1, 6))); |
|---|
| | 4036 | sysTime.roll!"months"(-6); |
|---|
| | 4037 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6))); |
|---|
| | 4038 | } |
|---|
| | 4039 | |
|---|
| | 4040 | { |
|---|
| | 4041 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 4042 | sysTime.roll!"months"(27); |
|---|
| | 4043 | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6))); |
|---|
| | 4044 | sysTime.roll!"months"(-28); |
|---|
| | 4045 | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| | 4046 | } |
|---|
| | 4047 | |
|---|
| | 4048 | { |
|---|
| | 4049 | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| | 4050 | sysTime.roll!"months"(1); |
|---|
| | 4051 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 1))); |
|---|
| | 4052 | } |
|---|
| | 4053 | |
|---|
| | 4054 | { |
|---|
| | 4055 | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| | 4056 | sysTime.roll!"months"(-1); |
|---|
| | 4057 | assertPred!"=="(sysTime, SysTime(Date(1999, 5, 1))); |
|---|
| | 4058 | } |
|---|
| | 4059 | |
|---|
| | 4060 | { |
|---|
| | 4061 | auto sysTime = SysTime(Date(1999, 2, 28)); |
|---|
| | 4062 | sysTime.roll!"months"(12); |
|---|
| | 4063 | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28))); |
|---|
| | 4064 | } |
|---|
| | 4065 | |
|---|
| | 4066 | { |
|---|
| | 4067 | auto sysTime = SysTime(Date(2000, 2, 29)); |
|---|
| | 4068 | sysTime.roll!"months"(12); |
|---|
| | 4069 | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 29))); |
|---|
| | 4070 | } |
|---|
| | 4071 | |
|---|
| | 4072 | { |
|---|
| | 4073 | auto sysTime = SysTime(Date(1999, 7, 31)); |
|---|
| | 4074 | sysTime.roll!"months"(1); |
|---|
| | 4075 | assertPred!"=="(sysTime, SysTime(Date(1999, 8, 31))); |
|---|
| | 4076 | sysTime.roll!"months"(1); |
|---|
| | 4077 | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 1))); |
|---|
| | 4078 | } |
|---|
| | 4079 | |
|---|
| | 4080 | { |
|---|
| | 4081 | auto sysTime = SysTime(Date(1998, 8, 31)); |
|---|
| | 4082 | sysTime.roll!"months"(13); |
|---|
| | 4083 | assertPred!"=="(sysTime, SysTime(Date(1998, 10, 1))); |
|---|
| | 4084 | sysTime.roll!"months"(-13); |
|---|
| | 4085 | assertPred!"=="(sysTime, SysTime(Date(1998, 9, 1))); |
|---|
| | 4086 | } |
|---|
| | 4087 | |
|---|
| | 4088 | { |
|---|
| | 4089 | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| | 4090 | sysTime.roll!"months"(13); |
|---|
| | 4091 | assertPred!"=="(sysTime, SysTime(Date(1997, 1, 31))); |
|---|
| | 4092 | sysTime.roll!"months"(-13); |
|---|
| | 4093 | assertPred!"=="(sysTime, SysTime(Date(1997, 12, 31))); |
|---|
| | 4094 | } |
|---|
| | 4095 | |
|---|
| | 4096 | { |
|---|
| | 4097 | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| | 4098 | sysTime.roll!"months"(14); |
|---|
| | 4099 | assertPred!"=="(sysTime, SysTime(Date(1997, 3, 3))); |
|---|
| | 4100 | sysTime.roll!"months"(-14); |
|---|
| | 4101 | assertPred!"=="(sysTime, SysTime(Date(1997, 1, 3))); |
|---|
| | 4102 | } |
|---|
| | 4103 | |
|---|
| | 4104 | { |
|---|
| | 4105 | auto sysTime = SysTime(Date(1998, 12, 31)); |
|---|
| | 4106 | sysTime.roll!"months"(14); |
|---|
| | 4107 | assertPred!"=="(sysTime, SysTime(Date(1998, 3, 3))); |
|---|
| | 4108 | sysTime.roll!"months"(-14); |
|---|
| | 4109 | assertPred!"=="(sysTime, SysTime(Date(1998, 1, 3))); |
|---|
| | 4110 | } |
|---|
| | 4111 | |
|---|
| | 4112 | { |
|---|
| | 4113 | auto sysTime = SysTime(Date(1999, 12, 31)); |
|---|
| | 4114 | sysTime.roll!"months"(14); |
|---|
| | 4115 | assertPred!"=="(sysTime, SysTime(Date(1999, 3, 3))); |
|---|
| | 4116 | sysTime.roll!"months"(-14); |
|---|
| | 4117 | assertPred!"=="(sysTime, SysTime(Date(1999, 1, 3))); |
|---|
| | 4118 | } |
|---|
| | 4119 | |
|---|
| | 4120 | { |
|---|
| | 4121 | auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007)); |
|---|
| | 4122 | sysTime.roll!"months"(3); |
|---|
| | 4123 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| | 4124 | sysTime.roll!"months"(-4); |
|---|
| | 4125 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| | 4126 | } |
|---|
| | 4127 | |
|---|
| | 4128 | { |
|---|
| | 4129 | auto sysTime = SysTime(DateTime(1998, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 4130 | sysTime.roll!"months"(14); |
|---|
| | 4131 | assertPred!"=="(sysTime, SysTime(DateTime(1998, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4132 | sysTime.roll!"months"(-14); |
|---|
| | 4133 | assertPred!"=="(sysTime, SysTime(DateTime(1998, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4134 | } |
|---|
| | 4135 | |
|---|
| | 4136 | { |
|---|
| | 4137 | auto sysTime = SysTime(DateTime(1999, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 4138 | sysTime.roll!"months"(14); |
|---|
| | 4139 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4140 | sysTime.roll!"months"(-14); |
|---|
| | 4141 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4142 | } |
|---|
| | 4143 | |
|---|
| | 4144 | //Test B.C. |
|---|
| | 4145 | { |
|---|
| | 4146 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 4147 | sysTime.roll!"months"(3); |
|---|
| | 4148 | assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 6))); |
|---|
| | 4149 | sysTime.roll!"months"(-4); |
|---|
| | 4150 | assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 6))); |
|---|
| | 4151 | } |
|---|
| | 4152 | |
|---|
| | 4153 | { |
|---|
| | 4154 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 4155 | sysTime.roll!"months"(6); |
|---|
| | 4156 | assertPred!"=="(sysTime, SysTime(Date(-1999, 1, 6))); |
|---|
| | 4157 | sysTime.roll!"months"(-6); |
|---|
| | 4158 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6))); |
|---|
| | 4159 | } |
|---|
| | 4160 | |
|---|
| | 4161 | { |
|---|
| | 4162 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 4163 | sysTime.roll!"months"(-27); |
|---|
| | 4164 | assertPred!"=="(sysTime, SysTime(Date(-1999, 4, 6))); |
|---|
| | 4165 | sysTime.roll!"months"(28); |
|---|
| | 4166 | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 6))); |
|---|
| | 4167 | } |
|---|
| | 4168 | |
|---|
| | 4169 | { |
|---|
| | 4170 | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| | 4171 | sysTime.roll!"months"(1); |
|---|
| | 4172 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 1))); |
|---|
| | 4173 | } |
|---|
| | 4174 | |
|---|
| | 4175 | { |
|---|
| | 4176 | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| | 4177 | sysTime.roll!"months"(-1); |
|---|
| | 4178 | assertPred!"=="(sysTime, SysTime(Date(-1999, 5, 1))); |
|---|
| | 4179 | } |
|---|
| | 4180 | |
|---|
| | 4181 | { |
|---|
| | 4182 | auto sysTime = SysTime(Date(-1999, 2, 28)); |
|---|
| | 4183 | sysTime.roll!"months"(-12); |
|---|
| | 4184 | assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 28))); |
|---|
| | 4185 | } |
|---|
| | 4186 | |
|---|
| | 4187 | { |
|---|
| | 4188 | auto sysTime = SysTime(Date(-2000, 2, 29)); |
|---|
| | 4189 | sysTime.roll!"months"(-12); |
|---|
| | 4190 | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 29))); |
|---|
| | 4191 | } |
|---|
| | 4192 | |
|---|
| | 4193 | { |
|---|
| | 4194 | auto sysTime = SysTime(Date(-1999, 7, 31)); |
|---|
| | 4195 | sysTime.roll!"months"(1); |
|---|
| | 4196 | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 31))); |
|---|
| | 4197 | sysTime.roll!"months"(1); |
|---|
| | 4198 | assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 1))); |
|---|
| | 4199 | } |
|---|
| | 4200 | |
|---|
| | 4201 | { |
|---|
| | 4202 | auto sysTime = SysTime(Date(-1998, 8, 31)); |
|---|
| | 4203 | sysTime.roll!"months"(13); |
|---|
| | 4204 | assertPred!"=="(sysTime, SysTime(Date(-1998, 10, 1))); |
|---|
| | 4205 | sysTime.roll!"months"(-13); |
|---|
| | 4206 | assertPred!"=="(sysTime, SysTime(Date(-1998, 9, 1))); |
|---|
| | 4207 | } |
|---|
| | 4208 | |
|---|
| | 4209 | { |
|---|
| | 4210 | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| | 4211 | sysTime.roll!"months"(13); |
|---|
| | 4212 | assertPred!"=="(sysTime, SysTime(Date(-1997, 1, 31))); |
|---|
| | 4213 | sysTime.roll!"months"(-13); |
|---|
| | 4214 | assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 31))); |
|---|
| | 4215 | } |
|---|
| | 4216 | |
|---|
| | 4217 | { |
|---|
| | 4218 | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| | 4219 | sysTime.roll!"months"(14); |
|---|
| | 4220 | assertPred!"=="(sysTime, SysTime(Date(-1997, 3, 3))); |
|---|
| | 4221 | sysTime.roll!"months"(-14); |
|---|
| | 4222 | assertPred!"=="(sysTime, SysTime(Date(-1997, 1, 3))); |
|---|
| | 4223 | } |
|---|
| | 4224 | |
|---|
| | 4225 | { |
|---|
| | 4226 | auto sysTime = SysTime(Date(-2002, 12, 31)); |
|---|
| | 4227 | sysTime.roll!"months"(14); |
|---|
| | 4228 | assertPred!"=="(sysTime, SysTime(Date(-2002, 3, 3))); |
|---|
| | 4229 | sysTime.roll!"months"(-14); |
|---|
| | 4230 | assertPred!"=="(sysTime, SysTime(Date(-2002, 1, 3))); |
|---|
| | 4231 | } |
|---|
| | 4232 | |
|---|
| | 4233 | { |
|---|
| | 4234 | auto sysTime = SysTime(Date(-2001, 12, 31)); |
|---|
| | 4235 | sysTime.roll!"months"(14); |
|---|
| | 4236 | assertPred!"=="(sysTime, SysTime(Date(-2001, 3, 3))); |
|---|
| | 4237 | sysTime.roll!"months"(-14); |
|---|
| | 4238 | assertPred!"=="(sysTime, SysTime(Date(-2001, 1, 3))); |
|---|
| | 4239 | } |
|---|
| | 4240 | |
|---|
| | 4241 | { |
|---|
| | 4242 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 4243 | sysTime.roll!"months"(-1); |
|---|
| | 4244 | assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 4245 | sysTime.roll!"months"(1); |
|---|
| | 4246 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 4247 | } |
|---|
| | 4248 | |
|---|
| | 4249 | { |
|---|
| | 4250 | auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 4251 | sysTime.roll!"months"(-1); |
|---|
| | 4252 | assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 4253 | sysTime.roll!"months"(1); |
|---|
| | 4254 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 4255 | } |
|---|
| | 4256 | |
|---|
| | 4257 | { |
|---|
| | 4258 | auto sysTime = SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 4259 | sysTime.roll!"months"(1); |
|---|
| | 4260 | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 4261 | sysTime.roll!"months"(-1); |
|---|
| | 4262 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 4263 | } |
|---|
| | 4264 | |
|---|
| | 4265 | { |
|---|
| | 4266 | auto sysTime = SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 4267 | sysTime.roll!"months"(1); |
|---|
| | 4268 | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 4269 | sysTime.roll!"months"(-1); |
|---|
| | 4270 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 4271 | } |
|---|
| | 4272 | |
|---|
| | 4273 | { |
|---|
| | 4274 | auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 2, 7), FracSec.from!"hnsecs"(5007)); |
|---|
| | 4275 | sysTime.roll!"months"(3); |
|---|
| | 4276 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 10, 6, 12, 2, 7), FracSec.from!"hnsecs"(5007))); |
|---|
| | 4277 | sysTime.roll!"months"(-4); |
|---|
| | 4278 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 6, 6, 12, 2, 7), FracSec.from!"hnsecs"(5007))); |
|---|
| | 4279 | } |
|---|
| | 4280 | |
|---|
| | 4281 | { |
|---|
| | 4282 | auto sysTime = SysTime(DateTime(-2002, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 4283 | sysTime.roll!"months"(14); |
|---|
| | 4284 | assertPred!"=="(sysTime, SysTime(DateTime(-2002, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4285 | sysTime.roll!"months"(-14); |
|---|
| | 4286 | assertPred!"=="(sysTime, SysTime(DateTime(-2002, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4287 | } |
|---|
| | 4288 | |
|---|
| | 4289 | { |
|---|
| | 4290 | auto sysTime = SysTime(DateTime(-2001, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 4291 | sysTime.roll!"months"(14); |
|---|
| | 4292 | assertPred!"=="(sysTime, SysTime(DateTime(-2001, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4293 | sysTime.roll!"months"(-14); |
|---|
| | 4294 | assertPred!"=="(sysTime, SysTime(DateTime(-2001, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4295 | } |
|---|
| | 4296 | |
|---|
| | 4297 | //Test Both |
|---|
| | 4298 | { |
|---|
| | 4299 | auto sysTime = SysTime(Date(1, 1, 1)); |
|---|
| | 4300 | sysTime.roll!"months"(-1); |
|---|
| | 4301 | assertPred!"=="(sysTime, SysTime(Date(1, 12, 1))); |
|---|
| | 4302 | sysTime.roll!"months"(1); |
|---|
| | 4303 | assertPred!"=="(sysTime, SysTime(Date(1, 1, 1))); |
|---|
| | 4304 | } |
|---|
| | 4305 | |
|---|
| | 4306 | { |
|---|
| | 4307 | auto sysTime = SysTime(Date(4, 1, 1)); |
|---|
| | 4308 | sysTime.roll!"months"(-48); |
|---|
| | 4309 | assertPred!"=="(sysTime, SysTime(Date(4, 1, 1))); |
|---|
| | 4310 | sysTime.roll!"months"(48); |
|---|
| | 4311 | assertPred!"=="(sysTime, SysTime(Date(4, 1, 1))); |
|---|
| | 4312 | } |
|---|
| | 4313 | |
|---|
| | 4314 | { |
|---|
| | 4315 | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| | 4316 | sysTime.roll!"months"(-49); |
|---|
| | 4317 | assertPred!"=="(sysTime, SysTime(Date(4, 3, 2))); |
|---|
| | 4318 | sysTime.roll!"months"(49); |
|---|
| | 4319 | assertPred!"=="(sysTime, SysTime(Date(4, 4, 2))); |
|---|
| | 4320 | } |
|---|
| | 4321 | |
|---|
| | 4322 | { |
|---|
| | 4323 | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| | 4324 | sysTime.roll!"months"(-85); |
|---|
| | 4325 | assertPred!"=="(sysTime, SysTime(Date(4, 3, 2))); |
|---|
| | 4326 | sysTime.roll!"months"(85); |
|---|
| | 4327 | assertPred!"=="(sysTime, SysTime(Date(4, 4, 2))); |
|---|
| | 4328 | } |
|---|
| | 4329 | |
|---|
| | 4330 | { |
|---|
| | 4331 | auto sysTime = SysTime(Date(-1, 1, 1)); |
|---|
| | 4332 | sysTime.roll!"months"(-1); |
|---|
| | 4333 | assertPred!"=="(sysTime, SysTime(Date(-1, 12, 1))); |
|---|
| | 4334 | sysTime.roll!"months"(1); |
|---|
| | 4335 | assertPred!"=="(sysTime, SysTime(Date(-1, 1, 1))); |
|---|
| | 4336 | } |
|---|
| | 4337 | |
|---|
| | 4338 | { |
|---|
| | 4339 | auto sysTime = SysTime(Date(-4, 1, 1)); |
|---|
| | 4340 | sysTime.roll!"months"(-48); |
|---|
| | 4341 | assertPred!"=="(sysTime, SysTime(Date(-4, 1, 1))); |
|---|
| | 4342 | sysTime.roll!"months"(48); |
|---|
| | 4343 | assertPred!"=="(sysTime, SysTime(Date(-4, 1, 1))); |
|---|
| | 4344 | } |
|---|
| | 4345 | |
|---|
| | 4346 | { |
|---|
| | 4347 | auto sysTime = SysTime(Date(-4, 3, 31)); |
|---|
| | 4348 | sysTime.roll!"months"(-49); |
|---|
| | 4349 | assertPred!"=="(sysTime, SysTime(Date(-4, 3, 2))); |
|---|
| | 4350 | sysTime.roll!"months"(49); |
|---|
| | 4351 | assertPred!"=="(sysTime, SysTime(Date(-4, 4, 2))); |
|---|
| | 4352 | } |
|---|
| | 4353 | |
|---|
| | 4354 | { |
|---|
| | 4355 | auto sysTime = SysTime(Date(-4, 3, 31)); |
|---|
| | 4356 | sysTime.roll!"months"(-85); |
|---|
| | 4357 | assertPred!"=="(sysTime, SysTime(Date(-4, 3, 2))); |
|---|
| | 4358 | sysTime.roll!"months"(85); |
|---|
| | 4359 | assertPred!"=="(sysTime, SysTime(Date(-4, 4, 2))); |
|---|
| | 4360 | } |
|---|
| | 4361 | |
|---|
| | 4362 | { |
|---|
| | 4363 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)); |
|---|
| | 4364 | sysTime.roll!"months"(-1); |
|---|
| | 4365 | assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| | 4366 | sysTime.roll!"months"(1); |
|---|
| | 4367 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| | 4368 | } |
|---|
| | 4369 | |
|---|
| | 4370 | { |
|---|
| | 4371 | auto sysTime = SysTime(DateTime(4, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| | 4372 | sysTime.roll!"months"(-85); |
|---|
| | 4373 | assertPred!"=="(sysTime, SysTime(DateTime(4, 3, 2, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 4374 | sysTime.roll!"months"(85); |
|---|
| | 4375 | assertPred!"=="(sysTime, SysTime(DateTime(4, 4, 2, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 4376 | } |
|---|
| | 4377 | |
|---|
| | 4378 | { |
|---|
| | 4379 | auto sysTime = SysTime(DateTime(-3, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| | 4380 | sysTime.roll!"months"(85); |
|---|
| | 4381 | assertPred!"=="(sysTime, SysTime(DateTime(-3, 5, 1, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 4382 | sysTime.roll!"months"(-85); |
|---|
| | 4383 | assertPred!"=="(sysTime, SysTime(DateTime(-3, 4, 1, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 4384 | } |
|---|
| | 4385 | |
|---|
| | 4386 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 4387 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 4388 | static assert(!__traits(compiles, cst.roll!"months"(4))); |
|---|
| | 4389 | //static assert(!__traits(compiles, ist.roll!"months"(4))); |
|---|
| | 4390 | |
|---|
| | 4391 | //Verify Examples. |
|---|
| | 4392 | auto st1 = SysTime(DateTime(2010, 1, 1, 12, 33, 33)); |
|---|
| | 4393 | st1.roll!"months"(1); |
|---|
| | 4394 | assert(st1 == SysTime(DateTime(2010, 2, 1, 12, 33, 33))); |
|---|
| | 4395 | |
|---|
| | 4396 | auto st2 = SysTime(DateTime(2010, 1, 1, 12, 33, 33)); |
|---|
| | 4397 | st2.roll!"months"(-1); |
|---|
| | 4398 | assert(st2 == SysTime(DateTime(2010, 12, 1, 12, 33, 33))); |
|---|
| | 4399 | |
|---|
| | 4400 | auto st3 = SysTime(DateTime(1999, 1, 29, 12, 33, 33)); |
|---|
| | 4401 | st3.roll!"months"(1); |
|---|
| | 4402 | assert(st3 == SysTime(DateTime(1999, 3, 1, 12, 33, 33))); |
|---|
| | 4403 | |
|---|
| | 4404 | auto st4 = SysTime(DateTime(1999, 1, 29, 12, 33, 33)); |
|---|
| | 4405 | st4.roll!"months"(1, AllowDayOverflow.no); |
|---|
| | 4406 | assert(st4 == SysTime(DateTime(1999, 2, 28, 12, 33, 33))); |
|---|
| | 4407 | } |
|---|
| | 4408 | } |
|---|
| | 4409 | |
|---|
| | 4410 | //Test roll!"months"() with AllowDayOverlow.no |
|---|
| | 4411 | unittest |
|---|
| | 4412 | { |
|---|
| | 4413 | version(testStdDateTime) |
|---|
| | 4414 | { |
|---|
| | 4415 | //Test A.D. |
|---|
| | 4416 | { |
|---|
| | 4417 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 4418 | sysTime.roll!"months"(3, AllowDayOverflow.no); |
|---|
| | 4419 | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6))); |
|---|
| | 4420 | sysTime.roll!"months"(-4, AllowDayOverflow.no); |
|---|
| | 4421 | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| | 4422 | } |
|---|
| | 4423 | |
|---|
| | 4424 | { |
|---|
| | 4425 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 4426 | sysTime.roll!"months"(6, AllowDayOverflow.no); |
|---|
| | 4427 | assertPred!"=="(sysTime, SysTime(Date(1999, 1, 6))); |
|---|
| | 4428 | sysTime.roll!"months"(-6, AllowDayOverflow.no); |
|---|
| | 4429 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6))); |
|---|
| | 4430 | } |
|---|
| | 4431 | |
|---|
| | 4432 | { |
|---|
| | 4433 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 4434 | sysTime.roll!"months"(27, AllowDayOverflow.no); |
|---|
| | 4435 | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6))); |
|---|
| | 4436 | sysTime.roll!"months"(-28, AllowDayOverflow.no); |
|---|
| | 4437 | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| | 4438 | } |
|---|
| | 4439 | |
|---|
| | 4440 | { |
|---|
| | 4441 | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| | 4442 | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| | 4443 | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 30))); |
|---|
| | 4444 | } |
|---|
| | 4445 | |
|---|
| | 4446 | { |
|---|
| | 4447 | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| | 4448 | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| | 4449 | assertPred!"=="(sysTime, SysTime(Date(1999, 4, 30))); |
|---|
| | 4450 | } |
|---|
| | 4451 | |
|---|
| | 4452 | { |
|---|
| | 4453 | auto sysTime = SysTime(Date(1999, 2, 28)); |
|---|
| | 4454 | sysTime.roll!"months"(12, AllowDayOverflow.no); |
|---|
| | 4455 | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28))); |
|---|
| | 4456 | } |
|---|
| | 4457 | |
|---|
| | 4458 | { |
|---|
| | 4459 | auto sysTime = SysTime(Date(2000, 2, 29)); |
|---|
| | 4460 | sysTime.roll!"months"(12, AllowDayOverflow.no); |
|---|
| | 4461 | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 29))); |
|---|
| | 4462 | } |
|---|
| | 4463 | |
|---|
| | 4464 | { |
|---|
| | 4465 | auto sysTime = SysTime(Date(1999, 7, 31)); |
|---|
| | 4466 | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| | 4467 | assertPred!"=="(sysTime, SysTime(Date(1999, 8, 31))); |
|---|
| | 4468 | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| | 4469 | assertPred!"=="(sysTime, SysTime(Date(1999, 9, 30))); |
|---|
| | 4470 | } |
|---|
| | 4471 | |
|---|
| | 4472 | { |
|---|
| | 4473 | auto sysTime = SysTime(Date(1998, 8, 31)); |
|---|
| | 4474 | sysTime.roll!"months"(13, AllowDayOverflow.no); |
|---|
| | 4475 | assertPred!"=="(sysTime, SysTime(Date(1998, 9, 30))); |
|---|
| | 4476 | sysTime.roll!"months"(-13, AllowDayOverflow.no); |
|---|
| | 4477 | assertPred!"=="(sysTime, SysTime(Date(1998, 8, 30))); |
|---|
| | 4478 | } |
|---|
| | 4479 | |
|---|
| | 4480 | { |
|---|
| | 4481 | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| | 4482 | sysTime.roll!"months"(13, AllowDayOverflow.no); |
|---|
| | 4483 | assertPred!"=="(sysTime, SysTime(Date(1997, 1, 31))); |
|---|
| | 4484 | sysTime.roll!"months"(-13, AllowDayOverflow.no); |
|---|
| | 4485 | assertPred!"=="(sysTime, SysTime(Date(1997, 12, 31))); |
|---|
| | 4486 | } |
|---|
| | 4487 | |
|---|
| | 4488 | { |
|---|
| | 4489 | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| | 4490 | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| | 4491 | assertPred!"=="(sysTime, SysTime(Date(1997, 2, 28))); |
|---|
| | 4492 | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| | 4493 | assertPred!"=="(sysTime, SysTime(Date(1997, 12, 28))); |
|---|
| | 4494 | } |
|---|
| | 4495 | |
|---|
| | 4496 | { |
|---|
| | 4497 | auto sysTime = SysTime(Date(1998, 12, 31)); |
|---|
| | 4498 | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| | 4499 | assertPred!"=="(sysTime, SysTime(Date(1998, 2, 28))); |
|---|
| | 4500 | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| | 4501 | assertPred!"=="(sysTime, SysTime(Date(1998, 12, 28))); |
|---|
| | 4502 | } |
|---|
| | 4503 | |
|---|
| | 4504 | { |
|---|
| | 4505 | auto sysTime = SysTime(Date(1999, 12, 31)); |
|---|
| | 4506 | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| | 4507 | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28))); |
|---|
| | 4508 | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| | 4509 | assertPred!"=="(sysTime, SysTime(Date(1999, 12, 28))); |
|---|
| | 4510 | } |
|---|
| | 4511 | |
|---|
| | 4512 | { |
|---|
| | 4513 | auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007)); |
|---|
| | 4514 | sysTime.roll!"months"(3, AllowDayOverflow.no); |
|---|
| | 4515 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| | 4516 | sysTime.roll!"months"(-4, AllowDayOverflow.no); |
|---|
| | 4517 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| | 4518 | } |
|---|
| | 4519 | |
|---|
| | 4520 | { |
|---|
| | 4521 | auto sysTime = SysTime(DateTime(1998, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 4522 | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| | 4523 | assertPred!"=="(sysTime, SysTime(DateTime(1998, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4524 | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| | 4525 | assertPred!"=="(sysTime, SysTime(DateTime(1998, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4526 | } |
|---|
| | 4527 | |
|---|
| | 4528 | { |
|---|
| | 4529 | auto sysTime = SysTime(DateTime(1999, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 4530 | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| | 4531 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4532 | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| | 4533 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4534 | } |
|---|
| | 4535 | |
|---|
| | 4536 | //Test B.C. |
|---|
| | 4537 | { |
|---|
| | 4538 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 4539 | sysTime.roll!"months"(3, AllowDayOverflow.no); |
|---|
| | 4540 | assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 6))); |
|---|
| | 4541 | sysTime.roll!"months"(-4, AllowDayOverflow.no); |
|---|
| | 4542 | assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 6))); |
|---|
| | 4543 | } |
|---|
| | 4544 | |
|---|
| | 4545 | { |
|---|
| | 4546 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 4547 | sysTime.roll!"months"(6, AllowDayOverflow.no); |
|---|
| | 4548 | assertPred!"=="(sysTime, SysTime(Date(-1999, 1, 6))); |
|---|
| | 4549 | sysTime.roll!"months"(-6, AllowDayOverflow.no); |
|---|
| | 4550 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6))); |
|---|
| | 4551 | } |
|---|
| | 4552 | |
|---|
| | 4553 | { |
|---|
| | 4554 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 4555 | sysTime.roll!"months"(-27, AllowDayOverflow.no); |
|---|
| | 4556 | assertPred!"=="(sysTime, SysTime(Date(-1999, 4, 6))); |
|---|
| | 4557 | sysTime.roll!"months"(28, AllowDayOverflow.no); |
|---|
| | 4558 | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 6))); |
|---|
| | 4559 | } |
|---|
| | 4560 | |
|---|
| | 4561 | { |
|---|
| | 4562 | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| | 4563 | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| | 4564 | assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 30))); |
|---|
| | 4565 | } |
|---|
| | 4566 | |
|---|
| | 4567 | { |
|---|
| | 4568 | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| | 4569 | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| | 4570 | assertPred!"=="(sysTime, SysTime(Date(-1999, 4, 30))); |
|---|
| | 4571 | } |
|---|
| | 4572 | |
|---|
| | 4573 | { |
|---|
| | 4574 | auto sysTime = SysTime(Date(-1999, 2, 28)); |
|---|
| | 4575 | sysTime.roll!"months"(-12, AllowDayOverflow.no); |
|---|
| | 4576 | assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 28))); |
|---|
| | 4577 | } |
|---|
| | 4578 | |
|---|
| | 4579 | { |
|---|
| | 4580 | auto sysTime = SysTime(Date(-2000, 2, 29)); |
|---|
| | 4581 | sysTime.roll!"months"(-12, AllowDayOverflow.no); |
|---|
| | 4582 | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 29))); |
|---|
| | 4583 | } |
|---|
| | 4584 | |
|---|
| | 4585 | { |
|---|
| | 4586 | auto sysTime = SysTime(Date(-1999, 7, 31)); |
|---|
| | 4587 | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| | 4588 | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 31))); |
|---|
| | 4589 | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| | 4590 | assertPred!"=="(sysTime, SysTime(Date(-1999, 9, 30))); |
|---|
| | 4591 | } |
|---|
| | 4592 | |
|---|
| | 4593 | { |
|---|
| | 4594 | auto sysTime = SysTime(Date(-1998, 8, 31)); |
|---|
| | 4595 | sysTime.roll!"months"(13, AllowDayOverflow.no); |
|---|
| | 4596 | assertPred!"=="(sysTime, SysTime(Date(-1998, 9, 30))); |
|---|
| | 4597 | sysTime.roll!"months"(-13, AllowDayOverflow.no); |
|---|
| | 4598 | assertPred!"=="(sysTime, SysTime(Date(-1998, 8, 30))); |
|---|
| | 4599 | } |
|---|
| | 4600 | |
|---|
| | 4601 | { |
|---|
| | 4602 | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| | 4603 | sysTime.roll!"months"(13, AllowDayOverflow.no); |
|---|
| | 4604 | assertPred!"=="(sysTime, SysTime(Date(-1997, 1, 31))); |
|---|
| | 4605 | sysTime.roll!"months"(-13, AllowDayOverflow.no); |
|---|
| | 4606 | assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 31))); |
|---|
| | 4607 | } |
|---|
| | 4608 | |
|---|
| | 4609 | { |
|---|
| | 4610 | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| | 4611 | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| | 4612 | assertPred!"=="(sysTime, SysTime(Date(-1997, 2, 28))); |
|---|
| | 4613 | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| | 4614 | assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 28))); |
|---|
| | 4615 | } |
|---|
| | 4616 | |
|---|
| | 4617 | { |
|---|
| | 4618 | auto sysTime = SysTime(Date(-2002, 12, 31)); |
|---|
| | 4619 | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| | 4620 | assertPred!"=="(sysTime, SysTime(Date(-2002, 2, 28))); |
|---|
| | 4621 | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| | 4622 | assertPred!"=="(sysTime, SysTime(Date(-2002, 12, 28))); |
|---|
| | 4623 | } |
|---|
| | 4624 | |
|---|
| | 4625 | { |
|---|
| | 4626 | auto sysTime = SysTime(Date(-2001, 12, 31)); |
|---|
| | 4627 | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| | 4628 | assertPred!"=="(sysTime, SysTime(Date(-2001, 2, 28))); |
|---|
| | 4629 | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| | 4630 | assertPred!"=="(sysTime, SysTime(Date(-2001, 12, 28))); |
|---|
| | 4631 | } |
|---|
| | 4632 | |
|---|
| | 4633 | { |
|---|
| | 4634 | auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007)); |
|---|
| | 4635 | sysTime.roll!"months"(3, AllowDayOverflow.no); |
|---|
| | 4636 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| | 4637 | sysTime.roll!"months"(-4, AllowDayOverflow.no); |
|---|
| | 4638 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| | 4639 | } |
|---|
| | 4640 | |
|---|
| | 4641 | { |
|---|
| | 4642 | auto sysTime = SysTime(DateTime(-2002, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 4643 | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| | 4644 | assertPred!"=="(sysTime, SysTime(DateTime(-2002, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4645 | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| | 4646 | assertPred!"=="(sysTime, SysTime(DateTime(-2002, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4647 | } |
|---|
| | 4648 | |
|---|
| | 4649 | { |
|---|
| | 4650 | auto sysTime = SysTime(DateTime(-2001, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| | 4651 | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| | 4652 | assertPred!"=="(sysTime, SysTime(DateTime(-2001, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4653 | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| | 4654 | assertPred!"=="(sysTime, SysTime(DateTime(-2001, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| | 4655 | } |
|---|
| | 4656 | |
|---|
| | 4657 | //Test Both |
|---|
| | 4658 | { |
|---|
| | 4659 | auto sysTime = SysTime(Date(1, 1, 1)); |
|---|
| | 4660 | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| | 4661 | assertPred!"=="(sysTime, SysTime(Date(1, 12, 1))); |
|---|
| | 4662 | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| | 4663 | assertPred!"=="(sysTime, SysTime(Date(1, 1, 1))); |
|---|
| | 4664 | } |
|---|
| | 4665 | |
|---|
| | 4666 | { |
|---|
| | 4667 | auto sysTime = SysTime(Date(4, 1, 1)); |
|---|
| | 4668 | sysTime.roll!"months"(-48, AllowDayOverflow.no); |
|---|
| | 4669 | assertPred!"=="(sysTime, SysTime(Date(4, 1, 1))); |
|---|
| | 4670 | sysTime.roll!"months"(48, AllowDayOverflow.no); |
|---|
| | 4671 | assertPred!"=="(sysTime, SysTime(Date(4, 1, 1))); |
|---|
| | 4672 | } |
|---|
| | 4673 | |
|---|
| | 4674 | { |
|---|
| | 4675 | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| | 4676 | sysTime.roll!"months"(-49, AllowDayOverflow.no); |
|---|
| | 4677 | assertPred!"=="(sysTime, SysTime(Date(4, 2, 29))); |
|---|
| | 4678 | sysTime.roll!"months"(49, AllowDayOverflow.no); |
|---|
| | 4679 | assertPred!"=="(sysTime, SysTime(Date(4, 3, 29))); |
|---|
| | 4680 | } |
|---|
| | 4681 | |
|---|
| | 4682 | { |
|---|
| | 4683 | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| | 4684 | sysTime.roll!"months"(-85, AllowDayOverflow.no); |
|---|
| | 4685 | assertPred!"=="(sysTime, SysTime(Date(4, 2, 29))); |
|---|
| | 4686 | sysTime.roll!"months"(85, AllowDayOverflow.no); |
|---|
| | 4687 | assertPred!"=="(sysTime, SysTime(Date(4, 3, 29))); |
|---|
| | 4688 | } |
|---|
| | 4689 | |
|---|
| | 4690 | { |
|---|
| | 4691 | auto sysTime = SysTime(Date(-1, 1, 1)); |
|---|
| | 4692 | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| | 4693 | assertPred!"=="(sysTime, SysTime(Date(-1, 12, 1))); |
|---|
| | 4694 | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| | 4695 | assertPred!"=="(sysTime, SysTime(Date(-1, 1, 1))); |
|---|
| | 4696 | } |
|---|
| | 4697 | |
|---|
| | 4698 | { |
|---|
| | 4699 | auto sysTime = SysTime(Date(-4, 1, 1)); |
|---|
| | 4700 | sysTime.roll!"months"(-48, AllowDayOverflow.no); |
|---|
| | 4701 | assertPred!"=="(sysTime, SysTime(Date(-4, 1, 1))); |
|---|
| | 4702 | sysTime.roll!"months"(48, AllowDayOverflow.no); |
|---|
| | 4703 | assertPred!"=="(sysTime, SysTime(Date(-4, 1, 1))); |
|---|
| | 4704 | } |
|---|
| | 4705 | |
|---|
| | 4706 | { |
|---|
| | 4707 | auto sysTime = SysTime(Date(-4, 3, 31)); |
|---|
| | 4708 | sysTime.roll!"months"(-49, AllowDayOverflow.no); |
|---|
| | 4709 | assertPred!"=="(sysTime, SysTime(Date(-4, 2, 29))); |
|---|
| | 4710 | sysTime.roll!"months"(49, AllowDayOverflow.no); |
|---|
| | 4711 | assertPred!"=="(sysTime, SysTime(Date(-4, 3, 29))); |
|---|
| | 4712 | } |
|---|
| | 4713 | |
|---|
| | 4714 | { |
|---|
| | 4715 | auto sysTime = SysTime(Date(-4, 3, 31)); |
|---|
| | 4716 | sysTime.roll!"months"(-85, AllowDayOverflow.no); |
|---|
| | 4717 | assertPred!"=="(sysTime, SysTime(Date(-4, 2, 29))); |
|---|
| | 4718 | sysTime.roll!"months"(85, AllowDayOverflow.no); |
|---|
| | 4719 | assertPred!"=="(sysTime, SysTime(Date(-4, 3, 29))); |
|---|
| | 4720 | } |
|---|
| | 4721 | |
|---|
| | 4722 | { |
|---|
| | 4723 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 4724 | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| | 4725 | assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 4726 | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| | 4727 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 4728 | } |
|---|
| | 4729 | |
|---|
| | 4730 | { |
|---|
| | 4731 | auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 4732 | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| | 4733 | assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 4734 | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| | 4735 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 4736 | } |
|---|
| | 4737 | |
|---|
| | 4738 | { |
|---|
| | 4739 | auto sysTime = SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 4740 | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| | 4741 | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 4742 | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| | 4743 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 4744 | } |
|---|
| | 4745 | |
|---|
| | 4746 | { |
|---|
| | 4747 | auto sysTime = SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 4748 | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| | 4749 | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 4750 | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| | 4751 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 4752 | } |
|---|
| | 4753 | |
|---|
| | 4754 | { |
|---|
| | 4755 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)); |
|---|
| | 4756 | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| | 4757 | assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| | 4758 | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| | 4759 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| | 4760 | } |
|---|
| | 4761 | |
|---|
| | 4762 | { |
|---|
| | 4763 | auto sysTime = SysTime(DateTime(4, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| | 4764 | sysTime.roll!"months"(-85, AllowDayOverflow.no); |
|---|
| | 4765 | assertPred!"=="(sysTime, SysTime(DateTime(4, 2, 29, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 4766 | sysTime.roll!"months"(85, AllowDayOverflow.no); |
|---|
| | 4767 | assertPred!"=="(sysTime, SysTime(DateTime(4, 3, 29, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 4768 | } |
|---|
| | 4769 | |
|---|
| | 4770 | { |
|---|
| | 4771 | auto sysTime = SysTime(DateTime(-3, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| | 4772 | sysTime.roll!"months"(85, AllowDayOverflow.no); |
|---|
| | 4773 | assertPred!"=="(sysTime, SysTime(DateTime(-3, 4, 30, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 4774 | sysTime.roll!"months"(-85, AllowDayOverflow.no); |
|---|
| | 4775 | assertPred!"=="(sysTime, SysTime(DateTime(-3, 3, 30, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| | 4776 | } |
|---|
| | 4777 | } |
|---|
| | 4778 | } |
|---|
| | 4779 | |
|---|
| | 4780 | |
|---|
| | 4781 | /++ |
|---|
| | 4782 | Adds the given number of days to this SysTime. A negative number will |
|---|
| | 4783 | subtract. |
|---|
| | 4784 | |
|---|
| | 4785 | The difference between rolling and adding is that rolling does not affect |
|---|
| | 4786 | larger units. So, if you roll the SysTime one year's worth of days, then |
|---|
| | 4787 | you get the exact same SysTime. |
|---|
| | 4788 | |
|---|
| | 4789 | Note that TimeOfDay has no $(D add!"days"()) function because you can add |
|---|
| | 4790 | days to a SysTime by adding a duration to it. |
|---|
| | 4791 | |
|---|
| | 4792 | Params: |
|---|
| | 4793 | days = The number of days to add to this SysTime. |
|---|
| | 4794 | |
|---|
| | 4795 | Examples: |
|---|
| | 4796 | -------------------- |
|---|
| | 4797 | auto st = SysTime(DateTime(2010, 1, 1, 11, 23, 12)); |
|---|
| | 4798 | st.roll!"days"(1); |
|---|
| | 4799 | assert(st == SysTime(DateTime(2010, 1, 2, 11, 23, 12))); |
|---|
| | 4800 | st.roll!"days"(365); |
|---|
| | 4801 | assert(st == SysTime(DateTime(2010, 1, 26, 11, 23, 12))); |
|---|
| | 4802 | st.roll!"days"(-32); |
|---|
| | 4803 | assert(st == SysTime(DateTime(2010, 1, 25, 11, 23, 12))); |
|---|
| | 4804 | -------------------- |
|---|
| | 4805 | +/ |
|---|
| | 4806 | /+ref SysTime+/ void roll(string units)(long days) nothrow |
|---|
| | 4807 | if(units == "days") |
|---|
| | 4808 | { |
|---|
| | 4809 | auto hnsecs = adjTime; |
|---|
| | 4810 | auto gdays = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| | 4811 | |
|---|
| | 4812 | if(hnsecs < 0) |
|---|
| | 4813 | { |
|---|
| | 4814 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 4815 | --gdays; |
|---|
| | 4816 | } |
|---|
| | 4817 | |
|---|
| | 4818 | auto date = Date(cast(int)gdays); |
|---|
| | 4819 | date.roll!"days"(days); |
|---|
| | 4820 | gdays = date.dayOfGregorianCal - 1; |
|---|
| | 4821 | |
|---|
| | 4822 | if(gdays < 0) |
|---|
| | 4823 | { |
|---|
| | 4824 | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| | 4825 | ++gdays; |
|---|
| | 4826 | } |
|---|
| | 4827 | |
|---|
| | 4828 | immutable newDaysHNSecs = convert!("days", "hnsecs")(gdays); |
|---|
| | 4829 | |
|---|
| | 4830 | adjTime = newDaysHNSecs + hnsecs; |
|---|
| | 4831 | } |
|---|
| | 4832 | |
|---|
| | 4833 | unittest |
|---|
| | 4834 | { |
|---|
| | 4835 | version(testStdDateTime) |
|---|
| | 4836 | { |
|---|
| | 4837 | //Test A.D. |
|---|
| | 4838 | { |
|---|
| | 4839 | auto sysTime = SysTime(Date(1999, 2, 28)); |
|---|
| | 4840 | sysTime.roll!"days"(1); |
|---|
| | 4841 | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 1))); |
|---|
| | 4842 | sysTime.roll!"days"(-1); |
|---|
| | 4843 | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28))); |
|---|
| | 4844 | } |
|---|
| | 4845 | |
|---|
| | 4846 | { |
|---|
| | 4847 | auto sysTime = SysTime(Date(2000, 2, 28)); |
|---|
| | 4848 | sysTime.roll!"days"(1); |
|---|
| | 4849 | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 29))); |
|---|
| | 4850 | sysTime.roll!"days"(1); |
|---|
| | 4851 | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 1))); |
|---|
| | 4852 | sysTime.roll!"days"(-1); |
|---|
| | 4853 | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 29))); |
|---|
| | 4854 | } |
|---|
| | 4855 | |
|---|
| | 4856 | { |
|---|
| | 4857 | auto sysTime = SysTime(Date(1999, 6, 30)); |
|---|
| | 4858 | sysTime.roll!"days"(1); |
|---|
| | 4859 | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 1))); |
|---|
| | 4860 | sysTime.roll!"days"(-1); |
|---|
| | 4861 | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 30))); |
|---|
| | 4862 | } |
|---|
| | 4863 | |
|---|
| | 4864 | { |
|---|
| | 4865 | auto sysTime = SysTime(Date(1999, 7, 31)); |
|---|
| | 4866 | sysTime.roll!"days"(1); |
|---|
| | 4867 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 1))); |
|---|
| | 4868 | sysTime.roll!"days"(-1); |
|---|
| | 4869 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 31))); |
|---|
| | 4870 | } |
|---|
| | 4871 | |
|---|
| | 4872 | { |
|---|
| | 4873 | auto sysTime = SysTime(Date(1999, 1, 1)); |
|---|
| | 4874 | sysTime.roll!"days"(-1); |
|---|
| | 4875 | assertPred!"=="(sysTime, SysTime(Date(1999, 1, 31))); |
|---|
| | 4876 | sysTime.roll!"days"(1); |
|---|
| | 4877 | assertPred!"=="(sysTime, SysTime(Date(1999, 1, 1))); |
|---|
| | 4878 | } |
|---|
| | 4879 | |
|---|
| | 4880 | { |
|---|
| | 4881 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 4882 | sysTime.roll!"days"(9); |
|---|
| | 4883 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 15))); |
|---|
| | 4884 | sysTime.roll!"days"(-11); |
|---|
| | 4885 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 4))); |
|---|
| | 4886 | sysTime.roll!"days"(30); |
|---|
| | 4887 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 3))); |
|---|
| | 4888 | sysTime.roll!"days"(-3); |
|---|
| | 4889 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 31))); |
|---|
| | 4890 | } |
|---|
| | 4891 | |
|---|
| | 4892 | { |
|---|
| | 4893 | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| | 4894 | sysTime.roll!"days"(365); |
|---|
| | 4895 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 30))); |
|---|
| | 4896 | sysTime.roll!"days"(-365); |
|---|
| | 4897 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6))); |
|---|
| | 4898 | sysTime.roll!"days"(366); |
|---|
| | 4899 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 31))); |
|---|
| | 4900 | sysTime.roll!"days"(730); |
|---|
| | 4901 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 17))); |
|---|
| | 4902 | sysTime.roll!"days"(-1096); |
|---|
| | 4903 | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6))); |
|---|
| | 4904 | } |
|---|
| | 4905 | |
|---|
| | 4906 | { |
|---|
| | 4907 | auto sysTime = SysTime(Date(1999, 2, 6)); |
|---|
| | 4908 | sysTime.roll!"days"(365); |
|---|
| | 4909 | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 7))); |
|---|
| | 4910 | sysTime.roll!"days"(-365); |
|---|
| | 4911 | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 6))); |
|---|
| | 4912 | sysTime.roll!"days"(366); |
|---|
| | 4913 | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 8))); |
|---|
| | 4914 | sysTime.roll!"days"(730); |
|---|
| | 4915 | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 10))); |
|---|
| | 4916 | sysTime.roll!"days"(-1096); |
|---|
| | 4917 | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 6))); |
|---|
| | 4918 | } |
|---|
| | 4919 | |
|---|
| | 4920 | { |
|---|
| | 4921 | auto sysTime = SysTime(DateTime(1999, 2, 28, 7, 9, 2), FracSec.from!"usecs"(234578)); |
|---|
| | 4922 | sysTime.roll!"days"(1); |
|---|
| | 4923 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 2, 1, 7, 9, 2), FracSec.from!"usecs"(234578))); |
|---|
| | 4924 | sysTime.roll!"days"(-1); |
|---|
| | 4925 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 2, 28, 7, 9, 2), FracSec.from!"usecs"(234578))); |
|---|
| | 4926 | } |
|---|
| | 4927 | |
|---|
| | 4928 | { |
|---|
| | 4929 | auto sysTime = SysTime(DateTime(1999, 7, 6, 7, 9, 2), FracSec.from!"usecs"(234578)); |
|---|
| | 4930 | sysTime.roll!"days"(9); |
|---|
| | 4931 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 7, 15, 7, 9, 2), FracSec.from!"usecs"(234578))); |
|---|
| | 4932 | sysTime.roll!"days"(-11); |
|---|
| | 4933 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 7, 4, 7, 9, 2), FracSec.from!"usecs"(234578))); |
|---|
| | 4934 | sysTime.roll!"days"(30); |
|---|
| | 4935 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 7, 3, 7, 9, 2), FracSec.from!"usecs"(234578))); |
|---|
| | 4936 | sysTime.roll!"days"(-3); |
|---|
| | 4937 | assertPred!"=="(sysTime, SysTime(DateTime(1999, 7, 31, 7, 9, 2), FracSec.from!"usecs"(234578))); |
|---|
| | 4938 | } |
|---|
| | 4939 | |
|---|
| | 4940 | //Test B.C. |
|---|
| | 4941 | { |
|---|
| | 4942 | auto sysTime = SysTime(Date(-1999, 2, 28)); |
|---|
| | 4943 | sysTime.roll!"days"(1); |
|---|
| | 4944 | assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 1))); |
|---|
| | 4945 | sysTime.roll!"days"(-1); |
|---|
| | 4946 | assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 28))); |
|---|
| | 4947 | } |
|---|
| | 4948 | |
|---|
| | 4949 | { |
|---|
| | 4950 | auto sysTime = SysTime(Date(-2000, 2, 28)); |
|---|
| | 4951 | sysTime.roll!"days"(1); |
|---|
| | 4952 | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 29))); |
|---|
| | 4953 | sysTime.roll!"days"(1); |
|---|
| | 4954 | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 1))); |
|---|
| | 4955 | sysTime.roll!"days"(-1); |
|---|
| | 4956 | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 29))); |
|---|
| | 4957 | } |
|---|
| | 4958 | |
|---|
| | 4959 | { |
|---|
| | 4960 | auto sysTime = SysTime(Date(-1999, 6, 30)); |
|---|
| | 4961 | sysTime.roll!"days"(1); |
|---|
| | 4962 | assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 1))); |
|---|
| | 4963 | sysTime.roll!"days"(-1); |
|---|
| | 4964 | assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 30))); |
|---|
| | 4965 | } |
|---|
| | 4966 | |
|---|
| | 4967 | { |
|---|
| | 4968 | auto sysTime = SysTime(Date(-1999, 7, 31)); |
|---|
| | 4969 | sysTime.roll!"days"(1); |
|---|
| | 4970 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 1))); |
|---|
| | 4971 | sysTime.roll!"days"(-1); |
|---|
| | 4972 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 31))); |
|---|
| | 4973 | } |
|---|
| | 4974 | |
|---|
| | 4975 | { |
|---|
| | 4976 | auto sysTime = SysTime(Date(-1999, 1, 1)); |
|---|
| | 4977 | sysTime.roll!"days"(-1); |
|---|
| | 4978 | assertPred!"=="(sysTime, SysTime(Date(-1999, 1, 31))); |
|---|
| | 4979 | sysTime.roll!"days"(1); |
|---|
| | 4980 | assertPred!"=="(sysTime, SysTime(Date(-1999, 1, 1))); |
|---|
| | 4981 | } |
|---|
| | 4982 | |
|---|
| | 4983 | { |
|---|
| | 4984 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 4985 | sysTime.roll!"days"(9); |
|---|
| | 4986 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 15))); |
|---|
| | 4987 | sysTime.roll!"days"(-11); |
|---|
| | 4988 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 4))); |
|---|
| | 4989 | sysTime.roll!"days"(30); |
|---|
| | 4990 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 3))); |
|---|
| | 4991 | sysTime.roll!"days"(-3); |
|---|
| | 4992 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 31))); |
|---|
| | 4993 | } |
|---|
| | 4994 | |
|---|
| | 4995 | { |
|---|
| | 4996 | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| | 4997 | sysTime.roll!"days"(365); |
|---|
| | 4998 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 30))); |
|---|
| | 4999 | sysTime.roll!"days"(-365); |
|---|
| | 5000 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6))); |
|---|
| | 5001 | sysTime.roll!"days"(366); |
|---|
| | 5002 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 31))); |
|---|
| | 5003 | sysTime.roll!"days"(730); |
|---|
| | 5004 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 17))); |
|---|
| | 5005 | sysTime.roll!"days"(-1096); |
|---|
| | 5006 | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6))); |
|---|
| | 5007 | } |
|---|
| | 5008 | |
|---|
| | 5009 | { |
|---|
| | 5010 | auto sysTime = SysTime(DateTime(-1999, 2, 28, 7, 9, 2), FracSec.from!"usecs"(234578)); |
|---|
| | 5011 | sysTime.roll!"days"(1); |
|---|
| | 5012 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 2, 1, 7, 9, 2), FracSec.from!"usecs"(234578))); |
|---|
| | 5013 | sysTime.roll!"days"(-1); |
|---|
| | 5014 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 2, 28, 7, 9, 2), FracSec.from!"usecs"(234578))); |
|---|
| | 5015 | } |
|---|
| | 5016 | |
|---|
| | 5017 | { |
|---|
| | 5018 | auto sysTime = SysTime(DateTime(-1999, 7, 6, 7, 9, 2), FracSec.from!"usecs"(234578)); |
|---|
| | 5019 | sysTime.roll!"days"(9); |
|---|
| | 5020 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 7, 15, 7, 9, 2), FracSec.from!"usecs"(234578))); |
|---|
| | 5021 | sysTime.roll!"days"(-11); |
|---|
| | 5022 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 7, 4, 7, 9, 2), FracSec.from!"usecs"(234578))); |
|---|
| | 5023 | sysTime.roll!"days"(30); |
|---|
| | 5024 | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 7, 3, 7, 9, 2), FracSec.from!"usecs"(234578))); |
|---|
| | 5025 | sysTime.roll!"days"(-3); |
|---|
| | 5026 | } |
|---|
| | 5027 | |
|---|
| | 5028 | //Test Both |
|---|
| | 5029 | { |
|---|
| | 5030 | auto sysTime = SysTime(Date(1, 7, 6)); |
|---|
| | 5031 | sysTime.roll!"days"(-365); |
|---|
| | 5032 | assertPred!"=="(sysTime, SysTime(Date(1, 7, 13))); |
|---|
| | 5033 | sysTime.roll!"days"(365); |
|---|
| | 5034 | assertPred!"=="(sysTime, SysTime(Date(1, 7, 6))); |
|---|
| | 5035 | sysTime.roll!"days"(-731); |
|---|
| | 5036 | assertPred!"=="(sysTime, SysTime(Date(1, 7, 19))); |
|---|
| | 5037 | sysTime.roll!"days"(730); |
|---|
| | 5038 | assertPred!"=="(sysTime, SysTime(Date(1, 7, 5))); |
|---|
| | 5039 | } |
|---|
| | 5040 | |
|---|
| | 5041 | { |
|---|
| | 5042 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 5043 | sysTime.roll!"days"(-1); |
|---|
| | 5044 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 31, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 5045 | sysTime.roll!"days"(1); |
|---|
| | 5046 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 5047 | } |
|---|
| | 5048 | |
|---|
| | 5049 | { |
|---|
| | 5050 | auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 5051 | sysTime.roll!"days"(-1); |
|---|
| | 5052 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5053 | sysTime.roll!"days"(1); |
|---|
| | 5054 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5055 | } |
|---|
| | 5056 | |
|---|
| | 5057 | { |
|---|
| | 5058 | auto sysTime = SysTime(DateTime(0, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 5059 | sysTime.roll!"days"(1); |
|---|
| | 5060 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 5061 | sysTime.roll!"days"(-1); |
|---|
| | 5062 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 5063 | } |
|---|
| | 5064 | |
|---|
| | 5065 | { |
|---|
| | 5066 | auto sysTime = SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 5067 | sysTime.roll!"days"(1); |
|---|
| | 5068 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5069 | sysTime.roll!"days"(-1); |
|---|
| | 5070 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5071 | } |
|---|
| | 5072 | |
|---|
| | 5073 | { |
|---|
| | 5074 | auto sysTime = SysTime(DateTime(1, 7, 6, 13, 13, 9), FracSec.from!"msecs"(22)); |
|---|
| | 5075 | sysTime.roll!"days"(-365); |
|---|
| | 5076 | assertPred!"=="(sysTime, SysTime(DateTime(1, 7, 13, 13, 13, 9), FracSec.from!"msecs"(22))); |
|---|
| | 5077 | sysTime.roll!"days"(365); |
|---|
| | 5078 | assertPred!"=="(sysTime, SysTime(DateTime(1, 7, 6, 13, 13, 9), FracSec.from!"msecs"(22))); |
|---|
| | 5079 | sysTime.roll!"days"(-731); |
|---|
| | 5080 | assertPred!"=="(sysTime, SysTime(DateTime(1, 7, 19, 13, 13, 9), FracSec.from!"msecs"(22))); |
|---|
| | 5081 | sysTime.roll!"days"(730); |
|---|
| | 5082 | assertPred!"=="(sysTime, SysTime(DateTime(1, 7, 5, 13, 13, 9), FracSec.from!"msecs"(22))); |
|---|
| | 5083 | } |
|---|
| | 5084 | |
|---|
| | 5085 | { |
|---|
| | 5086 | auto sysTime = SysTime(DateTime(0, 7, 6, 13, 13, 9), FracSec.from!"msecs"(22)); |
|---|
| | 5087 | sysTime.roll!"days"(-365); |
|---|
| | 5088 | assertPred!"=="(sysTime, SysTime(DateTime(0, 7, 13, 13, 13, 9), FracSec.from!"msecs"(22))); |
|---|
| | 5089 | sysTime.roll!"days"(365); |
|---|
| | 5090 | assertPred!"=="(sysTime, SysTime(DateTime(0, 7, 6, 13, 13, 9), FracSec.from!"msecs"(22))); |
|---|
| | 5091 | sysTime.roll!"days"(-731); |
|---|
| | 5092 | assertPred!"=="(sysTime, SysTime(DateTime(0, 7, 19, 13, 13, 9), FracSec.from!"msecs"(22))); |
|---|
| | 5093 | sysTime.roll!"days"(730); |
|---|
| | 5094 | assertPred!"=="(sysTime, SysTime(DateTime(0, 7, 5, 13, 13, 9), FracSec.from!"msecs"(22))); |
|---|
| | 5095 | } |
|---|
| | 5096 | |
|---|
| | 5097 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 5098 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 5099 | static assert(!__traits(compiles, cst.roll!"days"(4))); |
|---|
| | 5100 | //static assert(!__traits(compiles, ist.roll!"days"(4))); |
|---|
| | 5101 | |
|---|
| | 5102 | //Verify Examples. |
|---|
| | 5103 | auto st = SysTime(DateTime(2010, 1, 1, 11, 23, 12)); |
|---|
| | 5104 | st.roll!"days"(1); |
|---|
| | 5105 | assert(st == SysTime(DateTime(2010, 1, 2, 11, 23, 12))); |
|---|
| | 5106 | st.roll!"days"(365); |
|---|
| | 5107 | assert(st == SysTime(DateTime(2010, 1, 26, 11, 23, 12))); |
|---|
| | 5108 | st.roll!"days"(-32); |
|---|
| | 5109 | assert(st == SysTime(DateTime(2010, 1, 25, 11, 23, 12))); |
|---|
| | 5110 | } |
|---|
| | 5111 | } |
|---|
| | 5112 | |
|---|
| | 5113 | |
|---|
| | 5114 | |
|---|
| | 5115 | /++ |
|---|
| | 5116 | Add hours to the time of day. Negative values will subtract. |
|---|
| | 5117 | |
|---|
| | 5118 | The difference between rolling and adding is that rolling does not |
|---|
| | 5119 | affect larger units. So, if you roll the SysTime 24 hours, you get |
|---|
| | 5120 | the exact same SysTime. |
|---|
| | 5121 | |
|---|
| | 5122 | Note that SysTime has no $(D add!"hours"()), $(D add!"minutes"()), or |
|---|
| | 5123 | $(D add!"seconds"()) function because you can add those units to |
|---|
| | 5124 | a SysTime by adding a duration to it. |
|---|
| | 5125 | |
|---|
| | 5126 | Params: |
|---|
| | 5127 | hours = The number of hours to add to this SysTime. |
|---|
| | 5128 | |
|---|
| | 5129 | Examples: |
|---|
| | 5130 | -------------------- |
|---|
| | 5131 | auto st1 = SysTime(DateTime(2010, 7, 4, 12, 0, 0)); |
|---|
| | 5132 | st1.roll!"hours"(1); |
|---|
| | 5133 | assert(st1 == SysTime(DateTime(2010, 7, 4, 13, 0, 0))); |
|---|
| | 5134 | |
|---|
| | 5135 | auto st2 = SysTime(DateTime(2010, 2, 12, 12, 0, 0)); |
|---|
| | 5136 | st2.roll!"hours"(-1); |
|---|
| | 5137 | assert(st2 == SysTime(DateTime(2010, 2, 12, 11, 0, 0))); |
|---|
| | 5138 | |
|---|
| | 5139 | auto st3 = SysTime(DateTime(2009, 12, 31, 0, 0, 0)); |
|---|
| | 5140 | st3.roll!"minutes"(1); |
|---|
| | 5141 | assert(st3 == SysTime(DateTime(2009, 12, 31, 0, 1, 0))); |
|---|
| | 5142 | |
|---|
| | 5143 | auto st4 = SysTime(DateTime(2010, 1, 1, 0, 0, 0)); |
|---|
| | 5144 | st4.roll!"minutes"(-1); |
|---|
| | 5145 | assert(st4 == SysTime(DateTime(2010, 1, 1, 0, 59, 0))); |
|---|
| | 5146 | |
|---|
| | 5147 | auto st5 = SysTime(DateTime(2009, 12, 31, 0, 0, 0)); |
|---|
| | 5148 | st5.roll!"seconds"(1); |
|---|
| | 5149 | assert(st5 == SysTime(DateTime(2009, 12, 31, 0, 0, 1))); |
|---|
| | 5150 | |
|---|
| | 5151 | auto st6 = SysTime(DateTime(2010, 1, 1, 0, 0, 0)); |
|---|
| | 5152 | st6.roll!"seconds"(-1); |
|---|
| | 5153 | assert(st6 == SysTime(DateTime(2010, 1, 1, 0, 0, 59))); |
|---|
| | 5154 | -------------------- |
|---|
| | 5155 | +/ |
|---|
| | 5156 | /+ref SysTime+/ void roll(string units)(long value) nothrow |
|---|
| | 5157 | if(units == "hours" || |
|---|
| | 5158 | units == "minutes" || |
|---|
| | 5159 | units == "seconds") |
|---|
| | 5160 | { |
|---|
| | 5161 | try |
|---|
| | 5162 | { |
|---|
| | 5163 | auto hnsecs = adjTime; |
|---|
| | 5164 | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| | 5165 | |
|---|
| | 5166 | if(hnsecs < 0) |
|---|
| | 5167 | { |
|---|
| | 5168 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 5169 | --days; |
|---|
| | 5170 | } |
|---|
| | 5171 | |
|---|
| | 5172 | immutable hour = splitUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| | 5173 | immutable minute = splitUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| | 5174 | immutable second = splitUnitsFromHNSecs!"seconds"(hnsecs); |
|---|
| | 5175 | |
|---|
| | 5176 | auto dateTime = DateTime(Date(cast(int)days), TimeOfDay(cast(int)hour, cast(int)minute, cast(int)second)); |
|---|
| | 5177 | dateTime.roll!units(value); |
|---|
| | 5178 | --days; |
|---|
| | 5179 | |
|---|
| | 5180 | hnsecs += convert!("hours", "hnsecs")(dateTime.hour); |
|---|
| | 5181 | hnsecs += convert!("minutes", "hnsecs")(dateTime.minute); |
|---|
| | 5182 | hnsecs += convert!("seconds", "hnsecs")(dateTime.second); |
|---|
| | 5183 | |
|---|
| | 5184 | if(days < 0) |
|---|
| | 5185 | { |
|---|
| | 5186 | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| | 5187 | ++days; |
|---|
| | 5188 | } |
|---|
| | 5189 | |
|---|
| | 5190 | immutable newDaysHNSecs = convert!("days", "hnsecs")(days); |
|---|
| | 5191 | |
|---|
| | 5192 | adjTime = newDaysHNSecs + hnsecs; |
|---|
| | 5193 | } |
|---|
| | 5194 | catch(Exception e) |
|---|
| | 5195 | assert(0, "Either DateTime's constructor or TimeOfDay's constructor threw."); |
|---|
| | 5196 | } |
|---|
| | 5197 | |
|---|
| | 5198 | //Test roll!"hours"(). |
|---|
| | 5199 | unittest |
|---|
| | 5200 | { |
|---|
| | 5201 | version(testStdDateTime) |
|---|
| | 5202 | { |
|---|
| | 5203 | static void TestST(SysTime orig, int hours, in SysTime expected, size_t line = __LINE__) |
|---|
| | 5204 | { |
|---|
| | 5205 | orig.roll!"hours"(hours); |
|---|
| | 5206 | assertPred!"=="(orig, expected, "", __FILE__, line); |
|---|
| | 5207 | } |
|---|
| | 5208 | |
|---|
| | 5209 | //Test A.D. |
|---|
| | 5210 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 0, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5211 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 1, SysTime(DateTime(1999, 7, 6, 13, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5212 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 2, SysTime(DateTime(1999, 7, 6, 14, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5213 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 3, SysTime(DateTime(1999, 7, 6, 15, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5214 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 4, SysTime(DateTime(1999, 7, 6, 16, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5215 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 5, SysTime(DateTime(1999, 7, 6, 17, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5216 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 6, SysTime(DateTime(1999, 7, 6, 18, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5217 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 7, SysTime(DateTime(1999, 7, 6, 19, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5218 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 8, SysTime(DateTime(1999, 7, 6, 20, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5219 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 9, SysTime(DateTime(1999, 7, 6, 21, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5220 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 10, SysTime(DateTime(1999, 7, 6, 22, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5221 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 11, SysTime(DateTime(1999, 7, 6, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5222 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 12, SysTime(DateTime(1999, 7, 6, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5223 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 13, SysTime(DateTime(1999, 7, 6, 1, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5224 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 14, SysTime(DateTime(1999, 7, 6, 2, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5225 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 15, SysTime(DateTime(1999, 7, 6, 3, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5226 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 16, SysTime(DateTime(1999, 7, 6, 4, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5227 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 17, SysTime(DateTime(1999, 7, 6, 5, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5228 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 18, SysTime(DateTime(1999, 7, 6, 6, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5229 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 19, SysTime(DateTime(1999, 7, 6, 7, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5230 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 20, SysTime(DateTime(1999, 7, 6, 8, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5231 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 21, SysTime(DateTime(1999, 7, 6, 9, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5232 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 22, SysTime(DateTime(1999, 7, 6, 10, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5233 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 23, SysTime(DateTime(1999, 7, 6, 11, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5234 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 24, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5235 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 25, SysTime(DateTime(1999, 7, 6, 13, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5236 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 50, SysTime(DateTime(1999, 7, 6, 14, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5237 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 10_000, SysTime(DateTime(1999, 7, 6, 4, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5238 | |
|---|
| | 5239 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -1, SysTime(DateTime(1999, 7, 6, 11, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5240 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -2, SysTime(DateTime(1999, 7, 6, 10, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5241 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -3, SysTime(DateTime(1999, 7, 6, 9, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5242 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -4, SysTime(DateTime(1999, 7, 6, 8, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5243 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -5, SysTime(DateTime(1999, 7, 6, 7, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5244 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -6, SysTime(DateTime(1999, 7, 6, 6, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5245 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -7, SysTime(DateTime(1999, 7, 6, 5, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5246 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -8, SysTime(DateTime(1999, 7, 6, 4, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5247 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -9, SysTime(DateTime(1999, 7, 6, 3, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5248 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -10, SysTime(DateTime(1999, 7, 6, 2, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5249 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -11, SysTime(DateTime(1999, 7, 6, 1, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5250 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -12, SysTime(DateTime(1999, 7, 6, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5251 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -13, SysTime(DateTime(1999, 7, 6, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5252 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -14, SysTime(DateTime(1999, 7, 6, 22, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5253 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -15, SysTime(DateTime(1999, 7, 6, 21, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5254 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -16, SysTime(DateTime(1999, 7, 6, 20, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5255 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -17, SysTime(DateTime(1999, 7, 6, 19, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5256 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -18, SysTime(DateTime(1999, 7, 6, 18, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5257 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -19, SysTime(DateTime(1999, 7, 6, 17, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5258 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -20, SysTime(DateTime(1999, 7, 6, 16, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5259 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -21, SysTime(DateTime(1999, 7, 6, 15, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5260 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -22, SysTime(DateTime(1999, 7, 6, 14, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5261 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -23, SysTime(DateTime(1999, 7, 6, 13, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5262 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -24, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5263 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -25, SysTime(DateTime(1999, 7, 6, 11, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5264 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -50, SysTime(DateTime(1999, 7, 6, 10, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5265 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -10_000, SysTime(DateTime(1999, 7, 6, 20, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5266 | |
|---|
| | 5267 | TestST(SysTime(DateTime(1999, 7, 6, 0, 30, 33), FracSec.from!"msecs"(45)), 1, SysTime(DateTime(1999, 7, 6, 1, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5268 | TestST(SysTime(DateTime(1999, 7, 6, 0, 30, 33), FracSec.from!"msecs"(45)), 0, SysTime(DateTime(1999, 7, 6, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5269 | TestST(SysTime(DateTime(1999, 7, 6, 0, 30, 33), FracSec.from!"msecs"(45)), -1, SysTime(DateTime(1999, 7, 6, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5270 | |
|---|
| | 5271 | TestST(SysTime(DateTime(1999, 7, 6, 23, 30, 33), FracSec.from!"msecs"(45)), 1, SysTime(DateTime(1999, 7, 6, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5272 | TestST(SysTime(DateTime(1999, 7, 6, 23, 30, 33), FracSec.from!"msecs"(45)), 0, SysTime(DateTime(1999, 7, 6, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5273 | TestST(SysTime(DateTime(1999, 7, 6, 23, 30, 33), FracSec.from!"msecs"(45)), -1, SysTime(DateTime(1999, 7, 6, 22, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5274 | |
|---|
| | 5275 | TestST(SysTime(DateTime(1999, 7, 31, 23, 30, 33), FracSec.from!"msecs"(45)), 1, SysTime(DateTime(1999, 7, 31, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5276 | TestST(SysTime(DateTime(1999, 8, 1, 0, 30, 33), FracSec.from!"msecs"(45)), -1, SysTime(DateTime(1999, 8, 1, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5277 | |
|---|
| | 5278 | TestST(SysTime(DateTime(1999, 12, 31, 23, 30, 33), FracSec.from!"msecs"(45)), 1, SysTime(DateTime(1999, 12, 31, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5279 | TestST(SysTime(DateTime(2000, 1, 1, 0, 30, 33), FracSec.from!"msecs"(45)), -1, SysTime(DateTime(2000, 1, 1, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5280 | |
|---|
| | 5281 | TestST(SysTime(DateTime(1999, 2, 28, 23, 30, 33), FracSec.from!"msecs"(45)), 25, SysTime(DateTime(1999, 2, 28, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5282 | TestST(SysTime(DateTime(1999, 3, 2, 0, 30, 33), FracSec.from!"msecs"(45)), -25, SysTime(DateTime(1999, 3, 2, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5283 | |
|---|
| | 5284 | TestST(SysTime(DateTime(2000, 2, 28, 23, 30, 33), FracSec.from!"msecs"(45)), 25, SysTime(DateTime(2000, 2, 28, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5285 | TestST(SysTime(DateTime(2000, 3, 1, 0, 30, 33), FracSec.from!"msecs"(45)), -25, SysTime(DateTime(2000, 3, 1, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5286 | |
|---|
| | 5287 | //Test B.C. |
|---|
| | 5288 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 0, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5289 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 1, SysTime(DateTime(-1999, 7, 6, 13, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5290 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 2, SysTime(DateTime(-1999, 7, 6, 14, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5291 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 3, SysTime(DateTime(-1999, 7, 6, 15, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5292 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 4, SysTime(DateTime(-1999, 7, 6, 16, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5293 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 5, SysTime(DateTime(-1999, 7, 6, 17, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5294 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 6, SysTime(DateTime(-1999, 7, 6, 18, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5295 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 7, SysTime(DateTime(-1999, 7, 6, 19, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5296 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 8, SysTime(DateTime(-1999, 7, 6, 20, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5297 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 9, SysTime(DateTime(-1999, 7, 6, 21, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5298 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 10, SysTime(DateTime(-1999, 7, 6, 22, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5299 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 11, SysTime(DateTime(-1999, 7, 6, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5300 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 12, SysTime(DateTime(-1999, 7, 6, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5301 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 13, SysTime(DateTime(-1999, 7, 6, 1, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5302 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 14, SysTime(DateTime(-1999, 7, 6, 2, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5303 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 15, SysTime(DateTime(-1999, 7, 6, 3, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5304 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 16, SysTime(DateTime(-1999, 7, 6, 4, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5305 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 17, SysTime(DateTime(-1999, 7, 6, 5, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5306 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 18, SysTime(DateTime(-1999, 7, 6, 6, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5307 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 19, SysTime(DateTime(-1999, 7, 6, 7, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5308 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 20, SysTime(DateTime(-1999, 7, 6, 8, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5309 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 21, SysTime(DateTime(-1999, 7, 6, 9, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5310 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 22, SysTime(DateTime(-1999, 7, 6, 10, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5311 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 23, SysTime(DateTime(-1999, 7, 6, 11, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5312 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 24, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5313 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 25, SysTime(DateTime(-1999, 7, 6, 13, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5314 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 50, SysTime(DateTime(-1999, 7, 6, 14, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5315 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), 10_000, SysTime(DateTime(-1999, 7, 6, 4, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5316 | |
|---|
| | 5317 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -1, SysTime(DateTime(-1999, 7, 6, 11, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5318 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -2, SysTime(DateTime(-1999, 7, 6, 10, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5319 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -3, SysTime(DateTime(-1999, 7, 6, 9, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5320 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -4, SysTime(DateTime(-1999, 7, 6, 8, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5321 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -5, SysTime(DateTime(-1999, 7, 6, 7, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5322 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -6, SysTime(DateTime(-1999, 7, 6, 6, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5323 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -7, SysTime(DateTime(-1999, 7, 6, 5, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5324 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -8, SysTime(DateTime(-1999, 7, 6, 4, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5325 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -9, SysTime(DateTime(-1999, 7, 6, 3, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5326 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -10, SysTime(DateTime(-1999, 7, 6, 2, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5327 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -11, SysTime(DateTime(-1999, 7, 6, 1, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5328 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -12, SysTime(DateTime(-1999, 7, 6, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5329 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -13, SysTime(DateTime(-1999, 7, 6, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5330 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -14, SysTime(DateTime(-1999, 7, 6, 22, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5331 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -15, SysTime(DateTime(-1999, 7, 6, 21, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5332 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -16, SysTime(DateTime(-1999, 7, 6, 20, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5333 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -17, SysTime(DateTime(-1999, 7, 6, 19, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5334 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -18, SysTime(DateTime(-1999, 7, 6, 18, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5335 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -19, SysTime(DateTime(-1999, 7, 6, 17, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5336 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -20, SysTime(DateTime(-1999, 7, 6, 16, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5337 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -21, SysTime(DateTime(-1999, 7, 6, 15, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5338 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -22, SysTime(DateTime(-1999, 7, 6, 14, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5339 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -23, SysTime(DateTime(-1999, 7, 6, 13, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5340 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -24, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5341 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -25, SysTime(DateTime(-1999, 7, 6, 11, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5342 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -50, SysTime(DateTime(-1999, 7, 6, 10, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5343 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(45)), -10_000, SysTime(DateTime(-1999, 7, 6, 20, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5344 | |
|---|
| | 5345 | TestST(SysTime(DateTime(-1999, 7, 6, 0, 30, 33), FracSec.from!"msecs"(45)), 1, SysTime(DateTime(-1999, 7, 6, 1, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5346 | TestST(SysTime(DateTime(-1999, 7, 6, 0, 30, 33), FracSec.from!"msecs"(45)), 0, SysTime(DateTime(-1999, 7, 6, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5347 | TestST(SysTime(DateTime(-1999, 7, 6, 0, 30, 33), FracSec.from!"msecs"(45)), -1, SysTime(DateTime(-1999, 7, 6, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5348 | |
|---|
| | 5349 | TestST(SysTime(DateTime(-1999, 7, 6, 23, 30, 33), FracSec.from!"msecs"(45)), 1, SysTime(DateTime(-1999, 7, 6, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5350 | TestST(SysTime(DateTime(-1999, 7, 6, 23, 30, 33), FracSec.from!"msecs"(45)), 0, SysTime(DateTime(-1999, 7, 6, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5351 | TestST(SysTime(DateTime(-1999, 7, 6, 23, 30, 33), FracSec.from!"msecs"(45)), -1, SysTime(DateTime(-1999, 7, 6, 22, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5352 | |
|---|
| | 5353 | TestST(SysTime(DateTime(-1999, 7, 31, 23, 30, 33), FracSec.from!"msecs"(45)), 1, SysTime(DateTime(-1999, 7, 31, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5354 | TestST(SysTime(DateTime(-1999, 8, 1, 0, 30, 33), FracSec.from!"msecs"(45)), -1, SysTime(DateTime(-1999, 8, 1, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5355 | |
|---|
| | 5356 | TestST(SysTime(DateTime(-2001, 12, 31, 23, 30, 33), FracSec.from!"msecs"(45)), 1, SysTime(DateTime(-2001, 12, 31, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5357 | TestST(SysTime(DateTime(-2000, 1, 1, 0, 30, 33), FracSec.from!"msecs"(45)), -1, SysTime(DateTime(-2000, 1, 1, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5358 | |
|---|
| | 5359 | TestST(SysTime(DateTime(-2001, 2, 28, 23, 30, 33), FracSec.from!"msecs"(45)), 25, SysTime(DateTime(-2001, 2, 28, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5360 | TestST(SysTime(DateTime(-2001, 3, 2, 0, 30, 33), FracSec.from!"msecs"(45)), -25, SysTime(DateTime(-2001, 3, 2, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5361 | |
|---|
| | 5362 | TestST(SysTime(DateTime(-2000, 2, 28, 23, 30, 33), FracSec.from!"msecs"(45)), 25, SysTime(DateTime(-2000, 2, 28, 0, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5363 | TestST(SysTime(DateTime(-2000, 3, 1, 0, 30, 33), FracSec.from!"msecs"(45)), -25, SysTime(DateTime(-2000, 3, 1, 23, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5364 | |
|---|
| | 5365 | //Test Both |
|---|
| | 5366 | TestST(SysTime(DateTime(-1, 1, 1, 11, 30, 33), FracSec.from!"msecs"(45)), 17_546, SysTime(DateTime(-1, 1, 1, 13, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5367 | TestST(SysTime(DateTime(1, 1, 1, 13, 30, 33), FracSec.from!"msecs"(45)), -17_546, SysTime(DateTime(1, 1, 1, 11, 30, 33), FracSec.from!"msecs"(45))); |
|---|
| | 5368 | |
|---|
| | 5369 | { |
|---|
| | 5370 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 5371 | sysTime.roll!"hours"(-1); |
|---|
| | 5372 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 5373 | sysTime.roll!"hours"(1); |
|---|
| | 5374 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 5375 | } |
|---|
| | 5376 | |
|---|
| | 5377 | { |
|---|
| | 5378 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 5379 | sysTime.roll!"hours"(-1); |
|---|
| | 5380 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5381 | sysTime.roll!"hours"(1); |
|---|
| | 5382 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5383 | } |
|---|
| | 5384 | |
|---|
| | 5385 | { |
|---|
| | 5386 | auto sysTime = SysTime(DateTime(0, 12, 31, 23, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 5387 | sysTime.roll!"hours"(1); |
|---|
| | 5388 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 5389 | sysTime.roll!"hours"(-1); |
|---|
| | 5390 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 5391 | } |
|---|
| | 5392 | |
|---|
| | 5393 | { |
|---|
| | 5394 | auto sysTime = SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 5395 | sysTime.roll!"hours"(1); |
|---|
| | 5396 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 0, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5397 | sysTime.roll!"hours"(-1); |
|---|
| | 5398 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5399 | } |
|---|
| | 5400 | |
|---|
| | 5401 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 5402 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 5403 | static assert(!__traits(compiles, cst.roll!"hours"(4))); |
|---|
| | 5404 | //static assert(!__traits(compiles, ist.roll!"hours"(4))); |
|---|
| | 5405 | |
|---|
| | 5406 | //Verify Examples. |
|---|
| | 5407 | auto st1 = SysTime(DateTime(2010, 7, 4, 12, 0, 0)); |
|---|
| | 5408 | st1.roll!"hours"(1); |
|---|
| | 5409 | assert(st1 == SysTime(DateTime(2010, 7, 4, 13, 0, 0))); |
|---|
| | 5410 | |
|---|
| | 5411 | auto st2 = SysTime(DateTime(2010, 2, 12, 12, 0, 0)); |
|---|
| | 5412 | st2.roll!"hours"(-1); |
|---|
| | 5413 | assert(st2 == SysTime(DateTime(2010, 2, 12, 11, 0, 0))); |
|---|
| | 5414 | |
|---|
| | 5415 | auto st3 = SysTime(DateTime(2009, 12, 31, 0, 0, 0)); |
|---|
| | 5416 | st3.roll!"minutes"(1); |
|---|
| | 5417 | assert(st3 == SysTime(DateTime(2009, 12, 31, 0, 1, 0))); |
|---|
| | 5418 | |
|---|
| | 5419 | auto st4 = SysTime(DateTime(2010, 1, 1, 0, 0, 0)); |
|---|
| | 5420 | st4.roll!"minutes"(-1); |
|---|
| | 5421 | assert(st4 == SysTime(DateTime(2010, 1, 1, 0, 59, 0))); |
|---|
| | 5422 | |
|---|
| | 5423 | auto st5 = SysTime(DateTime(2009, 12, 31, 0, 0, 0)); |
|---|
| | 5424 | st5.roll!"seconds"(1); |
|---|
| | 5425 | assert(st5 == SysTime(DateTime(2009, 12, 31, 0, 0, 1))); |
|---|
| | 5426 | |
|---|
| | 5427 | auto st6 = SysTime(DateTime(2010, 1, 1, 0, 0, 0)); |
|---|
| | 5428 | st6.roll!"seconds"(-1); |
|---|
| | 5429 | assert(st6 == SysTime(DateTime(2010, 1, 1, 0, 0, 59))); |
|---|
| | 5430 | } |
|---|
| | 5431 | } |
|---|
| | 5432 | |
|---|
| | 5433 | //Test roll!"minutes"(). |
|---|
| | 5434 | unittest |
|---|
| | 5435 | { |
|---|
| | 5436 | version(testStdDateTime) |
|---|
| | 5437 | { |
|---|
| | 5438 | static void TestST(SysTime orig, int minutes, in SysTime expected, size_t line = __LINE__) |
|---|
| | 5439 | { |
|---|
| | 5440 | orig.roll!"minutes"(minutes); |
|---|
| | 5441 | assertPred!"=="(orig, expected, "", __FILE__, line); |
|---|
| | 5442 | } |
|---|
| | 5443 | |
|---|
| | 5444 | //Test A.D. |
|---|
| | 5445 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 0, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5446 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 1, SysTime(DateTime(1999, 7, 6, 12, 31, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5447 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 2, SysTime(DateTime(1999, 7, 6, 12, 32, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5448 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 3, SysTime(DateTime(1999, 7, 6, 12, 33, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5449 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 4, SysTime(DateTime(1999, 7, 6, 12, 34, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5450 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 5, SysTime(DateTime(1999, 7, 6, 12, 35, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5451 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 10, SysTime(DateTime(1999, 7, 6, 12, 40, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5452 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 15, SysTime(DateTime(1999, 7, 6, 12, 45, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5453 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 29, SysTime(DateTime(1999, 7, 6, 12, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5454 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 30, SysTime(DateTime(1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5455 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 45, SysTime(DateTime(1999, 7, 6, 12, 15, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5456 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 60, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5457 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 75, SysTime(DateTime(1999, 7, 6, 12, 45, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5458 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 90, SysTime(DateTime(1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5459 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 100, SysTime(DateTime(1999, 7, 6, 12, 10, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5460 | |
|---|
| | 5461 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 689, SysTime(DateTime(1999, 7, 6, 12, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5462 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 690, SysTime(DateTime(1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5463 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 691, SysTime(DateTime(1999, 7, 6, 12, 1, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5464 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 960, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5465 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 1439, SysTime(DateTime(1999, 7, 6, 12, 29, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5466 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 1440, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5467 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 1441, SysTime(DateTime(1999, 7, 6, 12, 31, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5468 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 2880, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5469 | |
|---|
| | 5470 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -1, SysTime(DateTime(1999, 7, 6, 12, 29, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5471 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -2, SysTime(DateTime(1999, 7, 6, 12, 28, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5472 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -3, SysTime(DateTime(1999, 7, 6, 12, 27, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5473 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -4, SysTime(DateTime(1999, 7, 6, 12, 26, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5474 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -5, SysTime(DateTime(1999, 7, 6, 12, 25, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5475 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -10, SysTime(DateTime(1999, 7, 6, 12, 20, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5476 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -15, SysTime(DateTime(1999, 7, 6, 12, 15, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5477 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -29, SysTime(DateTime(1999, 7, 6, 12, 1, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5478 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -30, SysTime(DateTime(1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5479 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -45, SysTime(DateTime(1999, 7, 6, 12, 45, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5480 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -60, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5481 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -75, SysTime(DateTime(1999, 7, 6, 12, 15, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5482 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -90, SysTime(DateTime(1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5483 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -100, SysTime(DateTime(1999, 7, 6, 12, 50, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5484 | |
|---|
| | 5485 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -749, SysTime(DateTime(1999, 7, 6, 12, 1, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5486 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -750, SysTime(DateTime(1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5487 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -751, SysTime(DateTime(1999, 7, 6, 12, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5488 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -960, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5489 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -1439, SysTime(DateTime(1999, 7, 6, 12, 31, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5490 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -1440, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5491 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -1441, SysTime(DateTime(1999, 7, 6, 12, 29, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5492 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -2880, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5493 | |
|---|
| | 5494 | TestST(SysTime(DateTime(1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203)), 1, SysTime(DateTime(1999, 7, 6, 12, 1, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5495 | TestST(SysTime(DateTime(1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203)), 0, SysTime(DateTime(1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5496 | TestST(SysTime(DateTime(1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203)), -1, SysTime(DateTime(1999, 7, 6, 12, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5497 | |
|---|
| | 5498 | TestST(SysTime(DateTime(1999, 7, 6, 11, 59, 33), FracSec.from!"usecs"(7203)), 1, SysTime(DateTime(1999, 7, 6, 11, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5499 | TestST(SysTime(DateTime(1999, 7, 6, 11, 59, 33), FracSec.from!"usecs"(7203)), 0, SysTime(DateTime(1999, 7, 6, 11, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5500 | TestST(SysTime(DateTime(1999, 7, 6, 11, 59, 33), FracSec.from!"usecs"(7203)), -1, SysTime(DateTime(1999, 7, 6, 11, 58, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5501 | |
|---|
| | 5502 | TestST(SysTime(DateTime(1999, 7, 6, 0, 0, 33), FracSec.from!"usecs"(7203)), 1, SysTime(DateTime(1999, 7, 6, 0, 1, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5503 | TestST(SysTime(DateTime(1999, 7, 6, 0, 0, 33), FracSec.from!"usecs"(7203)), 0, SysTime(DateTime(1999, 7, 6, 0, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5504 | TestST(SysTime(DateTime(1999, 7, 6, 0, 0, 33), FracSec.from!"usecs"(7203)), -1, SysTime(DateTime(1999, 7, 6, 0, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5505 | |
|---|
| | 5506 | TestST(SysTime(DateTime(1999, 7, 5, 23, 59, 33), FracSec.from!"usecs"(7203)), 1, SysTime(DateTime(1999, 7, 5, 23, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5507 | TestST(SysTime(DateTime(1999, 7, 5, 23, 59, 33), FracSec.from!"usecs"(7203)), 0, SysTime(DateTime(1999, 7, 5, 23, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5508 | TestST(SysTime(DateTime(1999, 7, 5, 23, 59, 33), FracSec.from!"usecs"(7203)), -1, SysTime(DateTime(1999, 7, 5, 23, 58, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5509 | |
|---|
| | 5510 | TestST(SysTime(DateTime(1998, 12, 31, 23, 59, 33), FracSec.from!"usecs"(7203)), 1, SysTime(DateTime(1998, 12, 31, 23, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5511 | TestST(SysTime(DateTime(1998, 12, 31, 23, 59, 33), FracSec.from!"usecs"(7203)), 0, SysTime(DateTime(1998, 12, 31, 23, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5512 | TestST(SysTime(DateTime(1998, 12, 31, 23, 59, 33), FracSec.from!"usecs"(7203)), -1, SysTime(DateTime(1998, 12, 31, 23, 58, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5513 | |
|---|
| | 5514 | //Test B.C. |
|---|
| | 5515 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 0, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5516 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 1, SysTime(DateTime(-1999, 7, 6, 12, 31, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5517 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 2, SysTime(DateTime(-1999, 7, 6, 12, 32, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5518 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 3, SysTime(DateTime(-1999, 7, 6, 12, 33, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5519 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 4, SysTime(DateTime(-1999, 7, 6, 12, 34, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5520 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 5, SysTime(DateTime(-1999, 7, 6, 12, 35, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5521 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 10, SysTime(DateTime(-1999, 7, 6, 12, 40, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5522 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 15, SysTime(DateTime(-1999, 7, 6, 12, 45, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5523 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 29, SysTime(DateTime(-1999, 7, 6, 12, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5524 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 30, SysTime(DateTime(-1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5525 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 45, SysTime(DateTime(-1999, 7, 6, 12, 15, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5526 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 60, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5527 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 75, SysTime(DateTime(-1999, 7, 6, 12, 45, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5528 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 90, SysTime(DateTime(-1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5529 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 100, SysTime(DateTime(-1999, 7, 6, 12, 10, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5530 | |
|---|
| | 5531 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 689, SysTime(DateTime(-1999, 7, 6, 12, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5532 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 690, SysTime(DateTime(-1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5533 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 691, SysTime(DateTime(-1999, 7, 6, 12, 1, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5534 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 960, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5535 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 1439, SysTime(DateTime(-1999, 7, 6, 12, 29, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5536 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 1440, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5537 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 1441, SysTime(DateTime(-1999, 7, 6, 12, 31, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5538 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), 2880, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5539 | |
|---|
| | 5540 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -1, SysTime(DateTime(-1999, 7, 6, 12, 29, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5541 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -2, SysTime(DateTime(-1999, 7, 6, 12, 28, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5542 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -3, SysTime(DateTime(-1999, 7, 6, 12, 27, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5543 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -4, SysTime(DateTime(-1999, 7, 6, 12, 26, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5544 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -5, SysTime(DateTime(-1999, 7, 6, 12, 25, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5545 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -10, SysTime(DateTime(-1999, 7, 6, 12, 20, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5546 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -15, SysTime(DateTime(-1999, 7, 6, 12, 15, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5547 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -29, SysTime(DateTime(-1999, 7, 6, 12, 1, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5548 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -30, SysTime(DateTime(-1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5549 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -45, SysTime(DateTime(-1999, 7, 6, 12, 45, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5550 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -60, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5551 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -75, SysTime(DateTime(-1999, 7, 6, 12, 15, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5552 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -90, SysTime(DateTime(-1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5553 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -100, SysTime(DateTime(-1999, 7, 6, 12, 50, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5554 | |
|---|
| | 5555 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -749, SysTime(DateTime(-1999, 7, 6, 12, 1, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5556 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -750, SysTime(DateTime(-1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5557 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -751, SysTime(DateTime(-1999, 7, 6, 12, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5558 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -960, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5559 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -1439, SysTime(DateTime(-1999, 7, 6, 12, 31, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5560 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -1440, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5561 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -1441, SysTime(DateTime(-1999, 7, 6, 12, 29, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5562 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203)), -2880, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5563 | |
|---|
| | 5564 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203)), 1, SysTime(DateTime(-1999, 7, 6, 12, 1, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5565 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203)), 0, SysTime(DateTime(-1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5566 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 0, 33), FracSec.from!"usecs"(7203)), -1, SysTime(DateTime(-1999, 7, 6, 12, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5567 | |
|---|
| | 5568 | TestST(SysTime(DateTime(-1999, 7, 6, 11, 59, 33), FracSec.from!"usecs"(7203)), 1, SysTime(DateTime(-1999, 7, 6, 11, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5569 | TestST(SysTime(DateTime(-1999, 7, 6, 11, 59, 33), FracSec.from!"usecs"(7203)), 0, SysTime(DateTime(-1999, 7, 6, 11, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5570 | TestST(SysTime(DateTime(-1999, 7, 6, 11, 59, 33), FracSec.from!"usecs"(7203)), -1, SysTime(DateTime(-1999, 7, 6, 11, 58, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5571 | |
|---|
| | 5572 | TestST(SysTime(DateTime(-1999, 7, 6, 0, 0, 33), FracSec.from!"usecs"(7203)), 1, SysTime(DateTime(-1999, 7, 6, 0, 1, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5573 | TestST(SysTime(DateTime(-1999, 7, 6, 0, 0, 33), FracSec.from!"usecs"(7203)), 0, SysTime(DateTime(-1999, 7, 6, 0, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5574 | TestST(SysTime(DateTime(-1999, 7, 6, 0, 0, 33), FracSec.from!"usecs"(7203)), -1, SysTime(DateTime(-1999, 7, 6, 0, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5575 | |
|---|
| | 5576 | TestST(SysTime(DateTime(-1999, 7, 5, 23, 59, 33), FracSec.from!"usecs"(7203)), 1, SysTime(DateTime(-1999, 7, 5, 23, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5577 | TestST(SysTime(DateTime(-1999, 7, 5, 23, 59, 33), FracSec.from!"usecs"(7203)), 0, SysTime(DateTime(-1999, 7, 5, 23, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5578 | TestST(SysTime(DateTime(-1999, 7, 5, 23, 59, 33), FracSec.from!"usecs"(7203)), -1, SysTime(DateTime(-1999, 7, 5, 23, 58, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5579 | |
|---|
| | 5580 | TestST(SysTime(DateTime(-2000, 12, 31, 23, 59, 33), FracSec.from!"usecs"(7203)), 1, SysTime(DateTime(-2000, 12, 31, 23, 0, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5581 | TestST(SysTime(DateTime(-2000, 12, 31, 23, 59, 33), FracSec.from!"usecs"(7203)), 0, SysTime(DateTime(-2000, 12, 31, 23, 59, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5582 | TestST(SysTime(DateTime(-2000, 12, 31, 23, 59, 33), FracSec.from!"usecs"(7203)), -1, SysTime(DateTime(-2000, 12, 31, 23, 58, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5583 | |
|---|
| | 5584 | //Test Both |
|---|
| | 5585 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), -1, SysTime(DateTime(1, 1, 1, 0, 59, 0))); |
|---|
| | 5586 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 0)), 1, SysTime(DateTime(0, 12, 31, 23, 0, 0))); |
|---|
| | 5587 | |
|---|
| | 5588 | TestST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), -1, SysTime(DateTime(0, 1, 1, 0, 59, 0))); |
|---|
| | 5589 | TestST(SysTime(DateTime(-1, 12, 31, 23, 59, 0)), 1, SysTime(DateTime(-1, 12, 31, 23, 0, 0))); |
|---|
| | 5590 | |
|---|
| | 5591 | TestST(SysTime(DateTime(-1, 1, 1, 11, 30, 33), FracSec.from!"usecs"(7203)), 1_052_760, SysTime(DateTime(-1, 1, 1, 11, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5592 | TestST(SysTime(DateTime(1, 1, 1, 13, 30, 33), FracSec.from!"usecs"(7203)), -1_052_760, SysTime(DateTime(1, 1, 1, 13, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5593 | |
|---|
| | 5594 | TestST(SysTime(DateTime(-1, 1, 1, 11, 30, 33), FracSec.from!"usecs"(7203)), 1_052_782, SysTime(DateTime(-1, 1, 1, 11, 52, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5595 | TestST(SysTime(DateTime(1, 1, 1, 13, 52, 33), FracSec.from!"usecs"(7203)), -1_052_782, SysTime(DateTime(1, 1, 1, 13, 30, 33), FracSec.from!"usecs"(7203))); |
|---|
| | 5596 | |
|---|
| | 5597 | { |
|---|
| | 5598 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 5599 | sysTime.roll!"minutes"(-1); |
|---|
| | 5600 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 59, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 5601 | sysTime.roll!"minutes"(1); |
|---|
| | 5602 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 5603 | } |
|---|
| | 5604 | |
|---|
| | 5605 | { |
|---|
| | 5606 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 5607 | sysTime.roll!"minutes"(-1); |
|---|
| | 5608 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5609 | sysTime.roll!"minutes"(1); |
|---|
| | 5610 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5611 | } |
|---|
| | 5612 | |
|---|
| | 5613 | { |
|---|
| | 5614 | auto sysTime = SysTime(DateTime(0, 12, 31, 23, 59, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 5615 | sysTime.roll!"minutes"(1); |
|---|
| | 5616 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 5617 | sysTime.roll!"minutes"(-1); |
|---|
| | 5618 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 5619 | } |
|---|
| | 5620 | |
|---|
| | 5621 | { |
|---|
| | 5622 | auto sysTime = SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 5623 | sysTime.roll!"minutes"(1); |
|---|
| | 5624 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 0, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5625 | sysTime.roll!"minutes"(-1); |
|---|
| | 5626 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5627 | } |
|---|
| | 5628 | |
|---|
| | 5629 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 5630 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 5631 | static assert(!__traits(compiles, cst.roll!"minutes"(4))); |
|---|
| | 5632 | //static assert(!__traits(compiles, ist.roll!"minutes"(4))); |
|---|
| | 5633 | } |
|---|
| | 5634 | } |
|---|
| | 5635 | |
|---|
| | 5636 | //Test roll!"seconds"(). |
|---|
| | 5637 | unittest |
|---|
| | 5638 | { |
|---|
| | 5639 | version(testStdDateTime) |
|---|
| | 5640 | { |
|---|
| | 5641 | static void TestST(SysTime orig, int seconds, in SysTime expected, size_t line = __LINE__) |
|---|
| | 5642 | { |
|---|
| | 5643 | orig.roll!"seconds"(seconds); |
|---|
| | 5644 | assertPred!"=="(orig, expected, "", __FILE__, line); |
|---|
| | 5645 | } |
|---|
| | 5646 | |
|---|
| | 5647 | //Test A.D. |
|---|
| | 5648 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 0, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5649 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(1999, 7, 6, 12, 30, 34), FracSec.from!"msecs"(274))); |
|---|
| | 5650 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 2, SysTime(DateTime(1999, 7, 6, 12, 30, 35), FracSec.from!"msecs"(274))); |
|---|
| | 5651 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 3, SysTime(DateTime(1999, 7, 6, 12, 30, 36), FracSec.from!"msecs"(274))); |
|---|
| | 5652 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 4, SysTime(DateTime(1999, 7, 6, 12, 30, 37), FracSec.from!"msecs"(274))); |
|---|
| | 5653 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 5, SysTime(DateTime(1999, 7, 6, 12, 30, 38), FracSec.from!"msecs"(274))); |
|---|
| | 5654 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 10, SysTime(DateTime(1999, 7, 6, 12, 30, 43), FracSec.from!"msecs"(274))); |
|---|
| | 5655 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 15, SysTime(DateTime(1999, 7, 6, 12, 30, 48), FracSec.from!"msecs"(274))); |
|---|
| | 5656 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 26, SysTime(DateTime(1999, 7, 6, 12, 30, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5657 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 27, SysTime(DateTime(1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5658 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 30, SysTime(DateTime(1999, 7, 6, 12, 30, 3), FracSec.from!"msecs"(274))); |
|---|
| | 5659 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 59, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"msecs"(274))); |
|---|
| | 5660 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 60, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5661 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 61, SysTime(DateTime(1999, 7, 6, 12, 30, 34), FracSec.from!"msecs"(274))); |
|---|
| | 5662 | |
|---|
| | 5663 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1766, SysTime(DateTime(1999, 7, 6, 12, 30, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5664 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1767, SysTime(DateTime(1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5665 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1768, SysTime(DateTime(1999, 7, 6, 12, 30, 1), FracSec.from!"msecs"(274))); |
|---|
| | 5666 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 2007, SysTime(DateTime(1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5667 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 3599, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"msecs"(274))); |
|---|
| | 5668 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 3600, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5669 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 3601, SysTime(DateTime(1999, 7, 6, 12, 30, 34), FracSec.from!"msecs"(274))); |
|---|
| | 5670 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 7200, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5671 | |
|---|
| | 5672 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"msecs"(274))); |
|---|
| | 5673 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -2, SysTime(DateTime(1999, 7, 6, 12, 30, 31), FracSec.from!"msecs"(274))); |
|---|
| | 5674 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -3, SysTime(DateTime(1999, 7, 6, 12, 30, 30), FracSec.from!"msecs"(274))); |
|---|
| | 5675 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -4, SysTime(DateTime(1999, 7, 6, 12, 30, 29), FracSec.from!"msecs"(274))); |
|---|
| | 5676 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -5, SysTime(DateTime(1999, 7, 6, 12, 30, 28), FracSec.from!"msecs"(274))); |
|---|
| | 5677 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -10, SysTime(DateTime(1999, 7, 6, 12, 30, 23), FracSec.from!"msecs"(274))); |
|---|
| | 5678 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -15, SysTime(DateTime(1999, 7, 6, 12, 30, 18), FracSec.from!"msecs"(274))); |
|---|
| | 5679 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -33, SysTime(DateTime(1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5680 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -34, SysTime(DateTime(1999, 7, 6, 12, 30, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5681 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -35, SysTime(DateTime(1999, 7, 6, 12, 30, 58), FracSec.from!"msecs"(274))); |
|---|
| | 5682 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -59, SysTime(DateTime(1999, 7, 6, 12, 30, 34), FracSec.from!"msecs"(274))); |
|---|
| | 5683 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -60, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5684 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -61, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"msecs"(274))); |
|---|
| | 5685 | |
|---|
| | 5686 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(1999, 7, 6, 12, 30, 1), FracSec.from!"msecs"(274))); |
|---|
| | 5687 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274)), 0, SysTime(DateTime(1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5688 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(1999, 7, 6, 12, 30, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5689 | |
|---|
| | 5690 | TestST(SysTime(DateTime(1999, 7, 6, 12, 0, 0), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(1999, 7, 6, 12, 0, 1), FracSec.from!"msecs"(274))); |
|---|
| | 5691 | TestST(SysTime(DateTime(1999, 7, 6, 12, 0, 0), FracSec.from!"msecs"(274)), 0, SysTime(DateTime(1999, 7, 6, 12, 0, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5692 | TestST(SysTime(DateTime(1999, 7, 6, 12, 0, 0), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(1999, 7, 6, 12, 0, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5693 | |
|---|
| | 5694 | TestST(SysTime(DateTime(1999, 7, 6, 0, 0, 0), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(1999, 7, 6, 0, 0, 1), FracSec.from!"msecs"(274))); |
|---|
| | 5695 | TestST(SysTime(DateTime(1999, 7, 6, 0, 0, 0), FracSec.from!"msecs"(274)), 0, SysTime(DateTime(1999, 7, 6, 0, 0, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5696 | TestST(SysTime(DateTime(1999, 7, 6, 0, 0, 0), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(1999, 7, 6, 0, 0, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5697 | |
|---|
| | 5698 | TestST(SysTime(DateTime(1999, 7, 5, 23, 59, 59), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(1999, 7, 5, 23, 59, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5699 | TestST(SysTime(DateTime(1999, 7, 5, 23, 59, 59), FracSec.from!"msecs"(274)), 0, SysTime(DateTime(1999, 7, 5, 23, 59, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5700 | TestST(SysTime(DateTime(1999, 7, 5, 23, 59, 59), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(1999, 7, 5, 23, 59, 58), FracSec.from!"msecs"(274))); |
|---|
| | 5701 | |
|---|
| | 5702 | TestST(SysTime(DateTime(1998, 12, 31, 23, 59, 59), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(1998, 12, 31, 23, 59, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5703 | TestST(SysTime(DateTime(1998, 12, 31, 23, 59, 59), FracSec.from!"msecs"(274)), 0, SysTime(DateTime(1998, 12, 31, 23, 59, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5704 | TestST(SysTime(DateTime(1998, 12, 31, 23, 59, 59), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(1998, 12, 31, 23, 59, 58), FracSec.from!"msecs"(274))); |
|---|
| | 5705 | |
|---|
| | 5706 | //Test B.C. |
|---|
| | 5707 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 0, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5708 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(-1999, 7, 6, 12, 30, 34), FracSec.from!"msecs"(274))); |
|---|
| | 5709 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 2, SysTime(DateTime(-1999, 7, 6, 12, 30, 35), FracSec.from!"msecs"(274))); |
|---|
| | 5710 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 3, SysTime(DateTime(-1999, 7, 6, 12, 30, 36), FracSec.from!"msecs"(274))); |
|---|
| | 5711 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 4, SysTime(DateTime(-1999, 7, 6, 12, 30, 37), FracSec.from!"msecs"(274))); |
|---|
| | 5712 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 5, SysTime(DateTime(-1999, 7, 6, 12, 30, 38), FracSec.from!"msecs"(274))); |
|---|
| | 5713 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 10, SysTime(DateTime(-1999, 7, 6, 12, 30, 43), FracSec.from!"msecs"(274))); |
|---|
| | 5714 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 15, SysTime(DateTime(-1999, 7, 6, 12, 30, 48), FracSec.from!"msecs"(274))); |
|---|
| | 5715 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 26, SysTime(DateTime(-1999, 7, 6, 12, 30, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5716 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 27, SysTime(DateTime(-1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5717 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 30, SysTime(DateTime(-1999, 7, 6, 12, 30, 3), FracSec.from!"msecs"(274))); |
|---|
| | 5718 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 59, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"msecs"(274))); |
|---|
| | 5719 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 60, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5720 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 61, SysTime(DateTime(-1999, 7, 6, 12, 30, 34), FracSec.from!"msecs"(274))); |
|---|
| | 5721 | |
|---|
| | 5722 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1766, SysTime(DateTime(-1999, 7, 6, 12, 30, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5723 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1767, SysTime(DateTime(-1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5724 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1768, SysTime(DateTime(-1999, 7, 6, 12, 30, 1), FracSec.from!"msecs"(274))); |
|---|
| | 5725 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 2007, SysTime(DateTime(-1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5726 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 3599, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"msecs"(274))); |
|---|
| | 5727 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 3600, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5728 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 3601, SysTime(DateTime(-1999, 7, 6, 12, 30, 34), FracSec.from!"msecs"(274))); |
|---|
| | 5729 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 7200, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5730 | |
|---|
| | 5731 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"msecs"(274))); |
|---|
| | 5732 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -2, SysTime(DateTime(-1999, 7, 6, 12, 30, 31), FracSec.from!"msecs"(274))); |
|---|
| | 5733 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -3, SysTime(DateTime(-1999, 7, 6, 12, 30, 30), FracSec.from!"msecs"(274))); |
|---|
| | 5734 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -4, SysTime(DateTime(-1999, 7, 6, 12, 30, 29), FracSec.from!"msecs"(274))); |
|---|
| | 5735 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -5, SysTime(DateTime(-1999, 7, 6, 12, 30, 28), FracSec.from!"msecs"(274))); |
|---|
| | 5736 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -10, SysTime(DateTime(-1999, 7, 6, 12, 30, 23), FracSec.from!"msecs"(274))); |
|---|
| | 5737 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -15, SysTime(DateTime(-1999, 7, 6, 12, 30, 18), FracSec.from!"msecs"(274))); |
|---|
| | 5738 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -33, SysTime(DateTime(-1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5739 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -34, SysTime(DateTime(-1999, 7, 6, 12, 30, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5740 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -35, SysTime(DateTime(-1999, 7, 6, 12, 30, 58), FracSec.from!"msecs"(274))); |
|---|
| | 5741 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -59, SysTime(DateTime(-1999, 7, 6, 12, 30, 34), FracSec.from!"msecs"(274))); |
|---|
| | 5742 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -60, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5743 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -61, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"msecs"(274))); |
|---|
| | 5744 | |
|---|
| | 5745 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(-1999, 7, 6, 12, 30, 1), FracSec.from!"msecs"(274))); |
|---|
| | 5746 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274)), 0, SysTime(DateTime(-1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5747 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 0), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(-1999, 7, 6, 12, 30, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5748 | |
|---|
| | 5749 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 0, 0), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(-1999, 7, 6, 12, 0, 1), FracSec.from!"msecs"(274))); |
|---|
| | 5750 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 0, 0), FracSec.from!"msecs"(274)), 0, SysTime(DateTime(-1999, 7, 6, 12, 0, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5751 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 0, 0), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(-1999, 7, 6, 12, 0, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5752 | |
|---|
| | 5753 | TestST(SysTime(DateTime(-1999, 7, 6, 0, 0, 0), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(-1999, 7, 6, 0, 0, 1), FracSec.from!"msecs"(274))); |
|---|
| | 5754 | TestST(SysTime(DateTime(-1999, 7, 6, 0, 0, 0), FracSec.from!"msecs"(274)), 0, SysTime(DateTime(-1999, 7, 6, 0, 0, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5755 | TestST(SysTime(DateTime(-1999, 7, 6, 0, 0, 0), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(-1999, 7, 6, 0, 0, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5756 | |
|---|
| | 5757 | TestST(SysTime(DateTime(-1999, 7, 5, 23, 59, 59), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(-1999, 7, 5, 23, 59, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5758 | TestST(SysTime(DateTime(-1999, 7, 5, 23, 59, 59), FracSec.from!"msecs"(274)), 0, SysTime(DateTime(-1999, 7, 5, 23, 59, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5759 | TestST(SysTime(DateTime(-1999, 7, 5, 23, 59, 59), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(-1999, 7, 5, 23, 59, 58), FracSec.from!"msecs"(274))); |
|---|
| | 5760 | |
|---|
| | 5761 | TestST(SysTime(DateTime(-2000, 12, 31, 23, 59, 59), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(-2000, 12, 31, 23, 59, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5762 | TestST(SysTime(DateTime(-2000, 12, 31, 23, 59, 59), FracSec.from!"msecs"(274)), 0, SysTime(DateTime(-2000, 12, 31, 23, 59, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5763 | TestST(SysTime(DateTime(-2000, 12, 31, 23, 59, 59), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(-2000, 12, 31, 23, 59, 58), FracSec.from!"msecs"(274))); |
|---|
| | 5764 | |
|---|
| | 5765 | //Test Both |
|---|
| | 5766 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(1, 1, 1, 0, 0, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5767 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(0, 12, 31, 23, 59, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5768 | |
|---|
| | 5769 | TestST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(0, 1, 1, 0, 0, 59), FracSec.from!"msecs"(274))); |
|---|
| | 5770 | TestST(SysTime(DateTime(-1, 12, 31, 23, 59, 59), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(-1, 12, 31, 23, 59, 0), FracSec.from!"msecs"(274))); |
|---|
| | 5771 | |
|---|
| | 5772 | TestST(SysTime(DateTime(-1, 1, 1, 11, 30, 33), FracSec.from!"msecs"(274)), 63_165_600L, SysTime(DateTime(-1, 1, 1, 11, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5773 | TestST(SysTime(DateTime(1, 1, 1, 13, 30, 33), FracSec.from!"msecs"(274)), -63_165_600L, SysTime(DateTime(1, 1, 1, 13, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5774 | |
|---|
| | 5775 | TestST(SysTime(DateTime(-1, 1, 1, 11, 30, 33), FracSec.from!"msecs"(274)), 63_165_617L, SysTime(DateTime(-1, 1, 1, 11, 30, 50), FracSec.from!"msecs"(274))); |
|---|
| | 5776 | TestST(SysTime(DateTime(1, 1, 1, 13, 30, 50), FracSec.from!"msecs"(274)), -63_165_617L, SysTime(DateTime(1, 1, 1, 13, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5777 | |
|---|
| | 5778 | { |
|---|
| | 5779 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| | 5780 | sysTime.roll!"seconds"(-1); |
|---|
| | 5781 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 59), FracSec.from!"hnsecs"(0))); |
|---|
| | 5782 | sysTime.roll!"seconds"(1); |
|---|
| | 5783 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 5784 | } |
|---|
| | 5785 | |
|---|
| | 5786 | { |
|---|
| | 5787 | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 5788 | sysTime.roll!"seconds"(-1); |
|---|
| | 5789 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5790 | sysTime.roll!"seconds"(1); |
|---|
| | 5791 | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5792 | } |
|---|
| | 5793 | |
|---|
| | 5794 | { |
|---|
| | 5795 | auto sysTime = SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0)); |
|---|
| | 5796 | sysTime.roll!"seconds"(1); |
|---|
| | 5797 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 5798 | sysTime.roll!"seconds"(-1); |
|---|
| | 5799 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0))); |
|---|
| | 5800 | } |
|---|
| | 5801 | |
|---|
| | 5802 | { |
|---|
| | 5803 | auto sysTime = SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 5804 | sysTime.roll!"seconds"(1); |
|---|
| | 5805 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 0), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5806 | sysTime.roll!"seconds"(-1); |
|---|
| | 5807 | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5808 | } |
|---|
| | 5809 | |
|---|
| | 5810 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 5811 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 5812 | static assert(!__traits(compiles, cst.roll!"seconds"(4))); |
|---|
| | 5813 | //static assert(!__traits(compiles, ist.roll!"seconds"(4))); |
|---|
| | 5814 | } |
|---|
| | 5815 | } |
|---|
| | 5816 | |
|---|
| | 5817 | |
|---|
| | 5818 | /++ |
|---|
| | 5819 | Add to the fractional seconds of the time of day. Negative values will |
|---|
| | 5820 | subtract. |
|---|
| | 5821 | |
|---|
| | 5822 | The difference between rolling and adding is that rolling does not affect |
|---|
| | 5823 | larger units. So, if you roll the SysTime 1 second, you get the exact same |
|---|
| | 5824 | SysTime. |
|---|
| | 5825 | |
|---|
| | 5826 | Note that SysTime has no $(D add!"msecs"()), $(D add!"usecs"()), or |
|---|
| | 5827 | $(D add!"hnsecs"()) function because you can add those units to |
|---|
| | 5828 | a SysTime by adding a duration to it. |
|---|
| | 5829 | |
|---|
| | 5830 | Params: |
|---|
| | 5831 | units = The units to add to this SysTime. |
|---|
| | 5832 | value = The number of units to add to this SysTime. |
|---|
| | 5833 | +/ |
|---|
| | 5834 | /+ref SysTime+/ void roll(string units)(long value) nothrow |
|---|
| | 5835 | if(units == "msecs" || |
|---|
| | 5836 | units == "usecs" || |
|---|
| | 5837 | units == "hnsecs") |
|---|
| | 5838 | { |
|---|
| | 5839 | auto hnsecs = adjTime; |
|---|
| | 5840 | immutable days = splitUnitsFromHNSecs!"days"(hnsecs); |
|---|
| | 5841 | immutable negative = hnsecs < 0; |
|---|
| | 5842 | |
|---|
| | 5843 | if(negative) |
|---|
| | 5844 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 5845 | |
|---|
| | 5846 | immutable seconds = splitUnitsFromHNSecs!"seconds"(hnsecs); |
|---|
| | 5847 | |
|---|
| | 5848 | hnsecs += convert!(units, "hnsecs")(value); |
|---|
| | 5849 | hnsecs %= convert!("seconds", "hnsecs")(1); |
|---|
| | 5850 | |
|---|
| | 5851 | if(hnsecs < 0) |
|---|
| | 5852 | hnsecs += convert!("seconds", "hnsecs")(1); |
|---|
| | 5853 | |
|---|
| | 5854 | hnsecs += convert!("seconds", "hnsecs")(seconds); |
|---|
| | 5855 | |
|---|
| | 5856 | if(negative) |
|---|
| | 5857 | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| | 5858 | |
|---|
| | 5859 | immutable newDaysHNSecs = convert!("days", "hnsecs")(days); |
|---|
| | 5860 | |
|---|
| | 5861 | adjTime = newDaysHNSecs + hnsecs; |
|---|
| | 5862 | } |
|---|
| | 5863 | |
|---|
| | 5864 | |
|---|
| | 5865 | //Test roll!"msecs"(). |
|---|
| | 5866 | unittest |
|---|
| | 5867 | { |
|---|
| | 5868 | version(testStdDateTime) |
|---|
| | 5869 | { |
|---|
| | 5870 | static void TestST(SysTime orig, int milliseconds, in SysTime expected, size_t line = __LINE__) |
|---|
| | 5871 | { |
|---|
| | 5872 | orig.roll!"msecs"(milliseconds); |
|---|
| | 5873 | assertPred!"=="(orig, expected, "", __FILE__, line); |
|---|
| | 5874 | } |
|---|
| | 5875 | |
|---|
| | 5876 | //Test A.D. |
|---|
| | 5877 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 0, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5878 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(275))); |
|---|
| | 5879 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 2, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(276))); |
|---|
| | 5880 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 10, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(284))); |
|---|
| | 5881 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 100, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(374))); |
|---|
| | 5882 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 725, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(999))); |
|---|
| | 5883 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 726, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(0))); |
|---|
| | 5884 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5885 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1001, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(275))); |
|---|
| | 5886 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 2000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5887 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 26_725, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(999))); |
|---|
| | 5888 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 26_726, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(0))); |
|---|
| | 5889 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 26_727, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(1))); |
|---|
| | 5890 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1_766_725, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(999))); |
|---|
| | 5891 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1_766_726, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(0))); |
|---|
| | 5892 | |
|---|
| | 5893 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(273))); |
|---|
| | 5894 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -2, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(272))); |
|---|
| | 5895 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -10, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(264))); |
|---|
| | 5896 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -100, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(174))); |
|---|
| | 5897 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -274, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(0))); |
|---|
| | 5898 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -275, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(999))); |
|---|
| | 5899 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -1000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5900 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -1001, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(273))); |
|---|
| | 5901 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -2000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5902 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -33_274, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(0))); |
|---|
| | 5903 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -33_275, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(999))); |
|---|
| | 5904 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -1_833_274, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(0))); |
|---|
| | 5905 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -1_833_275, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(999))); |
|---|
| | 5906 | |
|---|
| | 5907 | //Test B.C. |
|---|
| | 5908 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 0, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5909 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(275))); |
|---|
| | 5910 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 2, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(276))); |
|---|
| | 5911 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 10, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(284))); |
|---|
| | 5912 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 100, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(374))); |
|---|
| | 5913 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 725, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(999))); |
|---|
| | 5914 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 726, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(0))); |
|---|
| | 5915 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5916 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1001, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(275))); |
|---|
| | 5917 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 2000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5918 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 26_725, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(999))); |
|---|
| | 5919 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 26_726, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(0))); |
|---|
| | 5920 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 26_727, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(1))); |
|---|
| | 5921 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1_766_725, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(999))); |
|---|
| | 5922 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), 1_766_726, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(0))); |
|---|
| | 5923 | |
|---|
| | 5924 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -1, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(273))); |
|---|
| | 5925 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -2, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(272))); |
|---|
| | 5926 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -10, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(264))); |
|---|
| | 5927 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -100, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(174))); |
|---|
| | 5928 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -274, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(0))); |
|---|
| | 5929 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -275, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(999))); |
|---|
| | 5930 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -1000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5931 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -1001, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(273))); |
|---|
| | 5932 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -2000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274))); |
|---|
| | 5933 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -33_274, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(0))); |
|---|
| | 5934 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -33_275, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(999))); |
|---|
| | 5935 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -1_833_274, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(0))); |
|---|
| | 5936 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(274)), -1_833_275, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(999))); |
|---|
| | 5937 | |
|---|
| | 5938 | //Test Both |
|---|
| | 5939 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(0)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(1))); |
|---|
| | 5940 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(0)), 0, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(0))); |
|---|
| | 5941 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(0)), -1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(999))); |
|---|
| | 5942 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(0)), -2, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(998))); |
|---|
| | 5943 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(0)), -1000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(0))); |
|---|
| | 5944 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(0)), -2000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(0))); |
|---|
| | 5945 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(0)), -2555, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(445))); |
|---|
| | 5946 | |
|---|
| | 5947 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), -1, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_989_999))); |
|---|
| | 5948 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 0, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5949 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9999))); |
|---|
| | 5950 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(19_999))); |
|---|
| | 5951 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5952 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 5953 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2555, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(5_549_999))); |
|---|
| | 5954 | |
|---|
| | 5955 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 5956 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 5957 | static assert(!__traits(compiles, cst.addMSecs(4))); |
|---|
| | 5958 | //static assert(!__traits(compiles, ist.addMSecs(4))); |
|---|
| | 5959 | } |
|---|
| | 5960 | } |
|---|
| | 5961 | |
|---|
| | 5962 | //Test roll!"usecs"(). |
|---|
| | 5963 | unittest |
|---|
| | 5964 | { |
|---|
| | 5965 | version(testStdDateTime) |
|---|
| | 5966 | { |
|---|
| | 5967 | static void TestST(SysTime orig, long microseconds, in SysTime expected, size_t line = __LINE__) |
|---|
| | 5968 | { |
|---|
| | 5969 | orig.roll!"usecs"(microseconds); |
|---|
| | 5970 | assertPred!"=="(orig, expected, "", __FILE__, line); |
|---|
| | 5971 | } |
|---|
| | 5972 | |
|---|
| | 5973 | //Test A.D. |
|---|
| | 5974 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 0, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274))); |
|---|
| | 5975 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 1, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(275))); |
|---|
| | 5976 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 2, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(276))); |
|---|
| | 5977 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 10, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(284))); |
|---|
| | 5978 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 100, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(374))); |
|---|
| | 5979 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 725, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(999))); |
|---|
| | 5980 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 726, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(1000))); |
|---|
| | 5981 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 1000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(1274))); |
|---|
| | 5982 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 1001, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(1275))); |
|---|
| | 5983 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 2000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(2274))); |
|---|
| | 5984 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 26_725, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(26_999))); |
|---|
| | 5985 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 26_726, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(27_000))); |
|---|
| | 5986 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 26_727, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(27_001))); |
|---|
| | 5987 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 1_766_725, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(766_999))); |
|---|
| | 5988 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 1_766_726, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(767_000))); |
|---|
| | 5989 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 1_000_000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274))); |
|---|
| | 5990 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 60_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274))); |
|---|
| | 5991 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 3_600_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274))); |
|---|
| | 5992 | |
|---|
| | 5993 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -1, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(273))); |
|---|
| | 5994 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -2, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(272))); |
|---|
| | 5995 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -10, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(264))); |
|---|
| | 5996 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -100, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(174))); |
|---|
| | 5997 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -274, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(0))); |
|---|
| | 5998 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -275, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(999_999))); |
|---|
| | 5999 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -1000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(999_274))); |
|---|
| | 6000 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -1001, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(999_273))); |
|---|
| | 6001 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -2000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(998_274))); |
|---|
| | 6002 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -33_274, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(967_000))); |
|---|
| | 6003 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -33_275, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(966_999))); |
|---|
| | 6004 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -1_833_274, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(167_000))); |
|---|
| | 6005 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -1_833_275, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(166_999))); |
|---|
| | 6006 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -1_000_000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274))); |
|---|
| | 6007 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -60_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274))); |
|---|
| | 6008 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -3_600_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274))); |
|---|
| | 6009 | |
|---|
| | 6010 | //Test B.C. |
|---|
| | 6011 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 0, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274))); |
|---|
| | 6012 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 1, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(275))); |
|---|
| | 6013 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 2, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(276))); |
|---|
| | 6014 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 10, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(284))); |
|---|
| | 6015 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 100, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(374))); |
|---|
| | 6016 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 725, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(999))); |
|---|
| | 6017 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 726, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(1000))); |
|---|
| | 6018 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 1000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(1274))); |
|---|
| | 6019 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 1001, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(1275))); |
|---|
| | 6020 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 2000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(2274))); |
|---|
| | 6021 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 26_725, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(26_999))); |
|---|
| | 6022 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 26_726, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(27_000))); |
|---|
| | 6023 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 26_727, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(27_001))); |
|---|
| | 6024 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 1_766_725, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(766_999))); |
|---|
| | 6025 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 1_766_726, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(767_000))); |
|---|
| | 6026 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 1_000_000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274))); |
|---|
| | 6027 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 60_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274))); |
|---|
| | 6028 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), 3_600_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274))); |
|---|
| | 6029 | |
|---|
| | 6030 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -1, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(273))); |
|---|
| | 6031 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -2, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(272))); |
|---|
| | 6032 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -10, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(264))); |
|---|
| | 6033 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -100, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(174))); |
|---|
| | 6034 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -274, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(0))); |
|---|
| | 6035 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -275, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(999_999))); |
|---|
| | 6036 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -1000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(999_274))); |
|---|
| | 6037 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -1001, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(999_273))); |
|---|
| | 6038 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -2000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(998_274))); |
|---|
| | 6039 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -33_274, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(967_000))); |
|---|
| | 6040 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -33_275, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(966_999))); |
|---|
| | 6041 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -1_833_274, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(167_000))); |
|---|
| | 6042 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -1_833_275, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(166_999))); |
|---|
| | 6043 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -1_000_000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274))); |
|---|
| | 6044 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -60_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274))); |
|---|
| | 6045 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274)), -3_600_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(274))); |
|---|
| | 6046 | |
|---|
| | 6047 | //Test Both |
|---|
| | 6048 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(0)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(1))); |
|---|
| | 6049 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(0)), 0, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(0))); |
|---|
| | 6050 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(0)), -1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(999_999))); |
|---|
| | 6051 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(0)), -2, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(999_998))); |
|---|
| | 6052 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(0)), -1000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(999_000))); |
|---|
| | 6053 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(0)), -2000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(998_000))); |
|---|
| | 6054 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(0)), -2555, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(997_445))); |
|---|
| | 6055 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(0)), -1_000_000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(0))); |
|---|
| | 6056 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(0)), -2_000_000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(0))); |
|---|
| | 6057 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(0)), -2_333_333, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"usecs"(666_667))); |
|---|
| | 6058 | |
|---|
| | 6059 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), -1, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_989))); |
|---|
| | 6060 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 0, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6061 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9))); |
|---|
| | 6062 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(19))); |
|---|
| | 6063 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9999))); |
|---|
| | 6064 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(19_999))); |
|---|
| | 6065 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2555, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(25_549))); |
|---|
| | 6066 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1_000_000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6067 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2_000_000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6068 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2_333_333, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(3_333_329))); |
|---|
| | 6069 | |
|---|
| | 6070 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6071 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6072 | static assert(!__traits(compiles, cst.roll!"usecs"(4))); |
|---|
| | 6073 | //static assert(!__traits(compiles, ist.roll!"usecs"(4))); |
|---|
| | 6074 | } |
|---|
| | 6075 | } |
|---|
| | 6076 | |
|---|
| | 6077 | //Test roll!"hnsecs"(). |
|---|
| | 6078 | unittest |
|---|
| | 6079 | { |
|---|
| | 6080 | version(testStdDateTime) |
|---|
| | 6081 | { |
|---|
| | 6082 | static void TestST(SysTime orig, long hnsecs, in SysTime expected, size_t line = __LINE__) |
|---|
| | 6083 | { |
|---|
| | 6084 | orig.roll!"hnsecs"(hnsecs); |
|---|
| | 6085 | assertPred!"=="(orig, expected, "", __FILE__, line); |
|---|
| | 6086 | } |
|---|
| | 6087 | |
|---|
| | 6088 | //Test A.D. |
|---|
| | 6089 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 0, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6090 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(275))); |
|---|
| | 6091 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 2, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(276))); |
|---|
| | 6092 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 10, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(284))); |
|---|
| | 6093 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 100, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(374))); |
|---|
| | 6094 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 725, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(999))); |
|---|
| | 6095 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 726, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1000))); |
|---|
| | 6096 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1274))); |
|---|
| | 6097 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1001, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1275))); |
|---|
| | 6098 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 2000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2274))); |
|---|
| | 6099 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_725, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(26_999))); |
|---|
| | 6100 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_726, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(27_000))); |
|---|
| | 6101 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_727, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(27_001))); |
|---|
| | 6102 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_766_725, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_766_999))); |
|---|
| | 6103 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_766_726, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_767_000))); |
|---|
| | 6104 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_000_000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_000_274))); |
|---|
| | 6105 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 60_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6106 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 3_600_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6107 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 600_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6108 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 36_000_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6109 | |
|---|
| | 6110 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(273))); |
|---|
| | 6111 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -2, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(272))); |
|---|
| | 6112 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -10, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(264))); |
|---|
| | 6113 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -100, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(174))); |
|---|
| | 6114 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -274, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(0))); |
|---|
| | 6115 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -275, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6116 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(9_999_274))); |
|---|
| | 6117 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1001, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(9_999_273))); |
|---|
| | 6118 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -2000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(9_998_274))); |
|---|
| | 6119 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -33_274, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(9_967_000))); |
|---|
| | 6120 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -33_275, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(9_966_999))); |
|---|
| | 6121 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_833_274, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(8_167_000))); |
|---|
| | 6122 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_833_275, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(8_166_999))); |
|---|
| | 6123 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_000_000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(9_000_274))); |
|---|
| | 6124 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -60_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6125 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -3_600_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6126 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -600_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6127 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -36_000_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6128 | |
|---|
| | 6129 | //Test B.C. |
|---|
| | 6130 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 0, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6131 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(275))); |
|---|
| | 6132 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 2, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(276))); |
|---|
| | 6133 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 10, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(284))); |
|---|
| | 6134 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 100, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(374))); |
|---|
| | 6135 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 725, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(999))); |
|---|
| | 6136 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 726, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1000))); |
|---|
| | 6137 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1274))); |
|---|
| | 6138 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1001, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1275))); |
|---|
| | 6139 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 2000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2274))); |
|---|
| | 6140 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_725, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(26_999))); |
|---|
| | 6141 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_726, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(27_000))); |
|---|
| | 6142 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_727, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(27_001))); |
|---|
| | 6143 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_766_725, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_766_999))); |
|---|
| | 6144 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_766_726, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_767_000))); |
|---|
| | 6145 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_000_000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_000_274))); |
|---|
| | 6146 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 60_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6147 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 3_600_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6148 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 600_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6149 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 36_000_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6150 | |
|---|
| | 6151 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(273))); |
|---|
| | 6152 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -2, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(272))); |
|---|
| | 6153 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -10, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(264))); |
|---|
| | 6154 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -100, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(174))); |
|---|
| | 6155 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -274, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(0))); |
|---|
| | 6156 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -275, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6157 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(9_999_274))); |
|---|
| | 6158 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1001, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(9_999_273))); |
|---|
| | 6159 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -2000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(9_998_274))); |
|---|
| | 6160 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -33_274, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(9_967_000))); |
|---|
| | 6161 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -33_275, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(9_966_999))); |
|---|
| | 6162 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_833_274, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(8_167_000))); |
|---|
| | 6163 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_833_275, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(8_166_999))); |
|---|
| | 6164 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_000_000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(9_000_274))); |
|---|
| | 6165 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -60_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6166 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -3_600_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6167 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -600_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6168 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -36_000_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6169 | |
|---|
| | 6170 | //Test Both |
|---|
| | 6171 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 6172 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), 0, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 6173 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6174 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -2, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_998))); |
|---|
| | 6175 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -1000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_000))); |
|---|
| | 6176 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -2000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_998_000))); |
|---|
| | 6177 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -2555, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_997_445))); |
|---|
| | 6178 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -1_000_000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_000_000))); |
|---|
| | 6179 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -2_000_000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(8_000_000))); |
|---|
| | 6180 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -2_333_333, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(7_666_667))); |
|---|
| | 6181 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -10_000_000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 6182 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -20_000_000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 6183 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -20_888_888, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_111_112))); |
|---|
| | 6184 | |
|---|
| | 6185 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), -1, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_998))); |
|---|
| | 6186 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 0, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6187 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0))); |
|---|
| | 6188 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 6189 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(999))); |
|---|
| | 6190 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1999))); |
|---|
| | 6191 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2555, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(2554))); |
|---|
| | 6192 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1_000_000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(999_999))); |
|---|
| | 6193 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2_000_000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1_999_999))); |
|---|
| | 6194 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2_333_333, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(2_333_332))); |
|---|
| | 6195 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 10_000_000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6196 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 20_000_000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6197 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 20_888_888, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(888_887))); |
|---|
| | 6198 | |
|---|
| | 6199 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6200 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6201 | static assert(!__traits(compiles, cst.roll!"hnsecs"(4))); |
|---|
| | 6202 | //static assert(!__traits(compiles, ist.roll!"hnsecs"(4))); |
|---|
| | 6203 | |
|---|
| | 6204 | //Verify Examples. |
|---|
| | 6205 | auto st1 = SysTime(DateTime(2010, 7, 4, 7, 32, 12)); |
|---|
| | 6206 | st1.roll!"hnsecs"(1); |
|---|
| | 6207 | assert(st1 == SysTime(DateTime(2010, 7, 4, 7, 32, 12), FracSec.from!"hnsecs"(1))); |
|---|
| | 6208 | |
|---|
| | 6209 | auto st2 = SysTime(DateTime(2010, 7, 4, 7, 32, 12)); |
|---|
| | 6210 | st2.roll!"hnsecs"(-1); |
|---|
| | 6211 | assert(st2 == SysTime(DateTime(2010, 7, 4, 7, 32, 12), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6212 | |
|---|
| | 6213 | auto st3 = SysTime(DateTime(2009, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 6214 | st3.roll!"hnsecs"(1); |
|---|
| | 6215 | assert(st3 == SysTime(DateTime(2009, 12, 31, 23, 59, 59))); |
|---|
| | 6216 | |
|---|
| | 6217 | auto st4 = SysTime(DateTime(2010, 1, 1, 0, 0, 0)); |
|---|
| | 6218 | st4.roll!"hnsecs"(-1); |
|---|
| | 6219 | assert(st4 == SysTime(DateTime(2010, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6220 | |
|---|
| | 6221 | auto st5 = SysTime(DateTime(2009, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| | 6222 | st5.roll!"hnsecs"(1); |
|---|
| | 6223 | assert(st5 == SysTime(DateTime(2009, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0))); |
|---|
| | 6224 | } |
|---|
| | 6225 | } |
|---|
| | 6226 | |
|---|
| | 6227 | |
|---|
| | 6228 | /++ |
|---|
| | 6229 | Gives the result of adding or subtracting a duration from this SysTime. |
|---|
| | 6230 | |
|---|
| | 6231 | The legal types of arithmetic for SysTime using this operator are |
|---|
| | 6232 | |
|---|
| | 6233 | $(TABLE |
|---|
| | 6234 | $(TR $(TD SysTime) $(TD +) $(TD duration) $(TD -->) $(TD SysTime)) |
|---|
| | 6235 | $(TR $(TD SysTime) $(TD -) $(TD duration) $(TD -->) $(TD SysTime)) |
|---|
| | 6236 | ) |
|---|
| | 6237 | |
|---|
| | 6238 | Params: |
|---|
| | 6239 | duration = The duration to add to or subtract from this SysTime. |
|---|
| | 6240 | +/ |
|---|
| | 6241 | SysTime opBinary(string op, D)(in D duration) const pure nothrow |
|---|
| | 6242 | if((op == "+" || op == "-") && |
|---|
| | 6243 | (is(Unqual!D == Duration) || |
|---|
| | 6244 | is(Unqual!D == TickDuration))) |
|---|
| | 6245 | { |
|---|
| | 6246 | SysTime retval = SysTime(this._stdTime, this._timezone.get); |
|---|
| | 6247 | |
|---|
| | 6248 | static if(is(Unqual!D == Duration)) |
|---|
| | 6249 | immutable hnsecs = duration.total!"hnsecs"; |
|---|
| | 6250 | else static if(is(Unqual!D == TickDuration)) |
|---|
| | 6251 | immutable hnsecs = duration.hnsecs; |
|---|
| | 6252 | |
|---|
| | 6253 | //Ideally, this would just be |
|---|
| | 6254 | //retval._stdTime += unaryFun!(op ~ "a")(hnsecs); |
|---|
| | 6255 | //But there isn't currently a pure version of unaryFun!(). |
|---|
| | 6256 | |
|---|
| | 6257 | static if(op == "+") |
|---|
| | 6258 | immutable signedHNSecs = hnsecs; |
|---|
| | 6259 | else static if(op == "-") |
|---|
| | 6260 | immutable signedHNSecs = -hnsecs; |
|---|
| | 6261 | else |
|---|
| | 6262 | static assert(0); |
|---|
| | 6263 | |
|---|
| | 6264 | retval._stdTime += signedHNSecs; |
|---|
| | 6265 | |
|---|
| | 6266 | return retval; |
|---|
| | 6267 | } |
|---|
| | 6268 | |
|---|
| | 6269 | unittest |
|---|
| | 6270 | { |
|---|
| | 6271 | version(testStdDateTime) |
|---|
| | 6272 | { |
|---|
| | 6273 | auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678)); |
|---|
| | 6274 | |
|---|
| | 6275 | assertPred!"=="(st + dur!"weeks"(7), SysTime(DateTime(1999, 8, 24, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6276 | assertPred!"=="(st + dur!"weeks"(-7), SysTime(DateTime(1999, 5, 18, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6277 | assertPred!"=="(st + dur!"days"(7), SysTime(DateTime(1999, 7, 13, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6278 | assertPred!"=="(st + dur!"days"(-7), SysTime(DateTime(1999, 6, 29, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6279 | assertPred!"=="(st + dur!"hours"(7), SysTime(DateTime(1999, 7, 6, 19, 30, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6280 | assertPred!"=="(st + dur!"hours"(-7), SysTime(DateTime(1999, 7, 6, 5, 30, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6281 | assertPred!"=="(st + dur!"minutes"(7), SysTime(DateTime(1999, 7, 6, 12, 37, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6282 | assertPred!"=="(st + dur!"minutes"(-7), SysTime(DateTime(1999, 7, 6, 12, 23, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6283 | assertPred!"=="(st + dur!"seconds"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 40), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6284 | assertPred!"=="(st + dur!"seconds"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 26), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6285 | assertPred!"=="(st + dur!"msecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_415_678))); |
|---|
| | 6286 | assertPred!"=="(st + dur!"msecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_275_678))); |
|---|
| | 6287 | assertPred!"=="(st + dur!"usecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_748))); |
|---|
| | 6288 | assertPred!"=="(st + dur!"usecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_608))); |
|---|
| | 6289 | assertPred!"=="(st + dur!"hnsecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_685))); |
|---|
| | 6290 | assertPred!"=="(st + dur!"hnsecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_671))); |
|---|
| | 6291 | |
|---|
| | 6292 | //This probably only runs in cases where gettimeofday() is used, but it's |
|---|
| | 6293 | //hard to do this test correctly with variable ticksPerSec. |
|---|
| | 6294 | if(TickDuration.ticksPerSec == 1_000_000) |
|---|
| | 6295 | { |
|---|
| | 6296 | assertPred!"=="(st + TickDuration.from!"usecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_748))); |
|---|
| | 6297 | assertPred!"=="(st + TickDuration.from!"usecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_608))); |
|---|
| | 6298 | } |
|---|
| | 6299 | |
|---|
| | 6300 | assertPred!"=="(st - dur!"weeks"(-7), SysTime(DateTime(1999, 8, 24, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6301 | assertPred!"=="(st - dur!"weeks"(7), SysTime(DateTime(1999, 5, 18, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6302 | assertPred!"=="(st - dur!"days"(-7), SysTime(DateTime(1999, 7, 13, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6303 | assertPred!"=="(st - dur!"days"(7), SysTime(DateTime(1999, 6, 29, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6304 | assertPred!"=="(st - dur!"hours"(-7), SysTime(DateTime(1999, 7, 6, 19, 30, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6305 | assertPred!"=="(st - dur!"hours"(7), SysTime(DateTime(1999, 7, 6, 5, 30, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6306 | assertPred!"=="(st - dur!"minutes"(-7), SysTime(DateTime(1999, 7, 6, 12, 37, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6307 | assertPred!"=="(st - dur!"minutes"(7), SysTime(DateTime(1999, 7, 6, 12, 23, 33), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6308 | assertPred!"=="(st - dur!"seconds"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 40), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6309 | assertPred!"=="(st - dur!"seconds"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 26), FracSec.from!"hnsecs"(2_345_678))); |
|---|
| | 6310 | assertPred!"=="(st - dur!"msecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_415_678))); |
|---|
| | 6311 | assertPred!"=="(st - dur!"msecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_275_678))); |
|---|
| | 6312 | assertPred!"=="(st - dur!"usecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_748))); |
|---|
| | 6313 | assertPred!"=="(st - dur!"usecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_608))); |
|---|
| | 6314 | assertPred!"=="(st - dur!"hnsecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_685))); |
|---|
| | 6315 | assertPred!"=="(st - dur!"hnsecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_671))); |
|---|
| | 6316 | |
|---|
| | 6317 | //This probably only runs in cases where gettimeofday() is used, but it's |
|---|
| | 6318 | //hard to do this test correctly with variable ticksPerSec. |
|---|
| | 6319 | if(TickDuration.ticksPerSec == 1_000_000) |
|---|
| | 6320 | { |
|---|
| | 6321 | assertPred!"=="(st - TickDuration.from!"usecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_748))); |
|---|
| | 6322 | assertPred!"=="(st - TickDuration.from!"usecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_608))); |
|---|
| | 6323 | } |
|---|
| | 6324 | |
|---|
| | 6325 | static void TestST(in SysTime orig, long hnsecs, in SysTime expected, size_t line = __LINE__) |
|---|
| | 6326 | { |
|---|
| | 6327 | assertPred!"=="(orig + dur!"hnsecs"(hnsecs), expected, "", __FILE__, line); |
|---|
| | 6328 | } |
|---|
| | 6329 | |
|---|
| | 6330 | //Test A.D. |
|---|
| | 6331 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 0, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6332 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(275))); |
|---|
| | 6333 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 2, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(276))); |
|---|
| | 6334 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 10, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(284))); |
|---|
| | 6335 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 100, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(374))); |
|---|
| | 6336 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 725, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(999))); |
|---|
| | 6337 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 726, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1000))); |
|---|
| | 6338 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1274))); |
|---|
| | 6339 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1001, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1275))); |
|---|
| | 6340 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 2000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2274))); |
|---|
| | 6341 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_725, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(26_999))); |
|---|
| | 6342 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_726, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(27_000))); |
|---|
| | 6343 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_727, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(27_001))); |
|---|
| | 6344 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_766_725, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_766_999))); |
|---|
| | 6345 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_766_726, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_767_000))); |
|---|
| | 6346 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_000_000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_000_274))); |
|---|
| | 6347 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 60_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 39), FracSec.from!"hnsecs"(274))); |
|---|
| | 6348 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 3_600_000_000L, SysTime(DateTime(1999, 7, 6, 12, 36, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6349 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 600_000_000L, SysTime(DateTime(1999, 7, 6, 12, 31, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6350 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 36_000_000_000L, SysTime(DateTime(1999, 7, 6, 13, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6351 | |
|---|
| | 6352 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(273))); |
|---|
| | 6353 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -2, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(272))); |
|---|
| | 6354 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -10, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(264))); |
|---|
| | 6355 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -100, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(174))); |
|---|
| | 6356 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -274, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(0))); |
|---|
| | 6357 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -275, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6358 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1000, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_999_274))); |
|---|
| | 6359 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1001, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_999_273))); |
|---|
| | 6360 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -2000, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_998_274))); |
|---|
| | 6361 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -33_274, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_967_000))); |
|---|
| | 6362 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -33_275, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_966_999))); |
|---|
| | 6363 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_833_274, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(8_167_000))); |
|---|
| | 6364 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_833_275, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(8_166_999))); |
|---|
| | 6365 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_000_000, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_000_274))); |
|---|
| | 6366 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -60_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 27), FracSec.from!"hnsecs"(274))); |
|---|
| | 6367 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -3_600_000_000L, SysTime(DateTime(1999, 7, 6, 12, 24, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6368 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -600_000_000L, SysTime(DateTime(1999, 7, 6, 12, 29, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6369 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -36_000_000_000L, SysTime(DateTime(1999, 7, 6, 11, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6370 | |
|---|
| | 6371 | //Test B.C. |
|---|
| | 6372 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 0, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6373 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(275))); |
|---|
| | 6374 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 2, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(276))); |
|---|
| | 6375 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 10, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(284))); |
|---|
| | 6376 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 100, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(374))); |
|---|
| | 6377 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 725, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(999))); |
|---|
| | 6378 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 726, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1000))); |
|---|
| | 6379 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1274))); |
|---|
| | 6380 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1001, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1275))); |
|---|
| | 6381 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 2000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2274))); |
|---|
| | 6382 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_725, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(26_999))); |
|---|
| | 6383 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_726, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(27_000))); |
|---|
| | 6384 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_727, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(27_001))); |
|---|
| | 6385 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_766_725, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_766_999))); |
|---|
| | 6386 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_766_726, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_767_000))); |
|---|
| | 6387 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_000_000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_000_274))); |
|---|
| | 6388 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 60_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 39), FracSec.from!"hnsecs"(274))); |
|---|
| | 6389 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 3_600_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 36, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6390 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 600_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 31, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6391 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 36_000_000_000L, SysTime(DateTime(-1999, 7, 6, 13, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6392 | |
|---|
| | 6393 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(273))); |
|---|
| | 6394 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -2, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(272))); |
|---|
| | 6395 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -10, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(264))); |
|---|
| | 6396 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -100, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(174))); |
|---|
| | 6397 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -274, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(0))); |
|---|
| | 6398 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -275, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6399 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1000, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_999_274))); |
|---|
| | 6400 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1001, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_999_273))); |
|---|
| | 6401 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -2000, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_998_274))); |
|---|
| | 6402 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -33_274, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_967_000))); |
|---|
| | 6403 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -33_275, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_966_999))); |
|---|
| | 6404 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_833_274, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(8_167_000))); |
|---|
| | 6405 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_833_275, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(8_166_999))); |
|---|
| | 6406 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_000_000, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_000_274))); |
|---|
| | 6407 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -60_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 27), FracSec.from!"hnsecs"(274))); |
|---|
| | 6408 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -3_600_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 24, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6409 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -600_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 29, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6410 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -36_000_000_000L, SysTime(DateTime(-1999, 7, 6, 11, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6411 | |
|---|
| | 6412 | //Test Both |
|---|
| | 6413 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 6414 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), 0, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 6415 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -1, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6416 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -2, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_998))); |
|---|
| | 6417 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -1000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_000))); |
|---|
| | 6418 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -2000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_998_000))); |
|---|
| | 6419 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -2555, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_997_445))); |
|---|
| | 6420 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -1_000_000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_000_000))); |
|---|
| | 6421 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -2_000_000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(8_000_000))); |
|---|
| | 6422 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -2_333_333, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(7_666_667))); |
|---|
| | 6423 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -10_000_000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0))); |
|---|
| | 6424 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -20_000_000, SysTime(DateTime(0, 12, 31, 23, 59, 58), FracSec.from!"hnsecs"(0))); |
|---|
| | 6425 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -20_888_888, SysTime(DateTime(0, 12, 31, 23, 59, 57), FracSec.from!"hnsecs"(9_111_112))); |
|---|
| | 6426 | |
|---|
| | 6427 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), -1, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_998))); |
|---|
| | 6428 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 0, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6429 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 6430 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 6431 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(999))); |
|---|
| | 6432 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1999))); |
|---|
| | 6433 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2555, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(2554))); |
|---|
| | 6434 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1_000_000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(999_999))); |
|---|
| | 6435 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2_000_000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1_999_999))); |
|---|
| | 6436 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2_333_333, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(2_333_332))); |
|---|
| | 6437 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 10_000_000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6438 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 20_000_000, SysTime(DateTime(1, 1, 1, 0, 0, 1), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6439 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 20_888_888, SysTime(DateTime(1, 1, 1, 0, 0, 2), FracSec.from!"hnsecs"(888_887))); |
|---|
| | 6440 | |
|---|
| | 6441 | auto duration = dur!"seconds"(12); |
|---|
| | 6442 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6443 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6444 | static assert(__traits(compiles, cst + duration)); |
|---|
| | 6445 | //static assert(__traits(compiles, ist + duration)); |
|---|
| | 6446 | static assert(__traits(compiles, cst - duration)); |
|---|
| | 6447 | //static assert(__traits(compiles, ist - duration)); |
|---|
| | 6448 | } |
|---|
| | 6449 | } |
|---|
| | 6450 | |
|---|
| | 6451 | |
|---|
| | 6452 | /++ |
|---|
| | 6453 | Gives the result of adding or subtracting a duration from this SysTime, |
|---|
| | 6454 | as well as assigning the result to this SysTime. |
|---|
| | 6455 | |
|---|
| | 6456 | The legal types of arithmetic for SysTime using this operator are |
|---|
| | 6457 | |
|---|
| | 6458 | $(TABLE |
|---|
| | 6459 | $(TR $(TD SysTime) $(TD +) $(TD duration) $(TD -->) $(TD SysTime)) |
|---|
| | 6460 | $(TR $(TD SysTime) $(TD -) $(TD duration) $(TD -->) $(TD SysTime)) |
|---|
| | 6461 | ) |
|---|
| | 6462 | |
|---|
| | 6463 | Params: |
|---|
| | 6464 | duration = The duration to add to or subtract from this SysTime. |
|---|
| | 6465 | +/ |
|---|
| | 6466 | /+ref+/ SysTime opOpAssign(string op, D)(in D duration) pure nothrow |
|---|
| | 6467 | if((op == "+" || op == "-") && |
|---|
| | 6468 | (is(Unqual!D == Duration) || |
|---|
| | 6469 | is(Unqual!D == TickDuration))) |
|---|
| | 6470 | { |
|---|
| | 6471 | static if(is(Unqual!D == Duration)) |
|---|
| | 6472 | auto hnsecs = duration.total!"hnsecs"; |
|---|
| | 6473 | else static if(is(Unqual!D == TickDuration)) |
|---|
| | 6474 | auto hnsecs = duration.hnsecs; |
|---|
| | 6475 | |
|---|
| | 6476 | //Ideally, this would just be |
|---|
| | 6477 | //_stdTime += unaryFun!(op ~ "a")(hnsecs); |
|---|
| | 6478 | //But there isn't currently a pure version of unaryFun!(). |
|---|
| | 6479 | |
|---|
| | 6480 | static if(op == "+") |
|---|
| | 6481 | immutable signedHNSecs = hnsecs; |
|---|
| | 6482 | else static if(op == "-") |
|---|
| | 6483 | immutable signedHNSecs = -hnsecs; |
|---|
| | 6484 | else |
|---|
| | 6485 | static assert(0); |
|---|
| | 6486 | |
|---|
| | 6487 | _stdTime += signedHNSecs; |
|---|
| | 6488 | |
|---|
| | 6489 | return this; |
|---|
| | 6490 | } |
|---|
| | 6491 | |
|---|
| | 6492 | unittest |
|---|
| | 6493 | { |
|---|
| | 6494 | version(testStdDateTime) |
|---|
| | 6495 | { |
|---|
| | 6496 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"weeks"(7), SysTime(DateTime(1999, 8, 24, 12, 30, 33))); |
|---|
| | 6497 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"weeks"(-7), SysTime(DateTime(1999, 5, 18, 12, 30, 33))); |
|---|
| | 6498 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"days"(7), SysTime(DateTime(1999, 7, 13, 12, 30, 33))); |
|---|
| | 6499 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"days"(-7), SysTime(DateTime(1999, 6, 29, 12, 30, 33))); |
|---|
| | 6500 | |
|---|
| | 6501 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"hours"(7), SysTime(DateTime(1999, 7, 6, 19, 30, 33))); |
|---|
| | 6502 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"hours"(-7), SysTime(DateTime(1999, 7, 6, 5, 30, 33))); |
|---|
| | 6503 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"minutes"(7), SysTime(DateTime(1999, 7, 6, 12, 37, 33))); |
|---|
| | 6504 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"minutes"(-7), SysTime(DateTime(1999, 7, 6, 12, 23, 33))); |
|---|
| | 6505 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"seconds"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 40))); |
|---|
| | 6506 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"seconds"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 26))); |
|---|
| | 6507 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"msecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(7))); |
|---|
| | 6508 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"msecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"msecs"(993))); |
|---|
| | 6509 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"usecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7))); |
|---|
| | 6510 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"usecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"usecs"(999_993))); |
|---|
| | 6511 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"hnsecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(7))); |
|---|
| | 6512 | assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"hnsecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_999_993))); |
|---|
| | 6513 | |
|---|
| | 6514 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"weeks"(-7), SysTime(DateTime(1999, 8, 24, 12, 30, 33))); |
|---|
| | 6515 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"weeks"(7), SysTime(DateTime(1999, 5, 18, 12, 30, 33))); |
|---|
| | 6516 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"days"(-7), SysTime(DateTime(1999, 7, 13, 12, 30, 33))); |
|---|
| | 6517 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"days"(7), SysTime(DateTime(1999, 6, 29, 12, 30, 33))); |
|---|
| | 6518 | |
|---|
| | 6519 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"hours"(-7), SysTime(DateTime(1999, 7, 6, 19, 30, 33))); |
|---|
| | 6520 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"hours"(7), SysTime(DateTime(1999, 7, 6, 5, 30, 33))); |
|---|
| | 6521 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"minutes"(-7), SysTime(DateTime(1999, 7, 6, 12, 37, 33))); |
|---|
| | 6522 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"minutes"(7), SysTime(DateTime(1999, 7, 6, 12, 23, 33))); |
|---|
| | 6523 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"seconds"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 40))); |
|---|
| | 6524 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"seconds"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 26))); |
|---|
| | 6525 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"msecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(7))); |
|---|
| | 6526 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"msecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"msecs"(993))); |
|---|
| | 6527 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"usecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7))); |
|---|
| | 6528 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"usecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"usecs"(999_993))); |
|---|
| | 6529 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"hnsecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(7))); |
|---|
| | 6530 | assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"hnsecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_999_993))); |
|---|
| | 6531 | |
|---|
| | 6532 | static void TestST(SysTime orig, long hnsecs, in SysTime expected, size_t line = __LINE__) |
|---|
| | 6533 | { |
|---|
| | 6534 | orig += dur!"hnsecs"(hnsecs); |
|---|
| | 6535 | assertPred!"=="(orig, expected, "", __FILE__, line); |
|---|
| | 6536 | } |
|---|
| | 6537 | |
|---|
| | 6538 | //Test A.D. |
|---|
| | 6539 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 0, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6540 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(275))); |
|---|
| | 6541 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 2, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(276))); |
|---|
| | 6542 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 10, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(284))); |
|---|
| | 6543 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 100, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(374))); |
|---|
| | 6544 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 725, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(999))); |
|---|
| | 6545 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 726, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1000))); |
|---|
| | 6546 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1274))); |
|---|
| | 6547 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1001, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1275))); |
|---|
| | 6548 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 2000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2274))); |
|---|
| | 6549 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_725, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(26_999))); |
|---|
| | 6550 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_726, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(27_000))); |
|---|
| | 6551 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_727, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(27_001))); |
|---|
| | 6552 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_766_725, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_766_999))); |
|---|
| | 6553 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_766_726, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_767_000))); |
|---|
| | 6554 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_000_000, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_000_274))); |
|---|
| | 6555 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 60_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 39), FracSec.from!"hnsecs"(274))); |
|---|
| | 6556 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 3_600_000_000L, SysTime(DateTime(1999, 7, 6, 12, 36, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6557 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 600_000_000L, SysTime(DateTime(1999, 7, 6, 12, 31, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6558 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 36_000_000_000L, SysTime(DateTime(1999, 7, 6, 13, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6559 | |
|---|
| | 6560 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(273))); |
|---|
| | 6561 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -2, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(272))); |
|---|
| | 6562 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -10, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(264))); |
|---|
| | 6563 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -100, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(174))); |
|---|
| | 6564 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -274, SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(0))); |
|---|
| | 6565 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -275, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6566 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1000, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_999_274))); |
|---|
| | 6567 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1001, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_999_273))); |
|---|
| | 6568 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -2000, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_998_274))); |
|---|
| | 6569 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -33_274, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_967_000))); |
|---|
| | 6570 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -33_275, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_966_999))); |
|---|
| | 6571 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_833_274, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(8_167_000))); |
|---|
| | 6572 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_833_275, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(8_166_999))); |
|---|
| | 6573 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_000_000, SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_000_274))); |
|---|
| | 6574 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -60_000_000L, SysTime(DateTime(1999, 7, 6, 12, 30, 27), FracSec.from!"hnsecs"(274))); |
|---|
| | 6575 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -3_600_000_000L, SysTime(DateTime(1999, 7, 6, 12, 24, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6576 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -600_000_000L, SysTime(DateTime(1999, 7, 6, 12, 29, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6577 | TestST(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -36_000_000_000L, SysTime(DateTime(1999, 7, 6, 11, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6578 | |
|---|
| | 6579 | //Test B.C. |
|---|
| | 6580 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 0, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6581 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(275))); |
|---|
| | 6582 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 2, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(276))); |
|---|
| | 6583 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 10, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(284))); |
|---|
| | 6584 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 100, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(374))); |
|---|
| | 6585 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 725, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(999))); |
|---|
| | 6586 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 726, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1000))); |
|---|
| | 6587 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1274))); |
|---|
| | 6588 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1001, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1275))); |
|---|
| | 6589 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 2000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2274))); |
|---|
| | 6590 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_725, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(26_999))); |
|---|
| | 6591 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_726, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(27_000))); |
|---|
| | 6592 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 26_727, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(27_001))); |
|---|
| | 6593 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_766_725, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_766_999))); |
|---|
| | 6594 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_766_726, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_767_000))); |
|---|
| | 6595 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 1_000_000, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_000_274))); |
|---|
| | 6596 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 60_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 39), FracSec.from!"hnsecs"(274))); |
|---|
| | 6597 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 3_600_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 36, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6598 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 600_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 31, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6599 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), 36_000_000_000L, SysTime(DateTime(-1999, 7, 6, 13, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6600 | |
|---|
| | 6601 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(273))); |
|---|
| | 6602 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -2, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(272))); |
|---|
| | 6603 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -10, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(264))); |
|---|
| | 6604 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -100, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(174))); |
|---|
| | 6605 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -274, SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(0))); |
|---|
| | 6606 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -275, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6607 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1000, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_999_274))); |
|---|
| | 6608 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1001, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_999_273))); |
|---|
| | 6609 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -2000, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_998_274))); |
|---|
| | 6610 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -33_274, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_967_000))); |
|---|
| | 6611 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -33_275, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_966_999))); |
|---|
| | 6612 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_833_274, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(8_167_000))); |
|---|
| | 6613 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_833_275, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(8_166_999))); |
|---|
| | 6614 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -1_000_000, SysTime(DateTime(-1999, 7, 6, 12, 30, 32), FracSec.from!"hnsecs"(9_000_274))); |
|---|
| | 6615 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -60_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 30, 27), FracSec.from!"hnsecs"(274))); |
|---|
| | 6616 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -3_600_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 24, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6617 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -600_000_000L, SysTime(DateTime(-1999, 7, 6, 12, 29, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6618 | TestST(SysTime(DateTime(-1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(274)), -36_000_000_000L, SysTime(DateTime(-1999, 7, 6, 11, 30, 33), FracSec.from!"hnsecs"(274))); |
|---|
| | 6619 | |
|---|
| | 6620 | //Test Both |
|---|
| | 6621 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 6622 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), 0, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 6623 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -1, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6624 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -2, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_998))); |
|---|
| | 6625 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -1000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_000))); |
|---|
| | 6626 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -2000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_998_000))); |
|---|
| | 6627 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -2555, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_997_445))); |
|---|
| | 6628 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -1_000_000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_000_000))); |
|---|
| | 6629 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -2_000_000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(8_000_000))); |
|---|
| | 6630 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -2_333_333, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(7_666_667))); |
|---|
| | 6631 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -10_000_000, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0))); |
|---|
| | 6632 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -20_000_000, SysTime(DateTime(0, 12, 31, 23, 59, 58), FracSec.from!"hnsecs"(0))); |
|---|
| | 6633 | TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), -20_888_888, SysTime(DateTime(0, 12, 31, 23, 59, 57), FracSec.from!"hnsecs"(9_111_112))); |
|---|
| | 6634 | |
|---|
| | 6635 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), -1, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_998))); |
|---|
| | 6636 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 0, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6637 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 6638 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 6639 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(999))); |
|---|
| | 6640 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1999))); |
|---|
| | 6641 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2555, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(2554))); |
|---|
| | 6642 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1_000_000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(999_999))); |
|---|
| | 6643 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2_000_000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1_999_999))); |
|---|
| | 6644 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 2_333_333, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(2_333_332))); |
|---|
| | 6645 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 10_000_000, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6646 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 20_000_000, SysTime(DateTime(1, 1, 1, 0, 0, 1), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 6647 | TestST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 20_888_888, SysTime(DateTime(1, 1, 1, 0, 0, 2), FracSec.from!"hnsecs"(888_887))); |
|---|
| | 6648 | |
|---|
| | 6649 | auto duration = dur!"seconds"(12); |
|---|
| | 6650 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6651 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6652 | static assert(!__traits(compiles, cst += duration)); |
|---|
| | 6653 | //static assert(!__traits(compiles, ist += duration)); |
|---|
| | 6654 | static assert(!__traits(compiles, cst -= duration)); |
|---|
| | 6655 | //static assert(!__traits(compiles, ist -= duration)); |
|---|
| | 6656 | } |
|---|
| | 6657 | } |
|---|
| | 6658 | |
|---|
| | 6659 | |
|---|
| | 6660 | /++ |
|---|
| | 6661 | Gives the difference between two SysTimes. |
|---|
| | 6662 | |
|---|
| | 6663 | The legal types of arithmetic for SysTime using this operator are |
|---|
| | 6664 | |
|---|
| | 6665 | $(TABLE |
|---|
| | 6666 | $(TR $(TD SysTime) $(TD -) $(TD SysTime) $(TD -->) $(TD duration)) |
|---|
| | 6667 | ) |
|---|
| | 6668 | +/ |
|---|
| | 6669 | Duration opBinary(string op)(in SysTime rhs) const pure nothrow |
|---|
| | 6670 | if(op == "-") |
|---|
| | 6671 | { |
|---|
| | 6672 | return dur!"hnsecs"(_stdTime - rhs._stdTime); |
|---|
| | 6673 | } |
|---|
| | 6674 | |
|---|
| | 6675 | unittest |
|---|
| | 6676 | { |
|---|
| | 6677 | version(testStdDateTime) |
|---|
| | 6678 | { |
|---|
| | 6679 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1998, 7, 6, 12, 30, 33)), |
|---|
| | 6680 | dur!"seconds"(31_536_000)); |
|---|
| | 6681 | assertPred!"=="(SysTime(DateTime(1998, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)), |
|---|
| | 6682 | dur!"seconds"(-31_536_000)); |
|---|
| | 6683 | |
|---|
| | 6684 | assertPred!"=="(SysTime(DateTime(1999, 8, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)), |
|---|
| | 6685 | dur!"seconds"(26_78_400)); |
|---|
| | 6686 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 8, 6, 12, 30, 33)), |
|---|
| | 6687 | dur!"seconds"(-26_78_400)); |
|---|
| | 6688 | |
|---|
| | 6689 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 5, 12, 30, 33)), |
|---|
| | 6690 | dur!"seconds"(86_400)); |
|---|
| | 6691 | assertPred!"=="(SysTime(DateTime(1999, 7, 5, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)), |
|---|
| | 6692 | dur!"seconds"(-86_400)); |
|---|
| | 6693 | |
|---|
| | 6694 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 11, 30, 33)), |
|---|
| | 6695 | dur!"seconds"(3600)); |
|---|
| | 6696 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 11, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)), |
|---|
| | 6697 | dur!"seconds"(-3600)); |
|---|
| | 6698 | |
|---|
| | 6699 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 31, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)), |
|---|
| | 6700 | dur!"seconds"(60)); |
|---|
| | 6701 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 31, 33)), |
|---|
| | 6702 | dur!"seconds"(-60)); |
|---|
| | 6703 | |
|---|
| | 6704 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 34)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)), |
|---|
| | 6705 | dur!"seconds"(1)); |
|---|
| | 6706 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 34)), |
|---|
| | 6707 | dur!"seconds"(-1)); |
|---|
| | 6708 | |
|---|
| | 6709 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(532)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)), |
|---|
| | 6710 | dur!"msecs"(532)); |
|---|
| | 6711 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(532)), |
|---|
| | 6712 | dur!"msecs"(-532)); |
|---|
| | 6713 | |
|---|
| | 6714 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(333_347)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)), |
|---|
| | 6715 | dur!"usecs"(333_347)); |
|---|
| | 6716 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(333_347)), |
|---|
| | 6717 | dur!"usecs"(-333_347)); |
|---|
| | 6718 | |
|---|
| | 6719 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_234_567)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)), |
|---|
| | 6720 | dur!"hnsecs"(1_234_567)); |
|---|
| | 6721 | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_234_567)), |
|---|
| | 6722 | dur!"hnsecs"(-1_234_567)); |
|---|
| | 6723 | |
|---|
| | 6724 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 12, 30, 33)) - SysTime(DateTime(1, 1, 1, 0, 0, 0)), dur!"seconds"(45033)); |
|---|
| | 6725 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0)) - SysTime(DateTime(1, 1, 1, 12, 30, 33)), dur!"seconds"(-45033)); |
|---|
| | 6726 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 12, 30, 33)) - SysTime(DateTime(1, 1, 1, 0, 0, 0)), dur!"seconds"(-41367)); |
|---|
| | 6727 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0)) - SysTime(DateTime(0, 12, 31, 12, 30, 33)), dur!"seconds"(41367)); |
|---|
| | 6728 | |
|---|
| | 6729 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0)) - SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), |
|---|
| | 6730 | dur!"hnsecs"(1)); |
|---|
| | 6731 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)) - SysTime(DateTime(1, 1, 1, 0, 0, 0)), |
|---|
| | 6732 | dur!"hnsecs"(-1)); |
|---|
| | 6733 | |
|---|
| | 6734 | auto tz = TimeZone.getTimeZone("America/Los_Angeles"); |
|---|
| | 6735 | |
|---|
| | 6736 | assertPred!"=="(SysTime(DateTime(2011, 1, 13, 8, 17, 2), FracSec.from!"msecs"(296), tz) - |
|---|
| | 6737 | SysTime(DateTime(2011, 1, 13, 8, 17, 2), FracSec.from!"msecs"(296), tz), |
|---|
| | 6738 | dur!"hnsecs"(0)); |
|---|
| | 6739 | |
|---|
| | 6740 | assertPred!"=="(SysTime(DateTime(2011, 1, 13, 8, 17, 2), FracSec.from!"msecs"(296), tz) - |
|---|
| | 6741 | SysTime(DateTime(2011, 1, 13, 8, 17, 2), FracSec.from!"msecs"(296), UTC()), |
|---|
| | 6742 | dur!"hours"(8)); |
|---|
| | 6743 | |
|---|
| | 6744 | assertPred!"=="(SysTime(DateTime(2011, 1, 13, 8, 17, 2), FracSec.from!"msecs"(296), UTC()) - |
|---|
| | 6745 | SysTime(DateTime(2011, 1, 13, 8, 17, 2), FracSec.from!"msecs"(296), tz), |
|---|
| | 6746 | dur!"hours"(-8)); |
|---|
| | 6747 | |
|---|
| | 6748 | auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6749 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6750 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6751 | static assert(__traits(compiles, st - st)); |
|---|
| | 6752 | static assert(__traits(compiles, cst - st)); |
|---|
| | 6753 | //static assert(__traits(compiles, ist - st)); |
|---|
| | 6754 | |
|---|
| | 6755 | static assert(__traits(compiles, st - cst)); |
|---|
| | 6756 | static assert(__traits(compiles, cst - cst)); |
|---|
| | 6757 | //static assert(__traits(compiles, ist - cst)); |
|---|
| | 6758 | |
|---|
| | 6759 | //static assert(__traits(compiles, st - ist)); |
|---|
| | 6760 | //static assert(__traits(compiles, cst - ist)); |
|---|
| | 6761 | //static assert(__traits(compiles, ist - ist)); |
|---|
| | 6762 | } |
|---|
| | 6763 | } |
|---|
| | 6764 | |
|---|
| | 6765 | |
|---|
| | 6766 | /++ |
|---|
| | 6767 | Returns the difference between the two SysTimes in months. |
|---|
| | 6768 | |
|---|
| | 6769 | You can get the difference in years by subtracting the year property |
|---|
| | 6770 | of two SysTimes, and you can get the difference in days or weeks by |
|---|
| | 6771 | subtracting the SysTimes themselves and using the Duration that results, |
|---|
| | 6772 | but because you cannot convert between months and smaller units without |
|---|
| | 6773 | a specific date (which the Duration from the subtraction of two SysTimes |
|---|
| | 6774 | won't have), you cannot get the difference in months without doing some |
|---|
| | 6775 | math using both the year and month properties, so this is a convenience |
|---|
| | 6776 | function for getting the difference in months. |
|---|
| | 6777 | |
|---|
| | 6778 | Note that the number of days in the months or how far into the month either |
|---|
| | 6779 | date is is irrelevant. It is the difference in the month property combined |
|---|
| | 6780 | with the difference in years * 12. So, for instance, December 31st and |
|---|
| | 6781 | January 1st are one month apart just as December 1st and January 31st are |
|---|
| | 6782 | one month apart. |
|---|
| | 6783 | |
|---|
| | 6784 | Params: |
|---|
| | 6785 | rhs = The SysTime to subtract from this one. |
|---|
| | 6786 | |
|---|
| | 6787 | Examples: |
|---|
| | 6788 | -------------------- |
|---|
| | 6789 | assert(SysTime(Date(1999, 2, 1)).diffMonths(SysTime(Date(1999, 1, 31))) == 1); |
|---|
| | 6790 | assert(SysTime(Date(1999, 1, 31)).diffMonths(SysTime(Date(1999, 2, 1))) == -1); |
|---|
| | 6791 | assert(SysTime(Date(1999, 3, 1)).diffMonths(SysTime(Date(1999, 1, 1))) == 2); |
|---|
| | 6792 | assert(SysTime(Date(1999, 1, 1)).diffMonths(SysTime(Date(1999, 3, 31))) == -2); |
|---|
| | 6793 | -------------------- |
|---|
| | 6794 | +/ |
|---|
| | 6795 | int diffMonths(in SysTime rhs) const nothrow |
|---|
| | 6796 | { |
|---|
| | 6797 | return (cast(Date)this).diffMonths(cast(Date)rhs); |
|---|
| | 6798 | } |
|---|
| | 6799 | |
|---|
| | 6800 | unittest |
|---|
| | 6801 | { |
|---|
| | 6802 | version(testStdDateTime) |
|---|
| | 6803 | { |
|---|
| | 6804 | auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6805 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6806 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6807 | static assert(__traits(compiles, st.diffMonths(st))); |
|---|
| | 6808 | static assert(__traits(compiles, cst.diffMonths(st))); |
|---|
| | 6809 | //static assert(__traits(compiles, ist.diffMonths(st))); |
|---|
| | 6810 | |
|---|
| | 6811 | static assert(__traits(compiles, st.diffMonths(cst))); |
|---|
| | 6812 | static assert(__traits(compiles, cst.diffMonths(cst))); |
|---|
| | 6813 | //static assert(__traits(compiles, ist.diffMonths(cst))); |
|---|
| | 6814 | |
|---|
| | 6815 | //static assert(__traits(compiles, st.diffMonths(ist))); |
|---|
| | 6816 | //static assert(__traits(compiles, cst.diffMonths(ist))); |
|---|
| | 6817 | //static assert(__traits(compiles, ist.diffMonths(ist))); |
|---|
| | 6818 | |
|---|
| | 6819 | //Verify Examples. |
|---|
| | 6820 | assert(SysTime(Date(1999, 2, 1)).diffMonths(SysTime(Date(1999, 1, 31))) == 1); |
|---|
| | 6821 | assert(SysTime(Date(1999, 1, 31)).diffMonths(SysTime(Date(1999, 2, 1))) == -1); |
|---|
| | 6822 | assert(SysTime(Date(1999, 3, 1)).diffMonths(SysTime(Date(1999, 1, 1))) == 2); |
|---|
| | 6823 | assert(SysTime(Date(1999, 1, 1)).diffMonths(SysTime(Date(1999, 3, 31))) == -2); |
|---|
| | 6824 | } |
|---|
| | 6825 | } |
|---|
| | 6826 | |
|---|
| | 6827 | |
|---|
| | 6828 | /++ |
|---|
| | 6829 | Whether this SysTime is in a leap year. |
|---|
| | 6830 | +/ |
|---|
| | 6831 | @property bool isLeapYear() const nothrow |
|---|
| | 6832 | { |
|---|
| | 6833 | return (cast(Date)this).isLeapYear; |
|---|
| | 6834 | } |
|---|
| | 6835 | |
|---|
| | 6836 | unittest |
|---|
| | 6837 | { |
|---|
| | 6838 | version(testStdDateTime) |
|---|
| | 6839 | { |
|---|
| | 6840 | auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6841 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6842 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6843 | static assert(__traits(compiles, st.isLeapYear)); |
|---|
| | 6844 | static assert(__traits(compiles, cst.isLeapYear)); |
|---|
| | 6845 | //static assert(__traits(compiles, ist.isLeapYear)); |
|---|
| | 6846 | } |
|---|
| | 6847 | } |
|---|
| | 6848 | |
|---|
| | 6849 | |
|---|
| | 6850 | /++ |
|---|
| | 6851 | Day of the week this SysTime is on. |
|---|
| | 6852 | +/ |
|---|
| | 6853 | @property DayOfWeek dayOfWeek() const nothrow |
|---|
| | 6854 | { |
|---|
| | 6855 | return getDayOfWeek(dayOfGregorianCal); |
|---|
| | 6856 | } |
|---|
| | 6857 | |
|---|
| | 6858 | unittest |
|---|
| | 6859 | { |
|---|
| | 6860 | version(testStdDateTime) |
|---|
| | 6861 | { |
|---|
| | 6862 | auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6863 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6864 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6865 | static assert(__traits(compiles, st.dayOfWeek)); |
|---|
| | 6866 | static assert(__traits(compiles, cst.dayOfWeek)); |
|---|
| | 6867 | //static assert(__traits(compiles, ist.dayOfWeek)); |
|---|
| | 6868 | } |
|---|
| | 6869 | } |
|---|
| | 6870 | |
|---|
| | 6871 | |
|---|
| | 6872 | /++ |
|---|
| | 6873 | Day of the year this SysTime is on. |
|---|
| | 6874 | |
|---|
| | 6875 | Examples: |
|---|
| | 6876 | -------------------- |
|---|
| | 6877 | assert(SysTime(DateTime(1999, 1, 1, 12, 22, 7)).dayOfYear == 1); |
|---|
| | 6878 | assert(SysTime(DateTime(1999, 12, 31, 7, 2, 59)).dayOfYear == 365); |
|---|
| | 6879 | assert(SysTime(DateTime(2000, 12, 31, 21, 20, 0)).dayOfYear == 366); |
|---|
| | 6880 | -------------------- |
|---|
| | 6881 | +/ |
|---|
| | 6882 | @property ushort dayOfYear() const nothrow |
|---|
| | 6883 | { |
|---|
| | 6884 | return (cast(Date)this).dayOfYear; |
|---|
| | 6885 | } |
|---|
| | 6886 | |
|---|
| | 6887 | unittest |
|---|
| | 6888 | { |
|---|
| | 6889 | version(testStdDateTime) |
|---|
| | 6890 | { |
|---|
| | 6891 | auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6892 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6893 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6894 | static assert(__traits(compiles, st.dayOfYear)); |
|---|
| | 6895 | static assert(__traits(compiles, cst.dayOfYear)); |
|---|
| | 6896 | //static assert(__traits(compiles, ist.dayOfYear)); |
|---|
| | 6897 | |
|---|
| | 6898 | //Verify Examples. |
|---|
| | 6899 | assert(SysTime(DateTime(1999, 1, 1, 12, 22, 7)).dayOfYear == 1); |
|---|
| | 6900 | assert(SysTime(DateTime(1999, 12, 31, 7, 2, 59)).dayOfYear == 365); |
|---|
| | 6901 | assert(SysTime(DateTime(2000, 12, 31, 21, 20, 0)).dayOfYear == 366); |
|---|
| | 6902 | } |
|---|
| | 6903 | } |
|---|
| | 6904 | |
|---|
| | 6905 | |
|---|
| | 6906 | /++ |
|---|
| | 6907 | Day of the year. |
|---|
| | 6908 | |
|---|
| | 6909 | Params: |
|---|
| | 6910 | day = The day of the year to set which day of the year this SysTime is on. |
|---|
| | 6911 | +/ |
|---|
| | 6912 | @property void dayOfYear(int day) |
|---|
| | 6913 | { |
|---|
| | 6914 | immutable hnsecs = adjTime; |
|---|
| | 6915 | immutable days = convert!("hnsecs", "days")(hnsecs); |
|---|
| | 6916 | immutable theRest = hnsecs - convert!("days", "hnsecs")(days); |
|---|
| | 6917 | |
|---|
| | 6918 | auto date = Date(cast(int)days); |
|---|
| | 6919 | date.dayOfYear = day; |
|---|
| | 6920 | |
|---|
| | 6921 | immutable newDaysHNSecs = convert!("days", "hnsecs")(date.dayOfGregorianCal - 1); |
|---|
| | 6922 | |
|---|
| | 6923 | adjTime = newDaysHNSecs + theRest; |
|---|
| | 6924 | } |
|---|
| | 6925 | |
|---|
| | 6926 | unittest |
|---|
| | 6927 | { |
|---|
| | 6928 | version(testStdDateTime) |
|---|
| | 6929 | { |
|---|
| | 6930 | auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6931 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6932 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 6933 | static assert(__traits(compiles, st.dayOfYear = 12)); |
|---|
| | 6934 | static assert(!__traits(compiles, cst.dayOfYear = 12)); |
|---|
| | 6935 | //static assert(!__traits(compiles, ist.dayOfYear = 12)); |
|---|
| | 6936 | } |
|---|
| | 6937 | } |
|---|
| | 6938 | |
|---|
| | 6939 | |
|---|
| | 6940 | /++ |
|---|
| | 6941 | The Xth day of the Gregorian Calendar that this SysTime is on. |
|---|
| | 6942 | |
|---|
| | 6943 | Examples: |
|---|
| | 6944 | -------------------- |
|---|
| | 6945 | assert(SysTime(DateTime(1, 1, 1, 0, 0, 0)).dayOfGregorianCal == 1); |
|---|
| | 6946 | assert(SysTime(DateTime(1, 12, 31, 23, 59, 59)).dayOfGregorianCal == 365); |
|---|
| | 6947 | assert(SysTime(DateTime(2, 1, 1, 2, 2, 2)).dayOfGregorianCal == 366); |
|---|
| | 6948 | |
|---|
| | 6949 | assert(SysTime(DateTime(0, 12, 31, 7, 7, 7)).dayOfGregorianCal == 0); |
|---|
| | 6950 | assert(SysTime(DateTime(0, 1, 1, 19, 30, 0)).dayOfGregorianCal == -365); |
|---|
| | 6951 | assert(SysTime(DateTime(-1, 12, 31, 4, 7, 0)).dayOfGregorianCal == -366); |
|---|
| | 6952 | |
|---|
| | 6953 | assert(SysTime(DateTime(2000, 1, 1, 9, 30, 20)).dayOfGregorianCal == 730_120); |
|---|
| | 6954 | assert(SysTime(DateTime(2010, 12, 31, 15, 45, 50)).dayOfGregorianCal == 734_137); |
|---|
| | 6955 | -------------------- |
|---|
| | 6956 | +/ |
|---|
| | 6957 | @property int dayOfGregorianCal() const nothrow |
|---|
| | 6958 | { |
|---|
| | 6959 | immutable adjustedTime = adjTime; |
|---|
| | 6960 | |
|---|
| | 6961 | //We have to add one because 0 would be midnight, January 1st, 1 A.D., which would be |
|---|
| | 6962 | //the 1st day of the Gregorian Calendar, not the 0th. So, simply casting to days |
|---|
| | 6963 | //is one day off. |
|---|
| | 6964 | if(adjustedTime > 0) |
|---|
| | 6965 | return cast(int)getUnitsFromHNSecs!"days"(adjustedTime) + 1; |
|---|
| | 6966 | |
|---|
| | 6967 | auto hnsecs = adjustedTime; |
|---|
| | 6968 | immutable days = cast(int)splitUnitsFromHNSecs!"days"(hnsecs); |
|---|
| | 6969 | |
|---|
| | 6970 | return hnsecs == 0 ? days + 1 : days; |
|---|
| | 6971 | } |
|---|
| | 6972 | |
|---|
| | 6973 | unittest |
|---|
| | 6974 | { |
|---|
| | 6975 | version(testStdDateTime) |
|---|
| | 6976 | { |
|---|
| | 6977 | //Test A.D. |
|---|
| | 6978 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal, 1); |
|---|
| | 6979 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)).dayOfGregorianCal, 1); |
|---|
| | 6980 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal, 1); |
|---|
| | 6981 | |
|---|
| | 6982 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 1); |
|---|
| | 6983 | assertPred!"=="(SysTime(DateTime(1, 1, 2, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 2); |
|---|
| | 6984 | assertPred!"=="(SysTime(DateTime(1, 2, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 32); |
|---|
| | 6985 | assertPred!"=="(SysTime(DateTime(2, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 366); |
|---|
| | 6986 | assertPred!"=="(SysTime(DateTime(3, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 731); |
|---|
| | 6987 | assertPred!"=="(SysTime(DateTime(4, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 1096); |
|---|
| | 6988 | assertPred!"=="(SysTime(DateTime(5, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 1462); |
|---|
| | 6989 | assertPred!"=="(SysTime(DateTime(50, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 17_898); |
|---|
| | 6990 | assertPred!"=="(SysTime(DateTime(97, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 35_065); |
|---|
| | 6991 | assertPred!"=="(SysTime(DateTime(100, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 36_160); |
|---|
| | 6992 | assertPred!"=="(SysTime(DateTime(101, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 36_525); |
|---|
| | 6993 | assertPred!"=="(SysTime(DateTime(105, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 37_986); |
|---|
| | 6994 | assertPred!"=="(SysTime(DateTime(200, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 72_684); |
|---|
| | 6995 | assertPred!"=="(SysTime(DateTime(201, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 73_049); |
|---|
| | 6996 | assertPred!"=="(SysTime(DateTime(300, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 109_208); |
|---|
| | 6997 | assertPred!"=="(SysTime(DateTime(301, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 109_573); |
|---|
| | 6998 | assertPred!"=="(SysTime(DateTime(400, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 145_732); |
|---|
| | 6999 | assertPred!"=="(SysTime(DateTime(401, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 146_098); |
|---|
| | 7000 | assertPred!"=="(SysTime(DateTime(500, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 182_257); |
|---|
| | 7001 | assertPred!"=="(SysTime(DateTime(501, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 182_622); |
|---|
| | 7002 | assertPred!"=="(SysTime(DateTime(1000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 364_878); |
|---|
| | 7003 | assertPred!"=="(SysTime(DateTime(1001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 365_243); |
|---|
| | 7004 | assertPred!"=="(SysTime(DateTime(1600, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 584_023); |
|---|
| | 7005 | assertPred!"=="(SysTime(DateTime(1601, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 584_389); |
|---|
| | 7006 | assertPred!"=="(SysTime(DateTime(1900, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 693_596); |
|---|
| | 7007 | assertPred!"=="(SysTime(DateTime(1901, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 693_961); |
|---|
| | 7008 | assertPred!"=="(SysTime(DateTime(1945, 11, 12, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 710_347); |
|---|
| | 7009 | assertPred!"=="(SysTime(DateTime(1999, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 729_755); |
|---|
| | 7010 | assertPred!"=="(SysTime(DateTime(2000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 730_120); |
|---|
| | 7011 | assertPred!"=="(SysTime(DateTime(2001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 730_486); |
|---|
| | 7012 | |
|---|
| | 7013 | assertPred!"=="(SysTime(DateTime(2010, 1, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_773); |
|---|
| | 7014 | assertPred!"=="(SysTime(DateTime(2010, 1, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_803); |
|---|
| | 7015 | assertPred!"=="(SysTime(DateTime(2010, 2, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_804); |
|---|
| | 7016 | assertPred!"=="(SysTime(DateTime(2010, 2, 28, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_831); |
|---|
| | 7017 | assertPred!"=="(SysTime(DateTime(2010, 3, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_832); |
|---|
| | 7018 | assertPred!"=="(SysTime(DateTime(2010, 3, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_862); |
|---|
| | 7019 | assertPred!"=="(SysTime(DateTime(2010, 4, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_863); |
|---|
| | 7020 | assertPred!"=="(SysTime(DateTime(2010, 4, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_892); |
|---|
| | 7021 | assertPred!"=="(SysTime(DateTime(2010, 5, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_893); |
|---|
| | 7022 | assertPred!"=="(SysTime(DateTime(2010, 5, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_923); |
|---|
| | 7023 | assertPred!"=="(SysTime(DateTime(2010, 6, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_924); |
|---|
| | 7024 | assertPred!"=="(SysTime(DateTime(2010, 6, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_953); |
|---|
| | 7025 | assertPred!"=="(SysTime(DateTime(2010, 7, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_954); |
|---|
| | 7026 | assertPred!"=="(SysTime(DateTime(2010, 7, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_984); |
|---|
| | 7027 | assertPred!"=="(SysTime(DateTime(2010, 8, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_985); |
|---|
| | 7028 | assertPred!"=="(SysTime(DateTime(2010, 8, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_015); |
|---|
| | 7029 | assertPred!"=="(SysTime(DateTime(2010, 9, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_016); |
|---|
| | 7030 | assertPred!"=="(SysTime(DateTime(2010, 9, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_045); |
|---|
| | 7031 | assertPred!"=="(SysTime(DateTime(2010, 10, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_046); |
|---|
| | 7032 | assertPred!"=="(SysTime(DateTime(2010, 10, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_076); |
|---|
| | 7033 | assertPred!"=="(SysTime(DateTime(2010, 11, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_077); |
|---|
| | 7034 | assertPred!"=="(SysTime(DateTime(2010, 11, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_106); |
|---|
| | 7035 | assertPred!"=="(SysTime(DateTime(2010, 12, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_107); |
|---|
| | 7036 | assertPred!"=="(SysTime(DateTime(2010, 12, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_137); |
|---|
| | 7037 | |
|---|
| | 7038 | assertPred!"=="(SysTime(DateTime(2012, 2, 1, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, 734_534); |
|---|
| | 7039 | assertPred!"=="(SysTime(DateTime(2012, 2, 28, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, 734_561); |
|---|
| | 7040 | assertPred!"=="(SysTime(DateTime(2012, 2, 29, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, 734_562); |
|---|
| | 7041 | assertPred!"=="(SysTime(DateTime(2012, 3, 1, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, 734_563); |
|---|
| | 7042 | |
|---|
| | 7043 | //Test B.C. |
|---|
| | 7044 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal, 0); |
|---|
| | 7045 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_998)).dayOfGregorianCal, 0); |
|---|
| | 7046 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal, 0); |
|---|
| | 7047 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(1)).dayOfGregorianCal, 0); |
|---|
| | 7048 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal, 0); |
|---|
| | 7049 | |
|---|
| | 7050 | assertPred!"=="(SysTime(DateTime(-1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal, -366); |
|---|
| | 7051 | assertPred!"=="(SysTime(DateTime(-1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_998)).dayOfGregorianCal, -366); |
|---|
| | 7052 | assertPred!"=="(SysTime(DateTime(-1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal, -366); |
|---|
| | 7053 | assertPred!"=="(SysTime(DateTime(-1, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal, -366); |
|---|
| | 7054 | |
|---|
| | 7055 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 0); |
|---|
| | 7056 | assertPred!"=="(SysTime(DateTime(0, 12, 30, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -1); |
|---|
| | 7057 | assertPred!"=="(SysTime(DateTime(0, 12, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -30); |
|---|
| | 7058 | assertPred!"=="(SysTime(DateTime(0, 11, 30, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -31); |
|---|
| | 7059 | |
|---|
| | 7060 | assertPred!"=="(SysTime(DateTime(-1, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -366); |
|---|
| | 7061 | assertPred!"=="(SysTime(DateTime(-1, 12, 30, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -367); |
|---|
| | 7062 | assertPred!"=="(SysTime(DateTime(-1, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -730); |
|---|
| | 7063 | assertPred!"=="(SysTime(DateTime(-2, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -731); |
|---|
| | 7064 | assertPred!"=="(SysTime(DateTime(-2, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -1095); |
|---|
| | 7065 | assertPred!"=="(SysTime(DateTime(-3, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -1096); |
|---|
| | 7066 | assertPred!"=="(SysTime(DateTime(-3, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -1460); |
|---|
| | 7067 | assertPred!"=="(SysTime(DateTime(-4, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -1461); |
|---|
| | 7068 | assertPred!"=="(SysTime(DateTime(-4, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -1826); |
|---|
| | 7069 | assertPred!"=="(SysTime(DateTime(-5, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -1827); |
|---|
| | 7070 | assertPred!"=="(SysTime(DateTime(-5, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -2191); |
|---|
| | 7071 | assertPred!"=="(SysTime(DateTime(-9, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -3652); |
|---|
| | 7072 | |
|---|
| | 7073 | assertPred!"=="(SysTime(DateTime(-49, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -18_262); |
|---|
| | 7074 | assertPred!"=="(SysTime(DateTime(-50, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -18_627); |
|---|
| | 7075 | assertPred!"=="(SysTime(DateTime(-97, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -35_794); |
|---|
| | 7076 | assertPred!"=="(SysTime(DateTime(-99, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -36_160); |
|---|
| | 7077 | assertPred!"=="(SysTime(DateTime(-99, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -36_524); |
|---|
| | 7078 | assertPred!"=="(SysTime(DateTime(-100, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -36_889); |
|---|
| | 7079 | assertPred!"=="(SysTime(DateTime(-101, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -37_254); |
|---|
| | 7080 | assertPred!"=="(SysTime(DateTime(-105, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -38_715); |
|---|
| | 7081 | assertPred!"=="(SysTime(DateTime(-200, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -73_413); |
|---|
| | 7082 | assertPred!"=="(SysTime(DateTime(-201, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -73_778); |
|---|
| | 7083 | assertPred!"=="(SysTime(DateTime(-300, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -109_937); |
|---|
| | 7084 | assertPred!"=="(SysTime(DateTime(-301, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -110_302); |
|---|
| | 7085 | assertPred!"=="(SysTime(DateTime(-400, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -146_097); |
|---|
| | 7086 | assertPred!"=="(SysTime(DateTime(-400, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -146_462); |
|---|
| | 7087 | assertPred!"=="(SysTime(DateTime(-401, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -146_827); |
|---|
| | 7088 | assertPred!"=="(SysTime(DateTime(-499, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -182_621); |
|---|
| | 7089 | assertPred!"=="(SysTime(DateTime(-500, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -182_986); |
|---|
| | 7090 | assertPred!"=="(SysTime(DateTime(-501, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -183_351); |
|---|
| | 7091 | assertPred!"=="(SysTime(DateTime(-1000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -365_607); |
|---|
| | 7092 | assertPred!"=="(SysTime(DateTime(-1001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -365_972); |
|---|
| | 7093 | assertPred!"=="(SysTime(DateTime(-1599, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -584_387); |
|---|
| | 7094 | assertPred!"=="(SysTime(DateTime(-1600, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -584_388); |
|---|
| | 7095 | assertPred!"=="(SysTime(DateTime(-1600, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -584_753); |
|---|
| | 7096 | assertPred!"=="(SysTime(DateTime(-1601, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -585_118); |
|---|
| | 7097 | assertPred!"=="(SysTime(DateTime(-1900, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -694_325); |
|---|
| | 7098 | assertPred!"=="(SysTime(DateTime(-1901, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -694_690); |
|---|
| | 7099 | assertPred!"=="(SysTime(DateTime(-1999, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -730_484); |
|---|
| | 7100 | assertPred!"=="(SysTime(DateTime(-2000, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -730_485); |
|---|
| | 7101 | assertPred!"=="(SysTime(DateTime(-2000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -730_850); |
|---|
| | 7102 | assertPred!"=="(SysTime(DateTime(-2001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -731_215); |
|---|
| | 7103 | |
|---|
| | 7104 | assertPred!"=="(SysTime(DateTime(-2010, 1, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_502); |
|---|
| | 7105 | assertPred!"=="(SysTime(DateTime(-2010, 1, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_472); |
|---|
| | 7106 | assertPred!"=="(SysTime(DateTime(-2010, 2, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_471); |
|---|
| | 7107 | assertPred!"=="(SysTime(DateTime(-2010, 2, 28, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_444); |
|---|
| | 7108 | assertPred!"=="(SysTime(DateTime(-2010, 3, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_443); |
|---|
| | 7109 | assertPred!"=="(SysTime(DateTime(-2010, 3, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_413); |
|---|
| | 7110 | assertPred!"=="(SysTime(DateTime(-2010, 4, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_412); |
|---|
| | 7111 | assertPred!"=="(SysTime(DateTime(-2010, 4, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_383); |
|---|
| | 7112 | assertPred!"=="(SysTime(DateTime(-2010, 5, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_382); |
|---|
| | 7113 | assertPred!"=="(SysTime(DateTime(-2010, 5, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_352); |
|---|
| | 7114 | assertPred!"=="(SysTime(DateTime(-2010, 6, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_351); |
|---|
| | 7115 | assertPred!"=="(SysTime(DateTime(-2010, 6, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_322); |
|---|
| | 7116 | assertPred!"=="(SysTime(DateTime(-2010, 7, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_321); |
|---|
| | 7117 | assertPred!"=="(SysTime(DateTime(-2010, 7, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_291); |
|---|
| | 7118 | assertPred!"=="(SysTime(DateTime(-2010, 8, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_290); |
|---|
| | 7119 | assertPred!"=="(SysTime(DateTime(-2010, 8, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_260); |
|---|
| | 7120 | assertPred!"=="(SysTime(DateTime(-2010, 9, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_259); |
|---|
| | 7121 | assertPred!"=="(SysTime(DateTime(-2010, 9, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_230); |
|---|
| | 7122 | assertPred!"=="(SysTime(DateTime(-2010, 10, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_229); |
|---|
| | 7123 | assertPred!"=="(SysTime(DateTime(-2010, 10, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_199); |
|---|
| | 7124 | assertPred!"=="(SysTime(DateTime(-2010, 11, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_198); |
|---|
| | 7125 | assertPred!"=="(SysTime(DateTime(-2010, 11, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_169); |
|---|
| | 7126 | assertPred!"=="(SysTime(DateTime(-2010, 12, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_168); |
|---|
| | 7127 | assertPred!"=="(SysTime(DateTime(-2010, 12, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_138); |
|---|
| | 7128 | |
|---|
| | 7129 | assertPred!"=="(SysTime(DateTime(-2012, 2, 1, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, -735_202); |
|---|
| | 7130 | assertPred!"=="(SysTime(DateTime(-2012, 2, 28, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, -735_175); |
|---|
| | 7131 | assertPred!"=="(SysTime(DateTime(-2012, 2, 29, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, -735_174); |
|---|
| | 7132 | assertPred!"=="(SysTime(DateTime(-2012, 3, 1, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, -735_173); |
|---|
| | 7133 | |
|---|
| | 7134 | assertPred!"=="(SysTime(DateTime(-3760, 9, 7, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, -1_373_427); //Start of Hebrew Calendar |
|---|
| | 7135 | |
|---|
| | 7136 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7137 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7138 | static assert(__traits(compiles, cst.dayOfGregorianCal)); |
|---|
| | 7139 | //static assert(__traits(compiles, ist.dayOfGregorianCal)); |
|---|
| | 7140 | |
|---|
| | 7141 | //Verify Examples. |
|---|
| | 7142 | assert(SysTime(DateTime(1, 1, 1, 0, 0, 0)).dayOfGregorianCal == 1); |
|---|
| | 7143 | assert(SysTime(DateTime(1, 12, 31, 23, 59, 59)).dayOfGregorianCal == 365); |
|---|
| | 7144 | assert(SysTime(DateTime(2, 1, 1, 2, 2, 2)).dayOfGregorianCal == 366); |
|---|
| | 7145 | |
|---|
| | 7146 | assert(SysTime(DateTime(0, 12, 31, 7, 7, 7)).dayOfGregorianCal == 0); |
|---|
| | 7147 | assert(SysTime(DateTime(0, 1, 1, 19, 30, 0)).dayOfGregorianCal == -365); |
|---|
| | 7148 | assert(SysTime(DateTime(-1, 12, 31, 4, 7, 0)).dayOfGregorianCal == -366); |
|---|
| | 7149 | |
|---|
| | 7150 | assert(SysTime(DateTime(2000, 1, 1, 9, 30, 20)).dayOfGregorianCal == 730_120); |
|---|
| | 7151 | assert(SysTime(DateTime(2010, 12, 31, 15, 45, 50)).dayOfGregorianCal == 734_137); |
|---|
| | 7152 | } |
|---|
| | 7153 | } |
|---|
| | 7154 | |
|---|
| | 7155 | |
|---|
| | 7156 | //Test that the logic for the day of the Gregorian Calendar is consistent |
|---|
| | 7157 | //between Date and SysTime. |
|---|
| | 7158 | unittest |
|---|
| | 7159 | { |
|---|
| | 7160 | version(testStdDateTime) |
|---|
| | 7161 | { |
|---|
| | 7162 | //Test A.D. |
|---|
| | 7163 | assertPred!"=="(Date(1, 1, 1).dayOfGregorianCal, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7164 | assertPred!"=="(Date(1, 1, 2).dayOfGregorianCal, SysTime(DateTime(1, 1, 2, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7165 | assertPred!"=="(Date(1, 2, 1).dayOfGregorianCal, SysTime(DateTime(1, 2, 1, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7166 | assertPred!"=="(Date(2, 1, 1).dayOfGregorianCal, SysTime(DateTime(2, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7167 | assertPred!"=="(Date(3, 1, 1).dayOfGregorianCal, SysTime(DateTime(3, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7168 | assertPred!"=="(Date(4, 1, 1).dayOfGregorianCal, SysTime(DateTime(4, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7169 | assertPred!"=="(Date(5, 1, 1).dayOfGregorianCal, SysTime(DateTime(5, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7170 | assertPred!"=="(Date(50, 1, 1).dayOfGregorianCal, SysTime(DateTime(50, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7171 | assertPred!"=="(Date(97, 1, 1).dayOfGregorianCal, SysTime(DateTime(97, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7172 | assertPred!"=="(Date(100, 1, 1).dayOfGregorianCal, SysTime(DateTime(100, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7173 | assertPred!"=="(Date(101, 1, 1).dayOfGregorianCal, SysTime(DateTime(101, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7174 | assertPred!"=="(Date(105, 1, 1).dayOfGregorianCal, SysTime(DateTime(105, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7175 | assertPred!"=="(Date(200, 1, 1).dayOfGregorianCal, SysTime(DateTime(200, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7176 | assertPred!"=="(Date(201, 1, 1).dayOfGregorianCal, SysTime(DateTime(201, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7177 | assertPred!"=="(Date(300, 1, 1).dayOfGregorianCal, SysTime(DateTime(300, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7178 | assertPred!"=="(Date(301, 1, 1).dayOfGregorianCal, SysTime(DateTime(301, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7179 | assertPred!"=="(Date(400, 1, 1).dayOfGregorianCal, SysTime(DateTime(400, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7180 | assertPred!"=="(Date(401, 1, 1).dayOfGregorianCal, SysTime(DateTime(401, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7181 | assertPred!"=="(Date(500, 1, 1).dayOfGregorianCal, SysTime(DateTime(500, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7182 | assertPred!"=="(Date(501, 1, 1).dayOfGregorianCal, SysTime(DateTime(501, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7183 | assertPred!"=="(Date(1000, 1, 1).dayOfGregorianCal, SysTime(DateTime(1000, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7184 | assertPred!"=="(Date(1001, 1, 1).dayOfGregorianCal, SysTime(DateTime(1001, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7185 | assertPred!"=="(Date(1600, 1, 1).dayOfGregorianCal, SysTime(DateTime(1600, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7186 | assertPred!"=="(Date(1601, 1, 1).dayOfGregorianCal, SysTime(DateTime(1601, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7187 | assertPred!"=="(Date(1900, 1, 1).dayOfGregorianCal, SysTime(DateTime(1900, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7188 | assertPred!"=="(Date(1901, 1, 1).dayOfGregorianCal, SysTime(DateTime(1901, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7189 | assertPred!"=="(Date(1945, 11, 12).dayOfGregorianCal, SysTime(DateTime(1945, 11, 12, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7190 | assertPred!"=="(Date(1999, 1, 1).dayOfGregorianCal, SysTime(DateTime(1999, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7191 | assertPred!"=="(Date(1999, 7, 6).dayOfGregorianCal, SysTime(DateTime(1999, 7, 6, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7192 | assertPred!"=="(Date(2000, 1, 1).dayOfGregorianCal, SysTime(DateTime(2000, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7193 | assertPred!"=="(Date(2001, 1, 1).dayOfGregorianCal, SysTime(DateTime(2001, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7194 | |
|---|
| | 7195 | assertPred!"=="(Date(2010, 1, 1).dayOfGregorianCal, SysTime(DateTime(2010, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7196 | assertPred!"=="(Date(2010, 1, 31).dayOfGregorianCal, SysTime(DateTime(2010, 1, 31, 23, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7197 | assertPred!"=="(Date(2010, 2, 1).dayOfGregorianCal, SysTime(DateTime(2010, 2, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7198 | assertPred!"=="(Date(2010, 2, 28).dayOfGregorianCal, SysTime(DateTime(2010, 2, 28, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7199 | assertPred!"=="(Date(2010, 3, 1).dayOfGregorianCal, SysTime(DateTime(2010, 3, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7200 | assertPred!"=="(Date(2010, 3, 31).dayOfGregorianCal, SysTime(DateTime(2010, 3, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7201 | assertPred!"=="(Date(2010, 4, 1).dayOfGregorianCal, SysTime(DateTime(2010, 4, 1, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7202 | assertPred!"=="(Date(2010, 4, 30).dayOfGregorianCal, SysTime(DateTime(2010, 4, 30, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7203 | assertPred!"=="(Date(2010, 5, 1).dayOfGregorianCal, SysTime(DateTime(2010, 5, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7204 | assertPred!"=="(Date(2010, 5, 31).dayOfGregorianCal, SysTime(DateTime(2010, 5, 31, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7205 | assertPred!"=="(Date(2010, 6, 1).dayOfGregorianCal, SysTime(DateTime(2010, 6, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7206 | assertPred!"=="(Date(2010, 6, 30).dayOfGregorianCal, SysTime(DateTime(2010, 6, 30, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7207 | assertPred!"=="(Date(2010, 7, 1).dayOfGregorianCal, SysTime(DateTime(2010, 7, 1, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7208 | assertPred!"=="(Date(2010, 7, 31).dayOfGregorianCal, SysTime(DateTime(2010, 7, 31, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7209 | assertPred!"=="(Date(2010, 8, 1).dayOfGregorianCal, SysTime(DateTime(2010, 8, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7210 | assertPred!"=="(Date(2010, 8, 31).dayOfGregorianCal, SysTime(DateTime(2010, 8, 31, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7211 | assertPred!"=="(Date(2010, 9, 1).dayOfGregorianCal, SysTime(DateTime(2010, 9, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7212 | assertPred!"=="(Date(2010, 9, 30).dayOfGregorianCal, SysTime(DateTime(2010, 9, 30, 12, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7213 | assertPred!"=="(Date(2010, 10, 1).dayOfGregorianCal, SysTime(DateTime(2010, 10, 1, 0, 12, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7214 | assertPred!"=="(Date(2010, 10, 31).dayOfGregorianCal, SysTime(DateTime(2010, 10, 31, 0, 0, 12), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7215 | assertPred!"=="(Date(2010, 11, 1).dayOfGregorianCal, SysTime(DateTime(2010, 11, 1, 23, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7216 | assertPred!"=="(Date(2010, 11, 30).dayOfGregorianCal, SysTime(DateTime(2010, 11, 30, 0, 59, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7217 | assertPred!"=="(Date(2010, 12, 1).dayOfGregorianCal, SysTime(DateTime(2010, 12, 1, 0, 0, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7218 | assertPred!"=="(Date(2010, 12, 31).dayOfGregorianCal, SysTime(DateTime(2010, 12, 31, 0, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7219 | |
|---|
| | 7220 | assertPred!"=="(Date(2012, 2, 1).dayOfGregorianCal, SysTime(DateTime(2012, 2, 1, 23, 0, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7221 | assertPred!"=="(Date(2012, 2, 28).dayOfGregorianCal, SysTime(DateTime(2012, 2, 28, 23, 59, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7222 | assertPred!"=="(Date(2012, 2, 29).dayOfGregorianCal, SysTime(DateTime(2012, 2, 29, 7, 7, 7), FracSec.from!"hnsecs"(7)).dayOfGregorianCal); |
|---|
| | 7223 | assertPred!"=="(Date(2012, 3, 1).dayOfGregorianCal, SysTime(DateTime(2012, 3, 1, 7, 7, 7), FracSec.from!"hnsecs"(7)).dayOfGregorianCal); |
|---|
| | 7224 | |
|---|
| | 7225 | //Test B.C. |
|---|
| | 7226 | assertPred!"=="(Date(0, 12, 31).dayOfGregorianCal, SysTime(DateTime(0, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7227 | assertPred!"=="(Date(0, 12, 30).dayOfGregorianCal, SysTime(DateTime(0, 12, 30, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7228 | assertPred!"=="(Date(0, 12, 1).dayOfGregorianCal, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7229 | assertPred!"=="(Date(0, 11, 30).dayOfGregorianCal, SysTime(DateTime(0, 11, 30, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7230 | |
|---|
| | 7231 | assertPred!"=="(Date(-1, 12, 31).dayOfGregorianCal, SysTime(DateTime(-1, 12, 31, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7232 | assertPred!"=="(Date(-1, 12, 30).dayOfGregorianCal, SysTime(DateTime(-1, 12, 30, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7233 | assertPred!"=="(Date(-1, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7234 | assertPred!"=="(Date(-2, 12, 31).dayOfGregorianCal, SysTime(DateTime(-2, 12, 31, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7235 | assertPred!"=="(Date(-2, 1, 1).dayOfGregorianCal, SysTime(DateTime(-2, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7236 | assertPred!"=="(Date(-3, 12, 31).dayOfGregorianCal, SysTime(DateTime(-3, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7237 | assertPred!"=="(Date(-3, 1, 1).dayOfGregorianCal, SysTime(DateTime(-3, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7238 | assertPred!"=="(Date(-4, 12, 31).dayOfGregorianCal, SysTime(DateTime(-4, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7239 | assertPred!"=="(Date(-4, 1, 1).dayOfGregorianCal, SysTime(DateTime(-4, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7240 | assertPred!"=="(Date(-5, 12, 31).dayOfGregorianCal, SysTime(DateTime(-5, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7241 | assertPred!"=="(Date(-5, 1, 1).dayOfGregorianCal, SysTime(DateTime(-5, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7242 | assertPred!"=="(Date(-9, 1, 1).dayOfGregorianCal, SysTime(DateTime(-9, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7243 | |
|---|
| | 7244 | assertPred!"=="(Date(-49, 1, 1).dayOfGregorianCal, SysTime(DateTime(-49, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7245 | assertPred!"=="(Date(-50, 1, 1).dayOfGregorianCal, SysTime(DateTime(-50, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7246 | assertPred!"=="(Date(-97, 1, 1).dayOfGregorianCal, SysTime(DateTime(-97, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7247 | assertPred!"=="(Date(-99, 12, 31).dayOfGregorianCal, SysTime(DateTime(-99, 12, 31, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7248 | assertPred!"=="(Date(-99, 1, 1).dayOfGregorianCal, SysTime(DateTime(-99, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7249 | assertPred!"=="(Date(-100, 1, 1).dayOfGregorianCal, SysTime(DateTime(-100, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7250 | assertPred!"=="(Date(-101, 1, 1).dayOfGregorianCal, SysTime(DateTime(-101, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7251 | assertPred!"=="(Date(-105, 1, 1).dayOfGregorianCal, SysTime(DateTime(-105, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7252 | assertPred!"=="(Date(-200, 1, 1).dayOfGregorianCal, SysTime(DateTime(-200, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7253 | assertPred!"=="(Date(-201, 1, 1).dayOfGregorianCal, SysTime(DateTime(-201, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7254 | assertPred!"=="(Date(-300, 1, 1).dayOfGregorianCal, SysTime(DateTime(-300, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7255 | assertPred!"=="(Date(-301, 1, 1).dayOfGregorianCal, SysTime(DateTime(-301, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7256 | assertPred!"=="(Date(-400, 12, 31).dayOfGregorianCal, SysTime(DateTime(-400, 12, 31, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7257 | assertPred!"=="(Date(-400, 1, 1).dayOfGregorianCal, SysTime(DateTime(-400, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7258 | assertPred!"=="(Date(-401, 1, 1).dayOfGregorianCal, SysTime(DateTime(-401, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7259 | assertPred!"=="(Date(-499, 1, 1).dayOfGregorianCal, SysTime(DateTime(-499, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7260 | assertPred!"=="(Date(-500, 1, 1).dayOfGregorianCal, SysTime(DateTime(-500, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7261 | assertPred!"=="(Date(-501, 1, 1).dayOfGregorianCal, SysTime(DateTime(-501, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7262 | assertPred!"=="(Date(-1000, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1000, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7263 | assertPred!"=="(Date(-1001, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1001, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7264 | assertPred!"=="(Date(-1599, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1599, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7265 | assertPred!"=="(Date(-1600, 12, 31).dayOfGregorianCal, SysTime(DateTime(-1600, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7266 | assertPred!"=="(Date(-1600, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1600, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7267 | assertPred!"=="(Date(-1601, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1601, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7268 | assertPred!"=="(Date(-1900, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1900, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7269 | assertPred!"=="(Date(-1901, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1901, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7270 | assertPred!"=="(Date(-1999, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1999, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7271 | assertPred!"=="(Date(-1999, 7, 6).dayOfGregorianCal, SysTime(DateTime(-1999, 7, 6, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7272 | assertPred!"=="(Date(-2000, 12, 31).dayOfGregorianCal, SysTime(DateTime(-2000, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7273 | assertPred!"=="(Date(-2000, 1, 1).dayOfGregorianCal, SysTime(DateTime(-2000, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7274 | assertPred!"=="(Date(-2001, 1, 1).dayOfGregorianCal, SysTime(DateTime(-2001, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7275 | |
|---|
| | 7276 | assertPred!"=="(Date(-2010, 1, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7277 | assertPred!"=="(Date(-2010, 1, 31).dayOfGregorianCal, SysTime(DateTime(-2010, 1, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7278 | assertPred!"=="(Date(-2010, 2, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 2, 1, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7279 | assertPred!"=="(Date(-2010, 2, 28).dayOfGregorianCal, SysTime(DateTime(-2010, 2, 28, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7280 | assertPred!"=="(Date(-2010, 3, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 3, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7281 | assertPred!"=="(Date(-2010, 3, 31).dayOfGregorianCal, SysTime(DateTime(-2010, 3, 31, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7282 | assertPred!"=="(Date(-2010, 4, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 4, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7283 | assertPred!"=="(Date(-2010, 4, 30).dayOfGregorianCal, SysTime(DateTime(-2010, 4, 30, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7284 | assertPred!"=="(Date(-2010, 5, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 5, 1, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7285 | assertPred!"=="(Date(-2010, 5, 31).dayOfGregorianCal, SysTime(DateTime(-2010, 5, 31, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7286 | assertPred!"=="(Date(-2010, 6, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 6, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7287 | assertPred!"=="(Date(-2010, 6, 30).dayOfGregorianCal, SysTime(DateTime(-2010, 6, 30, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7288 | assertPred!"=="(Date(-2010, 7, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 7, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7289 | assertPred!"=="(Date(-2010, 7, 31).dayOfGregorianCal, SysTime(DateTime(-2010, 7, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7290 | assertPred!"=="(Date(-2010, 8, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 8, 1, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7291 | assertPred!"=="(Date(-2010, 8, 31).dayOfGregorianCal, SysTime(DateTime(-2010, 8, 31, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7292 | assertPred!"=="(Date(-2010, 9, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 9, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7293 | assertPred!"=="(Date(-2010, 9, 30).dayOfGregorianCal, SysTime(DateTime(-2010, 9, 30, 12, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7294 | assertPred!"=="(Date(-2010, 10, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 10, 1, 0, 12, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7295 | assertPred!"=="(Date(-2010, 10, 31).dayOfGregorianCal, SysTime(DateTime(-2010, 10, 31, 0, 0, 12), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7296 | assertPred!"=="(Date(-2010, 11, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 11, 1, 23, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7297 | assertPred!"=="(Date(-2010, 11, 30).dayOfGregorianCal, SysTime(DateTime(-2010, 11, 30, 0, 59, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7298 | assertPred!"=="(Date(-2010, 12, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 12, 1, 0, 0, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal); |
|---|
| | 7299 | assertPred!"=="(Date(-2010, 12, 31).dayOfGregorianCal, SysTime(DateTime(-2010, 12, 31, 0, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal); |
|---|
| | 7300 | |
|---|
| | 7301 | assertPred!"=="(Date(-2012, 2, 1).dayOfGregorianCal, SysTime(DateTime(-2012, 2, 1, 23, 0, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal); |
|---|
| | 7302 | assertPred!"=="(Date(-2012, 2, 28).dayOfGregorianCal, SysTime(DateTime(-2012, 2, 28, 23, 59, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7303 | assertPred!"=="(Date(-2012, 2, 29).dayOfGregorianCal, SysTime(DateTime(-2012, 2, 29, 7, 7, 7), FracSec.from!"hnsecs"(7)).dayOfGregorianCal); |
|---|
| | 7304 | assertPred!"=="(Date(-2012, 3, 1).dayOfGregorianCal, SysTime(DateTime(-2012, 3, 1, 7, 7, 7), FracSec.from!"hnsecs"(7)).dayOfGregorianCal); |
|---|
| | 7305 | |
|---|
| | 7306 | assertPred!"=="(Date(-3760, 9, 7).dayOfGregorianCal, SysTime(DateTime(-3760, 9, 7, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal); |
|---|
| | 7307 | } |
|---|
| | 7308 | } |
|---|
| | 7309 | |
|---|
| | 7310 | |
|---|
| | 7311 | /++ |
|---|
| | 7312 | The Xth day of the Gregorian Calendar that this SysTime is on. Setting |
|---|
| | 7313 | this property does not affect the time portion of SysTime. |
|---|
| | 7314 | |
|---|
| | 7315 | Params: |
|---|
| | 7316 | days = The day of the Gregorian Calendar to set this Date to. |
|---|
| | 7317 | |
|---|
| | 7318 | Examples: |
|---|
| | 7319 | -------------------- |
|---|
| | 7320 | auto st = SysTime(DateTime(0, 0, 0, 12, 0, 0)); |
|---|
| | 7321 | st.dayOfGregorianCal = 1; |
|---|
| | 7322 | assert(st == SysTime(DateTime(1, 1, 1, 12, 0, 0))); |
|---|
| | 7323 | |
|---|
| | 7324 | st.dayOfGregorianCal = 365; |
|---|
| | 7325 | assert(st == SysTime(DateTime(1, 12, 31, 12, 0, 0))); |
|---|
| | 7326 | |
|---|
| | 7327 | st.dayOfGregorianCal = 366; |
|---|
| | 7328 | assert(st == SysTime(DateTime(2, 1, 1, 12, 0, 0))); |
|---|
| | 7329 | |
|---|
| | 7330 | st.dayOfGregorianCal = 0; |
|---|
| | 7331 | assert(st == SysTime(DateTime(0, 12, 31, 12, 0, 0))); |
|---|
| | 7332 | |
|---|
| | 7333 | st.dayOfGregorianCal = -365; |
|---|
| | 7334 | assert(st == SysTime(DateTime(-0, 1, 1, 12, 0, 0))); |
|---|
| | 7335 | |
|---|
| | 7336 | st.dayOfGregorianCal = -366; |
|---|
| | 7337 | assert(st == SysTime(DateTime(-1, 12, 31, 12, 0, 0))); |
|---|
| | 7338 | |
|---|
| | 7339 | st.dayOfGregorianCal = 730_120; |
|---|
| | 7340 | assert(st == SysTime(DateTime(2000, 1, 1, 12, 0, 0))); |
|---|
| | 7341 | |
|---|
| | 7342 | st.dayOfGregorianCal = 734_137; |
|---|
| | 7343 | assert(st == SysTime(DateTime(2010, 12, 31, 12, 0, 0))); |
|---|
| | 7344 | -------------------- |
|---|
| | 7345 | +/ |
|---|
| | 7346 | @property void dayOfGregorianCal(int days) nothrow |
|---|
| | 7347 | { |
|---|
| | 7348 | auto hnsecs = adjTime; |
|---|
| | 7349 | hnsecs = removeUnitsFromHNSecs!"days"(hnsecs); |
|---|
| | 7350 | |
|---|
| | 7351 | if(hnsecs < 0) |
|---|
| | 7352 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 7353 | |
|---|
| | 7354 | if(--days < 0) |
|---|
| | 7355 | { |
|---|
| | 7356 | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| | 7357 | ++days; |
|---|
| | 7358 | } |
|---|
| | 7359 | |
|---|
| | 7360 | immutable newDaysHNSecs = convert!("days", "hnsecs")(days); |
|---|
| | 7361 | |
|---|
| | 7362 | adjTime = newDaysHNSecs + hnsecs; |
|---|
| | 7363 | } |
|---|
| | 7364 | |
|---|
| | 7365 | unittest |
|---|
| | 7366 | { |
|---|
| | 7367 | version(testStdDateTime) |
|---|
| | 7368 | { |
|---|
| | 7369 | void testST(SysTime orig, int day, in SysTime expected, size_t line = __LINE__) |
|---|
| | 7370 | { |
|---|
| | 7371 | orig.dayOfGregorianCal = day; |
|---|
| | 7372 | assertPred!"=="(orig, expected, "", __FILE__, line); |
|---|
| | 7373 | } |
|---|
| | 7374 | |
|---|
| | 7375 | //Test A.D. |
|---|
| | 7376 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 7377 | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 7378 | testST(SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7379 | |
|---|
| | 7380 | //Test B.C. |
|---|
| | 7381 | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)), 0, SysTime(DateTime(0, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 7382 | testST(SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 0, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7383 | testST(SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(1)), 0, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 7384 | testST(SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(0)), 0, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0))); |
|---|
| | 7385 | |
|---|
| | 7386 | //Test Both. |
|---|
| | 7387 | testST(SysTime(DateTime(-512, 7, 20, 0, 0, 0), FracSec.from!"hnsecs"(0)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 7388 | testST(SysTime(DateTime(-513, 6, 6, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| | 7389 | testST(SysTime(DateTime(-511, 5, 7, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 1, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7390 | |
|---|
| | 7391 | testST(SysTime(DateTime(1607, 4, 8, 0, 0, 0), FracSec.from!"hnsecs"(0)), 0, SysTime(DateTime(0, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| | 7392 | testST(SysTime(DateTime(1500, 3, 9, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)), 0, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7393 | testST(SysTime(DateTime(999, 2, 10, 23, 59, 59), FracSec.from!"hnsecs"(1)), 0, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| | 7394 | testST(SysTime(DateTime(2007, 12, 11, 23, 59, 59), FracSec.from!"hnsecs"(0)), 0, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0))); |
|---|
| | 7395 | |
|---|
| | 7396 | |
|---|
| | 7397 | auto sysTime = SysTime(DateTime(1, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)); |
|---|
| | 7398 | |
|---|
| | 7399 | void testST2(int day, in SysTime expected, size_t line = __LINE__) |
|---|
| | 7400 | { |
|---|
| | 7401 | sysTime.dayOfGregorianCal = day; |
|---|
| | 7402 | assertPred!"=="(sysTime, expected, "", __FILE__, line); |
|---|
| | 7403 | } |
|---|
| | 7404 | |
|---|
| | 7405 | //Test A.D. |
|---|
| | 7406 | testST2(1, SysTime(DateTime(1, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7407 | testST2(2, SysTime(DateTime(1, 1, 2, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7408 | testST2(32, SysTime(DateTime(1, 2, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7409 | testST2(366, SysTime(DateTime(2, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7410 | testST2(731, SysTime(DateTime(3, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7411 | testST2(1096, SysTime(DateTime(4, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7412 | testST2(1462, SysTime(DateTime(5, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7413 | testST2(17_898, SysTime(DateTime(50, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7414 | testST2(35_065, SysTime(DateTime(97, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7415 | testST2(36_160, SysTime(DateTime(100, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7416 | testST2(36_525, SysTime(DateTime(101, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7417 | testST2(37_986, SysTime(DateTime(105, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7418 | testST2(72_684, SysTime(DateTime(200, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7419 | testST2(73_049, SysTime(DateTime(201, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7420 | testST2(109_208, SysTime(DateTime(300, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7421 | testST2(109_573, SysTime(DateTime(301, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7422 | testST2(145_732, SysTime(DateTime(400, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7423 | testST2(146_098, SysTime(DateTime(401, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7424 | testST2(182_257, SysTime(DateTime(500, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7425 | testST2(182_622, SysTime(DateTime(501, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7426 | testST2(364_878, SysTime(DateTime(1000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7427 | testST2(365_243, SysTime(DateTime(1001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7428 | testST2(584_023, SysTime(DateTime(1600, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7429 | testST2(584_389, SysTime(DateTime(1601, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7430 | testST2(693_596, SysTime(DateTime(1900, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7431 | testST2(693_961, SysTime(DateTime(1901, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7432 | testST2(729_755, SysTime(DateTime(1999, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7433 | testST2(730_120, SysTime(DateTime(2000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7434 | testST2(730_486, SysTime(DateTime(2001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7435 | |
|---|
| | 7436 | testST2(733_773, SysTime(DateTime(2010, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7437 | testST2(733_803, SysTime(DateTime(2010, 1, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7438 | testST2(733_804, SysTime(DateTime(2010, 2, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7439 | testST2(733_831, SysTime(DateTime(2010, 2, 28, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7440 | testST2(733_832, SysTime(DateTime(2010, 3, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7441 | testST2(733_862, SysTime(DateTime(2010, 3, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7442 | testST2(733_863, SysTime(DateTime(2010, 4, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7443 | testST2(733_892, SysTime(DateTime(2010, 4, 30, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7444 | testST2(733_893, SysTime(DateTime(2010, 5, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7445 | testST2(733_923, SysTime(DateTime(2010, 5, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7446 | testST2(733_924, SysTime(DateTime(2010, 6, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7447 | testST2(733_953, SysTime(DateTime(2010, 6, 30, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7448 | testST2(733_954, SysTime(DateTime(2010, 7, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7449 | testST2(733_984, SysTime(DateTime(2010, 7, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7450 | testST2(733_985, SysTime(DateTime(2010, 8, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7451 | testST2(734_015, SysTime(DateTime(2010, 8, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7452 | testST2(734_016, SysTime(DateTime(2010, 9, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7453 | testST2(734_045, SysTime(DateTime(2010, 9, 30, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7454 | testST2(734_046, SysTime(DateTime(2010, 10, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7455 | testST2(734_076, SysTime(DateTime(2010, 10, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7456 | testST2(734_077, SysTime(DateTime(2010, 11, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7457 | testST2(734_106, SysTime(DateTime(2010, 11, 30, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7458 | testST2(734_107, SysTime(DateTime(2010, 12, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7459 | testST2(734_137, SysTime(DateTime(2010, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7460 | |
|---|
| | 7461 | testST2(734_534, SysTime(DateTime(2012, 2, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7462 | testST2(734_561, SysTime(DateTime(2012, 2, 28, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7463 | testST2(734_562, SysTime(DateTime(2012, 2, 29, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7464 | testST2(734_563, SysTime(DateTime(2012, 3, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7465 | |
|---|
| | 7466 | testST2(734_534, SysTime(DateTime(2012, 2, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7467 | |
|---|
| | 7468 | testST2(734_561, SysTime(DateTime(2012, 2, 28, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7469 | testST2(734_562, SysTime(DateTime(2012, 2, 29, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7470 | testST2(734_563, SysTime(DateTime(2012, 3, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7471 | |
|---|
| | 7472 | //Test B.C. |
|---|
| | 7473 | testST2(0, SysTime(DateTime(0, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7474 | testST2(-1, SysTime(DateTime(0, 12, 30, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7475 | testST2(-30, SysTime(DateTime(0, 12, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7476 | testST2(-31, SysTime(DateTime(0, 11, 30, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7477 | |
|---|
| | 7478 | testST2(-366, SysTime(DateTime(-1, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7479 | testST2(-367, SysTime(DateTime(-1, 12, 30, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7480 | testST2(-730, SysTime(DateTime(-1, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7481 | testST2(-731, SysTime(DateTime(-2, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7482 | testST2(-1095, SysTime(DateTime(-2, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7483 | testST2(-1096, SysTime(DateTime(-3, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7484 | testST2(-1460, SysTime(DateTime(-3, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7485 | testST2(-1461, SysTime(DateTime(-4, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7486 | testST2(-1826, SysTime(DateTime(-4, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7487 | testST2(-1827, SysTime(DateTime(-5, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7488 | testST2(-2191, SysTime(DateTime(-5, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7489 | testST2(-3652, SysTime(DateTime(-9, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7490 | |
|---|
| | 7491 | testST2(-18_262, SysTime(DateTime(-49, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7492 | testST2(-18_627, SysTime(DateTime(-50, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7493 | testST2(-35_794, SysTime(DateTime(-97, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7494 | testST2(-36_160, SysTime(DateTime(-99, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7495 | testST2(-36_524, SysTime(DateTime(-99, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7496 | testST2(-36_889, SysTime(DateTime(-100, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7497 | testST2(-37_254, SysTime(DateTime(-101, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7498 | testST2(-38_715, SysTime(DateTime(-105, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7499 | testST2(-73_413, SysTime(DateTime(-200, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7500 | testST2(-73_778, SysTime(DateTime(-201, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7501 | testST2(-109_937, SysTime(DateTime(-300, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7502 | testST2(-110_302, SysTime(DateTime(-301, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7503 | testST2(-146_097, SysTime(DateTime(-400, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7504 | testST2(-146_462, SysTime(DateTime(-400, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7505 | testST2(-146_827, SysTime(DateTime(-401, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7506 | testST2(-182_621, SysTime(DateTime(-499, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7507 | testST2(-182_986, SysTime(DateTime(-500, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7508 | testST2(-183_351, SysTime(DateTime(-501, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7509 | testST2(-365_607, SysTime(DateTime(-1000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7510 | testST2(-365_972, SysTime(DateTime(-1001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7511 | testST2(-584_387, SysTime(DateTime(-1599, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7512 | testST2(-584_388, SysTime(DateTime(-1600, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7513 | testST2(-584_753, SysTime(DateTime(-1600, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7514 | testST2(-585_118, SysTime(DateTime(-1601, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7515 | testST2(-694_325, SysTime(DateTime(-1900, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7516 | testST2(-694_690, SysTime(DateTime(-1901, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7517 | testST2(-730_484, SysTime(DateTime(-1999, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7518 | testST2(-730_485, SysTime(DateTime(-2000, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7519 | testST2(-730_850, SysTime(DateTime(-2000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7520 | testST2(-731_215, SysTime(DateTime(-2001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7521 | |
|---|
| | 7522 | testST2(-734_502, SysTime(DateTime(-2010, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7523 | testST2(-734_472, SysTime(DateTime(-2010, 1, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7524 | testST2(-734_471, SysTime(DateTime(-2010, 2, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7525 | testST2(-734_444, SysTime(DateTime(-2010, 2, 28, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7526 | testST2(-734_443, SysTime(DateTime(-2010, 3, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7527 | testST2(-734_413, SysTime(DateTime(-2010, 3, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7528 | testST2(-734_412, SysTime(DateTime(-2010, 4, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7529 | testST2(-734_383, SysTime(DateTime(-2010, 4, 30, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7530 | testST2(-734_382, SysTime(DateTime(-2010, 5, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7531 | testST2(-734_352, SysTime(DateTime(-2010, 5, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7532 | testST2(-734_351, SysTime(DateTime(-2010, 6, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7533 | testST2(-734_322, SysTime(DateTime(-2010, 6, 30, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7534 | testST2(-734_321, SysTime(DateTime(-2010, 7, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7535 | testST2(-734_291, SysTime(DateTime(-2010, 7, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7536 | testST2(-734_290, SysTime(DateTime(-2010, 8, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7537 | testST2(-734_260, SysTime(DateTime(-2010, 8, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7538 | testST2(-734_259, SysTime(DateTime(-2010, 9, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7539 | testST2(-734_230, SysTime(DateTime(-2010, 9, 30, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7540 | testST2(-734_229, SysTime(DateTime(-2010, 10, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7541 | testST2(-734_199, SysTime(DateTime(-2010, 10, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7542 | testST2(-734_198, SysTime(DateTime(-2010, 11, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7543 | testST2(-734_169, SysTime(DateTime(-2010, 11, 30, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7544 | testST2(-734_168, SysTime(DateTime(-2010, 12, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7545 | testST2(-734_138, SysTime(DateTime(-2010, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7546 | |
|---|
| | 7547 | testST2(-735_202, SysTime(DateTime(-2012, 2, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7548 | testST2(-735_175, SysTime(DateTime(-2012, 2, 28, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7549 | testST2(-735_174, SysTime(DateTime(-2012, 2, 29, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7550 | testST2(-735_173, SysTime(DateTime(-2012, 3, 1, 12, 2, 9), FracSec.from!"msecs"(212))); |
|---|
| | 7551 | |
|---|
| | 7552 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7553 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7554 | static assert(!__traits(compiles, cst.dayOfGregorianCal = 7)); |
|---|
| | 7555 | //static assert(!__traits(compiles, ist.dayOfGregorianCal = 7)); |
|---|
| | 7556 | |
|---|
| | 7557 | //Verify Examples. |
|---|
| | 7558 | auto st = SysTime(DateTime(0, 1, 1, 12, 0, 0)); |
|---|
| | 7559 | st.dayOfGregorianCal = 1; |
|---|
| | 7560 | assert(st == SysTime(DateTime(1, 1, 1, 12, 0, 0))); |
|---|
| | 7561 | |
|---|
| | 7562 | st.dayOfGregorianCal = 365; |
|---|
| | 7563 | assert(st == SysTime(DateTime(1, 12, 31, 12, 0, 0))); |
|---|
| | 7564 | |
|---|
| | 7565 | st.dayOfGregorianCal = 366; |
|---|
| | 7566 | assert(st == SysTime(DateTime(2, 1, 1, 12, 0, 0))); |
|---|
| | 7567 | |
|---|
| | 7568 | st.dayOfGregorianCal = 0; |
|---|
| | 7569 | assert(st == SysTime(DateTime(0, 12, 31, 12, 0, 0))); |
|---|
| | 7570 | |
|---|
| | 7571 | st.dayOfGregorianCal = -365; |
|---|
| | 7572 | assert(st == SysTime(DateTime(-0, 1, 1, 12, 0, 0))); |
|---|
| | 7573 | |
|---|
| | 7574 | st.dayOfGregorianCal = -366; |
|---|
| | 7575 | assert(st == SysTime(DateTime(-1, 12, 31, 12, 0, 0))); |
|---|
| | 7576 | |
|---|
| | 7577 | st.dayOfGregorianCal = 730_120; |
|---|
| | 7578 | assert(st == SysTime(DateTime(2000, 1, 1, 12, 0, 0))); |
|---|
| | 7579 | |
|---|
| | 7580 | st.dayOfGregorianCal = 734_137; |
|---|
| | 7581 | assert(st == SysTime(DateTime(2010, 12, 31, 12, 0, 0))); |
|---|
| | 7582 | } |
|---|
| | 7583 | } |
|---|
| | 7584 | |
|---|
| | 7585 | |
|---|
| | 7586 | /++ |
|---|
| | 7587 | The ISO 8601 week of the year that this SysTime is in. |
|---|
| | 7588 | |
|---|
| | 7589 | See_Also: |
|---|
| | 7590 | $(WEB en.wikipedia.org/wiki/ISO_week_date, ISO Week Date</a> |
|---|
| | 7591 | +/ |
|---|
| | 7592 | @property ubyte isoWeek() const nothrow |
|---|
| | 7593 | { |
|---|
| | 7594 | return (cast(Date)this).isoWeek; |
|---|
| | 7595 | } |
|---|
| | 7596 | |
|---|
| | 7597 | unittest |
|---|
| | 7598 | { |
|---|
| | 7599 | version(testStdDateTime) |
|---|
| | 7600 | { |
|---|
| | 7601 | auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7602 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7603 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7604 | static assert(__traits(compiles, st.isoWeek)); |
|---|
| | 7605 | static assert(__traits(compiles, cst.isoWeek)); |
|---|
| | 7606 | //static assert(__traits(compiles, ist.isoWeek)); |
|---|
| | 7607 | } |
|---|
| | 7608 | } |
|---|
| | 7609 | |
|---|
| | 7610 | |
|---|
| | 7611 | /++ |
|---|
| | 7612 | SysTime for the last day in the month that this Date is in. |
|---|
| | 7613 | The time portion of endOfMonth is always 23:59:59.9999999. |
|---|
| | 7614 | |
|---|
| | 7615 | Examples: |
|---|
| | 7616 | -------------------- |
|---|
| | 7617 | assert(SysTime(DateTime(1999, 1, 6, 0, 0, 0)).endOfMonth == SysTime(DateTime(1999, 1, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7618 | assert(SysTime(DateTime(1999, 2, 7, 19, 30, 0), FracSec.from!"msecs"(24)).endOfMonth == SysTime(DateTime(1999, 2, 28, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7619 | assert(SysTime(DateTime(2000, 2, 7, 5, 12, 27), FracSec.from!"usecs"(5203)).endOfMonth == SysTime(DateTime(2000, 2, 29, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7620 | assert(SysTime(DateTime(2000, 6, 4, 12, 22, 9), FracSec.from!"hnsecs"(12345)).endOfMonth == SysTime(DateTime(2000, 6, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7621 | -------------------- |
|---|
| | 7622 | +/ |
|---|
| | 7623 | @property SysTime endOfMonth() const nothrow |
|---|
| | 7624 | { |
|---|
| | 7625 | immutable hnsecs = adjTime; |
|---|
| | 7626 | immutable days = getUnitsFromHNSecs!"days"(hnsecs); |
|---|
| | 7627 | |
|---|
| | 7628 | auto date = Date(cast(int)days + 1).endOfMonth; |
|---|
| | 7629 | auto newDays = date.dayOfGregorianCal - 1; |
|---|
| | 7630 | long theTimeHNSecs; |
|---|
| | 7631 | |
|---|
| | 7632 | if(newDays < 0) |
|---|
| | 7633 | { |
|---|
| | 7634 | theTimeHNSecs = -1; |
|---|
| | 7635 | ++newDays; |
|---|
| | 7636 | } |
|---|
| | 7637 | else |
|---|
| | 7638 | theTimeHNSecs = convert!("days", "hnsecs")(1) - 1; |
|---|
| | 7639 | |
|---|
| | 7640 | immutable newDaysHNSecs = convert!("days", "hnsecs")(newDays); |
|---|
| | 7641 | |
|---|
| | 7642 | auto retval = SysTime(this._stdTime, this._timezone.get); |
|---|
| | 7643 | retval.adjTime = newDaysHNSecs + theTimeHNSecs; |
|---|
| | 7644 | |
|---|
| | 7645 | return retval; |
|---|
| | 7646 | } |
|---|
| | 7647 | |
|---|
| | 7648 | unittest |
|---|
| | 7649 | { |
|---|
| | 7650 | version(testStdDateTime) |
|---|
| | 7651 | { |
|---|
| | 7652 | //Test A.D. |
|---|
| | 7653 | assertPred!"=="(SysTime(Date(1999, 1, 1)).endOfMonth, SysTime(DateTime(1999, 1, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7654 | assertPred!"=="(SysTime(Date(1999, 2, 1)).endOfMonth, SysTime(DateTime(1999, 2, 28, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7655 | assertPred!"=="(SysTime(Date(2000, 2, 1)).endOfMonth, SysTime(DateTime(2000, 2, 29, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7656 | assertPred!"=="(SysTime(Date(1999, 3, 1)).endOfMonth, SysTime(DateTime(1999, 3, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7657 | assertPred!"=="(SysTime(Date(1999, 4, 1)).endOfMonth, SysTime(DateTime(1999, 4, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7658 | assertPred!"=="(SysTime(Date(1999, 5, 1)).endOfMonth, SysTime(DateTime(1999, 5, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7659 | assertPred!"=="(SysTime(Date(1999, 6, 1)).endOfMonth, SysTime(DateTime(1999, 6, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7660 | assertPred!"=="(SysTime(Date(1999, 7, 1)).endOfMonth, SysTime(DateTime(1999, 7, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7661 | assertPred!"=="(SysTime(Date(1999, 8, 1)).endOfMonth, SysTime(DateTime(1999, 8, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7662 | assertPred!"=="(SysTime(Date(1999, 9, 1)).endOfMonth, SysTime(DateTime(1999, 9, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7663 | assertPred!"=="(SysTime(Date(1999, 10, 1)).endOfMonth, SysTime(DateTime(1999, 10, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7664 | assertPred!"=="(SysTime(Date(1999, 11, 1)).endOfMonth, SysTime(DateTime(1999, 11, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7665 | assertPred!"=="(SysTime(Date(1999, 12, 1)).endOfMonth, SysTime(DateTime(1999, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7666 | |
|---|
| | 7667 | //Test B.C. |
|---|
| | 7668 | assertPred!"=="(SysTime(Date(-1999, 1, 1)).endOfMonth, SysTime(DateTime(-1999, 1, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7669 | assertPred!"=="(SysTime(Date(-1999, 2, 1)).endOfMonth, SysTime(DateTime(-1999, 2, 28, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7670 | assertPred!"=="(SysTime(Date(-2000, 2, 1)).endOfMonth, SysTime(DateTime(-2000, 2, 29, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7671 | assertPred!"=="(SysTime(Date(-1999, 3, 1)).endOfMonth, SysTime(DateTime(-1999, 3, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7672 | assertPred!"=="(SysTime(Date(-1999, 4, 1)).endOfMonth, SysTime(DateTime(-1999, 4, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7673 | assertPred!"=="(SysTime(Date(-1999, 5, 1)).endOfMonth, SysTime(DateTime(-1999, 5, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7674 | assertPred!"=="(SysTime(Date(-1999, 6, 1)).endOfMonth, SysTime(DateTime(-1999, 6, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7675 | assertPred!"=="(SysTime(Date(-1999, 7, 1)).endOfMonth, SysTime(DateTime(-1999, 7, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7676 | assertPred!"=="(SysTime(Date(-1999, 8, 1)).endOfMonth, SysTime(DateTime(-1999, 8, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7677 | assertPred!"=="(SysTime(Date(-1999, 9, 1)).endOfMonth, SysTime(DateTime(-1999, 9, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7678 | assertPred!"=="(SysTime(Date(-1999, 10, 1)).endOfMonth, SysTime(DateTime(-1999, 10, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7679 | assertPred!"=="(SysTime(Date(-1999, 11, 1)).endOfMonth, SysTime(DateTime(-1999, 11, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7680 | assertPred!"=="(SysTime(Date(-1999, 12, 1)).endOfMonth, SysTime(DateTime(-1999, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7681 | |
|---|
| | 7682 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7683 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7684 | static assert(__traits(compiles, cst.endOfMonth)); |
|---|
| | 7685 | //static assert(__traits(compiles, ist.endOfMonth)); |
|---|
| | 7686 | |
|---|
| | 7687 | //Verify Examples. |
|---|
| | 7688 | assert(SysTime(DateTime(1999, 1, 6, 0, 0, 0)).endOfMonth == SysTime(DateTime(1999, 1, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7689 | assert(SysTime(DateTime(1999, 2, 7, 19, 30, 0), FracSec.from!"msecs"(24)).endOfMonth == SysTime(DateTime(1999, 2, 28, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7690 | assert(SysTime(DateTime(2000, 2, 7, 5, 12, 27), FracSec.from!"usecs"(5203)).endOfMonth == SysTime(DateTime(2000, 2, 29, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7691 | assert(SysTime(DateTime(2000, 6, 4, 12, 22, 9), FracSec.from!"hnsecs"(12345)).endOfMonth == SysTime(DateTime(2000, 6, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| | 7692 | } |
|---|
| | 7693 | } |
|---|
| | 7694 | |
|---|
| | 7695 | |
|---|
| | 7696 | /++ |
|---|
| | 7697 | The last day in the month that this SysTime is in. |
|---|
| | 7698 | |
|---|
| | 7699 | Examples: |
|---|
| | 7700 | -------------------- |
|---|
| | 7701 | assert(SysTime(DateTime(1999, 1, 6, 0, 0, 0)).endOfMonthDay == 31); |
|---|
| | 7702 | assert(SysTime(DateTime(1999, 2, 7, 19, 30, 0)).endOfMonthDay == 28); |
|---|
| | 7703 | assert(SysTime(DateTime(2000, 2, 7, 5, 12, 27)).endOfMonthDay == 29); |
|---|
| | 7704 | assert(SysTime(DateTime(2000, 6, 4, 12, 22, 9)).endOfMonthDay == 30); |
|---|
| | 7705 | -------------------- |
|---|
| | 7706 | +/ |
|---|
| | 7707 | @property ubyte endOfMonthDay() const nothrow |
|---|
| | 7708 | { |
|---|
| | 7709 | return Date(dayOfGregorianCal).endOfMonthDay; |
|---|
| | 7710 | } |
|---|
| | 7711 | |
|---|
| | 7712 | unittest |
|---|
| | 7713 | { |
|---|
| | 7714 | version(testStdDateTime) |
|---|
| | 7715 | { |
|---|
| | 7716 | //Test A.D. |
|---|
| | 7717 | assertPred!"=="(SysTime(DateTime(1999, 1, 1, 12, 1, 13)).endOfMonthDay, 31); |
|---|
| | 7718 | assertPred!"=="(SysTime(DateTime(1999, 2, 1, 17, 13, 12)).endOfMonthDay, 28); |
|---|
| | 7719 | assertPred!"=="(SysTime(DateTime(2000, 2, 1, 13, 2, 12)).endOfMonthDay, 29); |
|---|
| | 7720 | assertPred!"=="(SysTime(DateTime(1999, 3, 1, 12, 13, 12)).endOfMonthDay, 31); |
|---|
| | 7721 | assertPred!"=="(SysTime(DateTime(1999, 4, 1, 12, 6, 13)).endOfMonthDay, 30); |
|---|
| | 7722 | assertPred!"=="(SysTime(DateTime(1999, 5, 1, 15, 13, 12)).endOfMonthDay, 31); |
|---|
| | 7723 | assertPred!"=="(SysTime(DateTime(1999, 6, 1, 13, 7, 12)).endOfMonthDay, 30); |
|---|
| | 7724 | assertPred!"=="(SysTime(DateTime(1999, 7, 1, 12, 13, 17)).endOfMonthDay, 31); |
|---|
| | 7725 | assertPred!"=="(SysTime(DateTime(1999, 8, 1, 12, 3, 13)).endOfMonthDay, 31); |
|---|
| | 7726 | assertPred!"=="(SysTime(DateTime(1999, 9, 1, 12, 13, 12)).endOfMonthDay, 30); |
|---|
| | 7727 | assertPred!"=="(SysTime(DateTime(1999, 10, 1, 13, 19, 12)).endOfMonthDay, 31); |
|---|
| | 7728 | assertPred!"=="(SysTime(DateTime(1999, 11, 1, 12, 13, 17)).endOfMonthDay, 30); |
|---|
| | 7729 | assertPred!"=="(SysTime(DateTime(1999, 12, 1, 12, 52, 13)).endOfMonthDay, 31); |
|---|
| | 7730 | |
|---|
| | 7731 | //Test B.C. |
|---|
| | 7732 | assertPred!"=="(SysTime(DateTime(-1999, 1, 1, 12, 1, 13)).endOfMonthDay, 31); |
|---|
| | 7733 | assertPred!"=="(SysTime(DateTime(-1999, 2, 1, 7, 13, 12)).endOfMonthDay, 28); |
|---|
| | 7734 | assertPred!"=="(SysTime(DateTime(-2000, 2, 1, 13, 2, 12)).endOfMonthDay, 29); |
|---|
| | 7735 | assertPred!"=="(SysTime(DateTime(-1999, 3, 1, 12, 13, 12)).endOfMonthDay, 31); |
|---|
| | 7736 | assertPred!"=="(SysTime(DateTime(-1999, 4, 1, 12, 6, 13)).endOfMonthDay, 30); |
|---|
| | 7737 | assertPred!"=="(SysTime(DateTime(-1999, 5, 1, 5, 13, 12)).endOfMonthDay, 31); |
|---|
| | 7738 | assertPred!"=="(SysTime(DateTime(-1999, 6, 1, 13, 7, 12)).endOfMonthDay, 30); |
|---|
| | 7739 | assertPred!"=="(SysTime(DateTime(-1999, 7, 1, 12, 13, 17)).endOfMonthDay, 31); |
|---|
| | 7740 | assertPred!"=="(SysTime(DateTime(-1999, 8, 1, 12, 3, 13)).endOfMonthDay, 31); |
|---|
| | 7741 | assertPred!"=="(SysTime(DateTime(-1999, 9, 1, 12, 13, 12)).endOfMonthDay, 30); |
|---|
| | 7742 | assertPred!"=="(SysTime(DateTime(-1999, 10, 1, 13, 19, 12)).endOfMonthDay, 31); |
|---|
| | 7743 | assertPred!"=="(SysTime(DateTime(-1999, 11, 1, 12, 13, 17)).endOfMonthDay, 30); |
|---|
| | 7744 | assertPred!"=="(SysTime(DateTime(-1999, 12, 1, 12, 52, 13)).endOfMonthDay, 31); |
|---|
| | 7745 | |
|---|
| | 7746 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7747 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7748 | static assert(__traits(compiles, cst.endOfMonthDay)); |
|---|
| | 7749 | //static assert(__traits(compiles, ist.endOfMonthDay)); |
|---|
| | 7750 | |
|---|
| | 7751 | //Verify Examples. |
|---|
| | 7752 | assert(SysTime(DateTime(1999, 1, 6, 0, 0, 0)).endOfMonthDay == 31); |
|---|
| | 7753 | assert(SysTime(DateTime(1999, 2, 7, 19, 30, 0)).endOfMonthDay == 28); |
|---|
| | 7754 | assert(SysTime(DateTime(2000, 2, 7, 5, 12, 27)).endOfMonthDay == 29); |
|---|
| | 7755 | assert(SysTime(DateTime(2000, 6, 4, 12, 22, 9)).endOfMonthDay == 30); |
|---|
| | 7756 | } |
|---|
| | 7757 | } |
|---|
| | 7758 | |
|---|
| | 7759 | |
|---|
| | 7760 | /++ |
|---|
| | 7761 | Whether the current year is a date in A.D. |
|---|
| | 7762 | |
|---|
| | 7763 | Examples: |
|---|
| | 7764 | -------------------- |
|---|
| | 7765 | assert(SysTime(DateTime(1, 1, 1, 12, 7, 0)).isAD); |
|---|
| | 7766 | assert(SysTime(DateTime(2010, 12, 31, 0, 0, 0)).isAD); |
|---|
| | 7767 | assert(!SysTime(DateTime(0, 12, 31, 23, 59, 59)).isAD); |
|---|
| | 7768 | assert(!SysTime(DateTime(-2010, 1, 1, 2, 2, 2)).isAD); |
|---|
| | 7769 | -------------------- |
|---|
| | 7770 | +/ |
|---|
| | 7771 | @property bool isAD() const nothrow |
|---|
| | 7772 | { |
|---|
| | 7773 | return adjTime >= 0; |
|---|
| | 7774 | } |
|---|
| | 7775 | |
|---|
| | 7776 | unittest |
|---|
| | 7777 | { |
|---|
| | 7778 | version(testStdDateTime) |
|---|
| | 7779 | { |
|---|
| | 7780 | assert(SysTime(DateTime(2010, 7, 4, 12, 0, 9)).isAD); |
|---|
| | 7781 | assert(SysTime(DateTime(1, 1, 1, 0, 0, 0)).isAD); |
|---|
| | 7782 | assert(!SysTime(DateTime(0, 12, 31, 23, 59, 59)).isAD); |
|---|
| | 7783 | assert(!SysTime(DateTime(0, 1, 1, 23, 59, 59)).isAD); |
|---|
| | 7784 | assert(!SysTime(DateTime(-1, 1, 1, 23 ,59 ,59)).isAD); |
|---|
| | 7785 | assert(!SysTime(DateTime(-2010, 7, 4, 12, 2, 2)).isAD); |
|---|
| | 7786 | |
|---|
| | 7787 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7788 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7789 | static assert(__traits(compiles, cst.isAD)); |
|---|
| | 7790 | //static assert(__traits(compiles, ist.isAD)); |
|---|
| | 7791 | |
|---|
| | 7792 | //Verify Examples. |
|---|
| | 7793 | assert(SysTime(DateTime(1, 1, 1, 12, 7, 0)).isAD); |
|---|
| | 7794 | assert(SysTime(DateTime(2010, 12, 31, 0, 0, 0)).isAD); |
|---|
| | 7795 | assert(!SysTime(DateTime(0, 12, 31, 23, 59, 59)).isAD); |
|---|
| | 7796 | assert(!SysTime(DateTime(-2010, 1, 1, 2, 2, 2)).isAD); |
|---|
| | 7797 | } |
|---|
| | 7798 | } |
|---|
| | 7799 | |
|---|
| | 7800 | |
|---|
| | 7801 | /++ |
|---|
| | 7802 | The julian day for this SysTime at the given time. For example, prior |
|---|
| | 7803 | to noon, 1996-03-31 would be the julian day number 2_450_173, so this |
|---|
| | 7804 | function returns 2_450_173, while from noon onward, it the julian day |
|---|
| | 7805 | number would be 2_450_174, so this function returns 2_450_174. |
|---|
| | 7806 | +/ |
|---|
| | 7807 | @property long julianDay() const nothrow |
|---|
| | 7808 | { |
|---|
| | 7809 | immutable jd = dayOfGregorianCal + 1_721_425; |
|---|
| | 7810 | |
|---|
| | 7811 | return hour < 12 ? jd - 1 : jd; |
|---|
| | 7812 | } |
|---|
| | 7813 | |
|---|
| | 7814 | unittest |
|---|
| | 7815 | { |
|---|
| | 7816 | version(testStdDateTime) |
|---|
| | 7817 | { |
|---|
| | 7818 | assertPred!"=="(SysTime(DateTime(-4713, 11, 24, 0, 0, 0)).julianDay, -1); |
|---|
| | 7819 | assertPred!"=="(SysTime(DateTime(-4713, 11, 24, 12, 0, 0)).julianDay, 0); |
|---|
| | 7820 | |
|---|
| | 7821 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 0, 0, 0)).julianDay, 1_721_424); |
|---|
| | 7822 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 12, 0, 0)).julianDay, 1_721_425); |
|---|
| | 7823 | |
|---|
| | 7824 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0)).julianDay, 1_721_425); |
|---|
| | 7825 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 12, 0, 0)).julianDay, 1_721_426); |
|---|
| | 7826 | |
|---|
| | 7827 | assertPred!"=="(SysTime(DateTime(1582, 10, 15, 0, 0, 0)).julianDay, 2_299_160); |
|---|
| | 7828 | assertPred!"=="(SysTime(DateTime(1582, 10, 15, 12, 0, 0)).julianDay, 2_299_161); |
|---|
| | 7829 | |
|---|
| | 7830 | assertPred!"=="(SysTime(DateTime(1858, 11, 17, 0, 0, 0)).julianDay, 2_400_000); |
|---|
| | 7831 | assertPred!"=="(SysTime(DateTime(1858, 11, 17, 12, 0, 0)).julianDay, 2_400_001); |
|---|
| | 7832 | |
|---|
| | 7833 | assertPred!"=="(SysTime(DateTime(1982, 1, 4, 0, 0, 0)).julianDay, 2_444_973); |
|---|
| | 7834 | assertPred!"=="(SysTime(DateTime(1982, 1, 4, 12, 0, 0)).julianDay, 2_444_974); |
|---|
| | 7835 | |
|---|
| | 7836 | assertPred!"=="(SysTime(DateTime(1996, 3, 31, 0, 0, 0)).julianDay, 2_450_173); |
|---|
| | 7837 | assertPred!"=="(SysTime(DateTime(1996, 3, 31, 12, 0, 0)).julianDay, 2_450_174); |
|---|
| | 7838 | |
|---|
| | 7839 | assertPred!"=="(SysTime(DateTime(2010, 8, 24, 0, 0, 0)).julianDay, 2_455_432); |
|---|
| | 7840 | assertPred!"=="(SysTime(DateTime(2010, 8, 24, 12, 0, 0)).julianDay, 2_455_433); |
|---|
| | 7841 | |
|---|
| | 7842 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7843 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7844 | static assert(__traits(compiles, cst.julianDay)); |
|---|
| | 7845 | //static assert(__traits(compiles, ist.julianDay)); |
|---|
| | 7846 | } |
|---|
| | 7847 | } |
|---|
| | 7848 | |
|---|
| | 7849 | |
|---|
| | 7850 | /++ |
|---|
| | 7851 | The modified julian day for any time on this Date (since, the modified |
|---|
| | 7852 | julian day changes at midnight). |
|---|
| | 7853 | +/ |
|---|
| | 7854 | @property long modJulianDay() const nothrow |
|---|
| | 7855 | { |
|---|
| | 7856 | return (dayOfGregorianCal + 1_721_425) - 2_400_001; |
|---|
| | 7857 | } |
|---|
| | 7858 | |
|---|
| | 7859 | unittest |
|---|
| | 7860 | { |
|---|
| | 7861 | version(testStdDateTime) |
|---|
| | 7862 | { |
|---|
| | 7863 | assertPred!"=="(SysTime(DateTime(1858, 11, 17, 0, 0, 0)).modJulianDay, 0); |
|---|
| | 7864 | assertPred!"=="(SysTime(DateTime(1858, 11, 17, 12, 0, 0)).modJulianDay, 0); |
|---|
| | 7865 | |
|---|
| | 7866 | assertPred!"=="(SysTime(DateTime(2010, 8, 24, 0, 0, 0)).modJulianDay, 55_432); |
|---|
| | 7867 | assertPred!"=="(SysTime(DateTime(2010, 8, 24, 12, 0, 0)).modJulianDay, 55_432); |
|---|
| | 7868 | |
|---|
| | 7869 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7870 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7871 | static assert(__traits(compiles, cst.modJulianDay)); |
|---|
| | 7872 | //static assert(__traits(compiles, ist.modJulianDay)); |
|---|
| | 7873 | } |
|---|
| | 7874 | } |
|---|
| | 7875 | |
|---|
| | 7876 | |
|---|
| | 7877 | /++ |
|---|
| | 7878 | Returns a Date equivalent to this SysTime. |
|---|
| | 7879 | +/ |
|---|
| | 7880 | Date opCast(T)() const nothrow |
|---|
| | 7881 | if(is(Unqual!T == Date)) |
|---|
| | 7882 | { |
|---|
| | 7883 | return Date(dayOfGregorianCal); |
|---|
| | 7884 | } |
|---|
| | 7885 | |
|---|
| | 7886 | unittest |
|---|
| | 7887 | { |
|---|
| | 7888 | version(testStdDateTime) |
|---|
| | 7889 | { |
|---|
| | 7890 | assertPred!"=="(cast(Date)SysTime(Date(1999, 7, 6)), Date(1999, 7, 6)); |
|---|
| | 7891 | assertPred!"=="(cast(Date)SysTime(Date(2000, 12, 31)), Date(2000, 12, 31)); |
|---|
| | 7892 | assertPred!"=="(cast(Date)SysTime(Date(2001, 1, 1)), Date(2001, 1, 1)); |
|---|
| | 7893 | |
|---|
| | 7894 | assertPred!"=="(cast(Date)SysTime(DateTime(1999, 7, 6, 12, 10, 9)), Date(1999, 7, 6)); |
|---|
| | 7895 | assertPred!"=="(cast(Date)SysTime(DateTime(2000, 12, 31, 13, 11, 10)), Date(2000, 12, 31)); |
|---|
| | 7896 | assertPred!"=="(cast(Date)SysTime(DateTime(2001, 1, 1, 14, 12, 11)), Date(2001, 1, 1)); |
|---|
| | 7897 | |
|---|
| | 7898 | assertPred!"=="(cast(Date)SysTime(Date(-1999, 7, 6)), Date(-1999, 7, 6)); |
|---|
| | 7899 | assertPred!"=="(cast(Date)SysTime(Date(-2000, 12, 31)), Date(-2000, 12, 31)); |
|---|
| | 7900 | assertPred!"=="(cast(Date)SysTime(Date(-2001, 1, 1)), Date(-2001, 1, 1)); |
|---|
| | 7901 | |
|---|
| | 7902 | assertPred!"=="(cast(Date)SysTime(DateTime(-1999, 7, 6, 12, 10, 9)), Date(-1999, 7, 6)); |
|---|
| | 7903 | assertPred!"=="(cast(Date)SysTime(DateTime(-2000, 12, 31, 13, 11, 10)), Date(-2000, 12, 31)); |
|---|
| | 7904 | assertPred!"=="(cast(Date)SysTime(DateTime(-2001, 1, 1, 14, 12, 11)), Date(-2001, 1, 1)); |
|---|
| | 7905 | |
|---|
| | 7906 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7907 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7908 | static assert(__traits(compiles, cast(Date)cst)); |
|---|
| | 7909 | //static assert(__traits(compiles, cast(Date)ist)); |
|---|
| | 7910 | } |
|---|
| | 7911 | } |
|---|
| | 7912 | |
|---|
| | 7913 | |
|---|
| | 7914 | /++ |
|---|
| | 7915 | Returns a DateTime equivalent to this SysTime. |
|---|
| | 7916 | +/ |
|---|
| | 7917 | DateTime opCast(T)() const nothrow |
|---|
| | 7918 | if(is(Unqual!T == DateTime)) |
|---|
| | 7919 | { |
|---|
| | 7920 | try |
|---|
| | 7921 | { |
|---|
| | 7922 | auto hnsecs = adjTime; |
|---|
| | 7923 | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| | 7924 | |
|---|
| | 7925 | if(hnsecs < 0) |
|---|
| | 7926 | { |
|---|
| | 7927 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 7928 | --days; |
|---|
| | 7929 | } |
|---|
| | 7930 | |
|---|
| | 7931 | immutable hour = splitUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| | 7932 | immutable minute = splitUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| | 7933 | immutable second = getUnitsFromHNSecs!"seconds"(hnsecs); |
|---|
| | 7934 | |
|---|
| | 7935 | return DateTime(Date(cast(int)days), TimeOfDay(cast(int)hour, cast(int)minute, cast(int)second)); |
|---|
| | 7936 | } |
|---|
| | 7937 | catch(Exception e) |
|---|
| | 7938 | assert(0, "Either DateTime's constructor or TimeOfDay's constructor threw."); |
|---|
| | 7939 | } |
|---|
| | 7940 | |
|---|
| | 7941 | unittest |
|---|
| | 7942 | { |
|---|
| | 7943 | version(testStdDateTime) |
|---|
| | 7944 | { |
|---|
| | 7945 | assertPred!"=="(cast(DateTime)SysTime(DateTime(1, 1, 6, 7, 12, 22)), DateTime(1, 1, 6, 7, 12, 22)); |
|---|
| | 7946 | assertPred!"=="(cast(DateTime)SysTime(DateTime(1, 1, 6, 7, 12, 22), FracSec.from!"msecs"(22)), DateTime(1, 1, 6, 7, 12, 22)); |
|---|
| | 7947 | assertPred!"=="(cast(DateTime)SysTime(Date(1999, 7, 6)), DateTime(1999, 7, 6, 0, 0, 0)); |
|---|
| | 7948 | assertPred!"=="(cast(DateTime)SysTime(Date(2000, 12, 31)), DateTime(2000, 12, 31, 0, 0, 0)); |
|---|
| | 7949 | assertPred!"=="(cast(DateTime)SysTime(Date(2001, 1, 1)), DateTime(2001, 1, 1, 0, 0, 0)); |
|---|
| | 7950 | |
|---|
| | 7951 | assertPred!"=="(cast(DateTime)SysTime(DateTime(1999, 7, 6, 12, 10, 9)), DateTime(1999, 7, 6, 12, 10, 9)); |
|---|
| | 7952 | assertPred!"=="(cast(DateTime)SysTime(DateTime(2000, 12, 31, 13, 11, 10)), DateTime(2000, 12, 31, 13, 11, 10)); |
|---|
| | 7953 | assertPred!"=="(cast(DateTime)SysTime(DateTime(2001, 1, 1, 14, 12, 11)), DateTime(2001, 1, 1, 14, 12, 11)); |
|---|
| | 7954 | |
|---|
| | 7955 | assertPred!"=="(cast(DateTime)SysTime(DateTime(-1, 1, 6, 7, 12, 22)), DateTime(-1, 1, 6, 7, 12, 22)); |
|---|
| | 7956 | assertPred!"=="(cast(DateTime)SysTime(DateTime(-1, 1, 6, 7, 12, 22), FracSec.from!"msecs"(22)), DateTime(-1, 1, 6, 7, 12, 22)); |
|---|
| | 7957 | assertPred!"=="(cast(DateTime)SysTime(Date(-1999, 7, 6)), DateTime(-1999, 7, 6, 0, 0, 0)); |
|---|
| | 7958 | assertPred!"=="(cast(DateTime)SysTime(Date(-2000, 12, 31)), DateTime(-2000, 12, 31, 0, 0, 0)); |
|---|
| | 7959 | assertPred!"=="(cast(DateTime)SysTime(Date(-2001, 1, 1)), DateTime(-2001, 1, 1, 0, 0, 0)); |
|---|
| | 7960 | |
|---|
| | 7961 | assertPred!"=="(cast(DateTime)SysTime(DateTime(-1999, 7, 6, 12, 10, 9)), DateTime(-1999, 7, 6, 12, 10, 9)); |
|---|
| | 7962 | assertPred!"=="(cast(DateTime)SysTime(DateTime(-2000, 12, 31, 13, 11, 10)), DateTime(-2000, 12, 31, 13, 11, 10)); |
|---|
| | 7963 | assertPred!"=="(cast(DateTime)SysTime(DateTime(-2001, 1, 1, 14, 12, 11)), DateTime(-2001, 1, 1, 14, 12, 11)); |
|---|
| | 7964 | |
|---|
| | 7965 | assertPred!"=="(cast(DateTime)SysTime(DateTime(2011, 1, 13, 8, 17, 2), FracSec.from!"msecs"(296), LocalTime()), |
|---|
| | 7966 | DateTime(2011, 1, 13, 8, 17, 2)); |
|---|
| | 7967 | |
|---|
| | 7968 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7969 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 7970 | static assert(__traits(compiles, cast(DateTime)cst)); |
|---|
| | 7971 | //static assert(__traits(compiles, cast(DateTime)ist)); |
|---|
| | 7972 | } |
|---|
| | 7973 | } |
|---|
| | 7974 | |
|---|
| | 7975 | |
|---|
| | 7976 | /++ |
|---|
| | 7977 | Returns a TimeOfDay equivalent to this SysTime. |
|---|
| | 7978 | +/ |
|---|
| | 7979 | TimeOfDay opCast(T)() const nothrow |
|---|
| | 7980 | if(is(Unqual!T == TimeOfDay)) |
|---|
| | 7981 | { |
|---|
| | 7982 | try |
|---|
| | 7983 | { |
|---|
| | 7984 | auto hnsecs = adjTime; |
|---|
| | 7985 | hnsecs = removeUnitsFromHNSecs!"days"(hnsecs); |
|---|
| | 7986 | |
|---|
| | 7987 | if(hnsecs < 0) |
|---|
| | 7988 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 7989 | |
|---|
| | 7990 | immutable hour = splitUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| | 7991 | immutable minute = splitUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| | 7992 | immutable second = getUnitsFromHNSecs!"seconds"(hnsecs); |
|---|
| | 7993 | |
|---|
| | 7994 | return TimeOfDay(cast(int)hour, cast(int)minute, cast(int)second); |
|---|
| | 7995 | } |
|---|
| | 7996 | catch(Exception e) |
|---|
| | 7997 | assert(0, "TimeOfDay's constructor threw."); |
|---|
| | 7998 | } |
|---|
| | 7999 | |
|---|
| | 8000 | unittest |
|---|
| | 8001 | { |
|---|
| | 8002 | version(testStdDateTime) |
|---|
| | 8003 | { |
|---|
| | 8004 | assertPred!"=="(cast(TimeOfDay)SysTime(Date(1999, 7, 6)), TimeOfDay(0, 0, 0)); |
|---|
| | 8005 | assertPred!"=="(cast(TimeOfDay)SysTime(Date(2000, 12, 31)), TimeOfDay(0, 0, 0)); |
|---|
| | 8006 | assertPred!"=="(cast(TimeOfDay)SysTime(Date(2001, 1, 1)), TimeOfDay(0, 0, 0)); |
|---|
| | 8007 | |
|---|
| | 8008 | assertPred!"=="(cast(TimeOfDay)SysTime(DateTime(1999, 7, 6, 12, 10, 9)), TimeOfDay(12, 10, 9)); |
|---|
| | 8009 | assertPred!"=="(cast(TimeOfDay)SysTime(DateTime(2000, 12, 31, 13, 11, 10)), TimeOfDay(13, 11, 10)); |
|---|
| | 8010 | assertPred!"=="(cast(TimeOfDay)SysTime(DateTime(2001, 1, 1, 14, 12, 11)), TimeOfDay(14, 12, 11)); |
|---|
| | 8011 | |
|---|
| | 8012 | assertPred!"=="(cast(TimeOfDay)SysTime(Date(-1999, 7, 6)), TimeOfDay(0, 0, 0)); |
|---|
| | 8013 | assertPred!"=="(cast(TimeOfDay)SysTime(Date(-2000, 12, 31)), TimeOfDay(0, 0, 0)); |
|---|
| | 8014 | assertPred!"=="(cast(TimeOfDay)SysTime(Date(-2001, 1, 1)), TimeOfDay(0, 0, 0)); |
|---|
| | 8015 | |
|---|
| | 8016 | assertPred!"=="(cast(TimeOfDay)SysTime(DateTime(-1999, 7, 6, 12, 10, 9)), TimeOfDay(12, 10, 9)); |
|---|
| | 8017 | assertPred!"=="(cast(TimeOfDay)SysTime(DateTime(-2000, 12, 31, 13, 11, 10)), TimeOfDay(13, 11, 10)); |
|---|
| | 8018 | assertPred!"=="(cast(TimeOfDay)SysTime(DateTime(-2001, 1, 1, 14, 12, 11)), TimeOfDay(14, 12, 11)); |
|---|
| | 8019 | |
|---|
| | 8020 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 8021 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 8022 | static assert(__traits(compiles, cast(TimeOfDay)cst)); |
|---|
| | 8023 | //static assert(__traits(compiles, cast(TimeOfDay)ist)); |
|---|
| | 8024 | } |
|---|
| | 8025 | } |
|---|
| | 8026 | |
|---|
| | 8027 | |
|---|
| | 8028 | //Temporary hack until bug http://d.puremagic.com/issues/show_bug.cgi?id=4867 is fixed. |
|---|
| | 8029 | //This allows assignment from const(SysTime) to SysTime. |
|---|
| | 8030 | //It may be a good idea to keep it though, since casting from a type to itself |
|---|
| | 8031 | //should be allowed, and it doesn't work without this opCast() since opCast() |
|---|
| | 8032 | //has already been defined for other types. |
|---|
| | 8033 | SysTime opCast(T)() const pure nothrow |
|---|
| | 8034 | if(is(Unqual!T == SysTime)) |
|---|
| | 8035 | { |
|---|
| | 8036 | return SysTime(_stdTime, _timezone.get); |
|---|
| | 8037 | } |
|---|
| | 8038 | |
|---|
| | 8039 | |
|---|
| | 8040 | /++ |
|---|
| | 8041 | Converts this SysTime to a string with the format YYYYMMDDTHHMMSS.FFFFFFFTZ |
|---|
| | 8042 | (where F is fractional seconds and TZ is time zone). |
|---|
| | 8043 | |
|---|
| | 8044 | Note that the number of digits in the fractional seconds varies with the |
|---|
| | 8045 | number of fractional seconds. It's a maximum of 7 (which would be hnsecs), |
|---|
| | 8046 | but only has as many as are necessary to hold the correct value (so no |
|---|
| | 8047 | trailing zeroes), and if there are no fractional seconds, then there is |
|---|
| | 8048 | no decimal point. |
|---|
| | 8049 | |
|---|
| | 8050 | If this SysTime's time zone is LocalTime, then TZ is empty. If the time zone |
|---|
| | 8051 | is UTC, then it is "Z". Otherwise, it is the offset from UTC (e.g. +1:00 or -7:00). |
|---|
| | 8052 | Note that the offset from UTC is $(I not) enough to uniquely identify the time zone. |
|---|
| | 8053 | |
|---|
| | 8054 | Time zone offsets will be in the form +HH:MM or -HH:MM. |
|---|
| | 8055 | |
|---|
| | 8056 | Examples: |
|---|
| | 8057 | -------------------- |
|---|
| | 8058 | assert(SysTime(DateTime(2010, 7, 4, 7, 6, 12)).toISOString() == |
|---|
| | 8059 | "20100704T070612"); |
|---|
| | 8060 | assert(SysTime(DateTime(1998, 12, 25, 2, 15, 0), FracSec.from!"msecs"(24)).toISOString() == |
|---|
| | 8061 | "19981225T021500.024"); |
|---|
| | 8062 | assert(SysTime(DateTime(0, 1, 5, 23, 9, 59)).toISOString() == |
|---|
| | 8063 | "00000105T230959"); |
|---|
| | 8064 | assert(SysTime(DateTime(-4, 1, 5, 0, 0, 2), FracSec.from!"hnsecs"(520920)).toISOString() == |
|---|
| | 8065 | "-00040105T000002.052092"); |
|---|
| | 8066 | -------------------- |
|---|
| | 8067 | +/ |
|---|
| | 8068 | string toISOString() const nothrow |
|---|
| | 8069 | { |
|---|
| | 8070 | try |
|---|
| | 8071 | { |
|---|
| | 8072 | immutable adjustedTime = adjTime; |
|---|
| | 8073 | long hnsecs = adjustedTime; |
|---|
| | 8074 | |
|---|
| | 8075 | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| | 8076 | |
|---|
| | 8077 | if(hnsecs < 0) |
|---|
| | 8078 | { |
|---|
| | 8079 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 8080 | --days; |
|---|
| | 8081 | } |
|---|
| | 8082 | |
|---|
| | 8083 | auto hour = splitUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| | 8084 | auto minute = splitUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| | 8085 | auto second = splitUnitsFromHNSecs!"seconds"(hnsecs); |
|---|
| | 8086 | |
|---|
| | 8087 | auto dateTime = DateTime(Date(cast(int)days), TimeOfDay(cast(int)hour, cast(int)minute, cast(int)second)); |
|---|
| | 8088 | auto fracSecStr = fracSecToISOString(cast(int)hnsecs); |
|---|
| | 8089 | |
|---|
| | 8090 | if(_timezone.get is LocalTime()) |
|---|
| | 8091 | return dateTime.toISOString() ~ fracSecToISOString(cast(int)hnsecs); |
|---|
| | 8092 | |
|---|
| | 8093 | if(_timezone.get is UTC()) |
|---|
| | 8094 | return dateTime.toISOString() ~ fracSecToISOString(cast(int)hnsecs) ~ "Z"; |
|---|
| | 8095 | |
|---|
| | 8096 | immutable utcOffset = cast(int)convert!("hnsecs", "minutes")(stdTime - adjustedTime); |
|---|
| | 8097 | |
|---|
| | 8098 | return dateTime.toISOString() ~ fracSecToISOString(cast(int)hnsecs) ~ SimpleTimeZone.toISOString(utcOffset); |
|---|
| | 8099 | } |
|---|
| | 8100 | catch(Exception e) |
|---|
| | 8101 | assert(0, "format() threw."); |
|---|
| | 8102 | } |
|---|
| | 8103 | |
|---|
| | 8104 | unittest |
|---|
| | 8105 | { |
|---|
| | 8106 | version(testStdDateTime) |
|---|
| | 8107 | { |
|---|
| | 8108 | //Test A.D. |
|---|
| | 8109 | assertPred!"=="(SysTime(DateTime.init, UTC()).toISOString(), "00010101T000000Z"); |
|---|
| | 8110 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1), UTC()).toISOString(), "00010101T000000.0000001Z"); |
|---|
| | 8111 | |
|---|
| | 8112 | assertPred!"=="(SysTime(DateTime(9, 12, 4, 0, 0, 0)).toISOString(), "00091204T000000"); |
|---|
| | 8113 | assertPred!"=="(SysTime(DateTime(99, 12, 4, 5, 6, 12)).toISOString(), "00991204T050612"); |
|---|
| | 8114 | assertPred!"=="(SysTime(DateTime(999, 12, 4, 13, 44, 59)).toISOString(), "09991204T134459"); |
|---|
| | 8115 | assertPred!"=="(SysTime(DateTime(9999, 7, 4, 23, 59, 59)).toISOString(), "99990704T235959"); |
|---|
| | 8116 | assertPred!"=="(SysTime(DateTime(10000, 10, 20, 1, 1, 1)).toISOString(), "+100001020T010101"); |
|---|
| | 8117 | |
|---|
| | 8118 | assertPred!"=="(SysTime(DateTime(9, 12, 4, 0, 0, 0), FracSec.from!"msecs"(42)).toISOString(), "00091204T000000.042"); |
|---|
| | 8119 | assertPred!"=="(SysTime(DateTime(99, 12, 4, 5, 6, 12), FracSec.from!"msecs"(100)).toISOString(), "00991204T050612.1"); |
|---|
| | 8120 | assertPred!"=="(SysTime(DateTime(999, 12, 4, 13, 44, 59), FracSec.from!"usecs"(45020)).toISOString(), "09991204T134459.04502"); |
|---|
| | 8121 | assertPred!"=="(SysTime(DateTime(9999, 7, 4, 23, 59, 59), FracSec.from!"hnsecs"(12)).toISOString(), "99990704T235959.0000012"); |
|---|
| | 8122 | assertPred!"=="(SysTime(DateTime(10000, 10, 20, 1, 1, 1), FracSec.from!"hnsecs"(507890)).toISOString(), "+100001020T010101.050789"); |
|---|
| | 8123 | |
|---|
| | 8124 | //Test B.C. |
|---|
| | 8125 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).toISOString(), "00001231T235959.9999999Z"); |
|---|
| | 8126 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1), UTC()).toISOString(), "00001231T235959.0000001Z"); |
|---|
| | 8127 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), UTC()).toISOString(), "00001231T235959Z"); |
|---|
| | 8128 | |
|---|
| | 8129 | assertPred!"=="(SysTime(DateTime(0, 12, 4, 0, 12, 4)).toISOString(), "00001204T001204"); |
|---|
| | 8130 | assertPred!"=="(SysTime(DateTime(-9, 12, 4, 0, 0, 0)).toISOString(), "-00091204T000000"); |
|---|
| | 8131 | assertPred!"=="(SysTime(DateTime(-99, 12, 4, 5, 6, 12)).toISOString(), "-00991204T050612"); |
|---|
| | 8132 | assertPred!"=="(SysTime(DateTime(-999, 12, 4, 13, 44, 59)).toISOString(), "-09991204T134459"); |
|---|
| | 8133 | assertPred!"=="(SysTime(DateTime(-9999, 7, 4, 23, 59, 59)).toISOString(), "-99990704T235959"); |
|---|
| | 8134 | assertPred!"=="(SysTime(DateTime(-10000, 10, 20, 1, 1, 1)).toISOString(), "-100001020T010101"); |
|---|
| | 8135 | |
|---|
| | 8136 | assertPred!"=="(SysTime(DateTime(0, 12, 4, 0, 0, 0), FracSec.from!"msecs"(7)).toISOString(), "00001204T000000.007"); |
|---|
| | 8137 | assertPred!"=="(SysTime(DateTime(-9, 12, 4, 0, 0, 0), FracSec.from!"msecs"(42)).toISOString(), "-00091204T000000.042"); |
|---|
| | 8138 | assertPred!"=="(SysTime(DateTime(-99, 12, 4, 5, 6, 12), FracSec.from!"msecs"(100)).toISOString(), "-00991204T050612.1"); |
|---|
| | 8139 | assertPred!"=="(SysTime(DateTime(-999, 12, 4, 13, 44, 59), FracSec.from!"usecs"(45020)).toISOString(), "-09991204T134459.04502"); |
|---|
| | 8140 | assertPred!"=="(SysTime(DateTime(-9999, 7, 4, 23, 59, 59), FracSec.from!"hnsecs"(12)).toISOString(), "-99990704T235959.0000012"); |
|---|
| | 8141 | assertPred!"=="(SysTime(DateTime(-10000, 10, 20, 1, 1, 1), FracSec.from!"hnsecs"(507890)).toISOString(), "-100001020T010101.050789"); |
|---|
| | 8142 | |
|---|
| | 8143 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 8144 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 8145 | static assert(__traits(compiles, cast(TimeOfDay)cst)); |
|---|
| | 8146 | //static assert(__traits(compiles, cast(TimeOfDay)ist)); |
|---|
| | 8147 | |
|---|
| | 8148 | //Verify Examples. |
|---|
| | 8149 | assert(SysTime(DateTime(2010, 7, 4, 7, 6, 12)).toISOString() == "20100704T070612"); |
|---|
| | 8150 | assert(SysTime(DateTime(1998, 12, 25, 2, 15, 0), FracSec.from!"msecs"(24)).toISOString() == "19981225T021500.024"); |
|---|
| | 8151 | assert(SysTime(DateTime(0, 1, 5, 23, 9, 59)).toISOString() == "00000105T230959"); |
|---|
| | 8152 | assert(SysTime(DateTime(-4, 1, 5, 0, 0, 2), FracSec.from!"hnsecs"(520920)).toISOString() == "-00040105T000002.052092"); |
|---|
| | 8153 | } |
|---|
| | 8154 | } |
|---|
| | 8155 | |
|---|
| | 8156 | |
|---|
| | 8157 | |
|---|
| | 8158 | /++ |
|---|
| | 8159 | Converts this SysTime to a string with the format YYYY-MM-DDTHH:MM:SS.FFFFFFFTZ |
|---|
| | 8160 | (where F is fractional seconds and TZ is time zone). |
|---|
| | 8161 | |
|---|
| | 8162 | Note that the number of digits in the fractional seconds varies with the |
|---|
| | 8163 | number of fractional seconds. It's a maximum of 7 (which would be hnsecs), |
|---|
| | 8164 | but only has as many as are necessary to hold the correct value (so no |
|---|
| | 8165 | trailing zeroes), and if there are no fractional seconds, then there is |
|---|
| | 8166 | no decimal point. |
|---|
| | 8167 | |
|---|
| | 8168 | If this SysTime's time zone is LocalTime, then TZ is empty. If the time |
|---|
| | 8169 | zone is UTC, then it is "Z". Otherwise, it is the offset from UTC |
|---|
| | 8170 | (e.g. +1:00 or -7:00). Note that the offset from UTC is $(I not) enough |
|---|
| | 8171 | to uniquely identify the time zone. |
|---|
| | 8172 | |
|---|
| | 8173 | Time zone offsets will be in the form +HH:MM or -HH:MM. |
|---|
| | 8174 | |
|---|
| | 8175 | Examples: |
|---|
| | 8176 | -------------------- |
|---|
| | 8177 | assert(SysTime(DateTime(2010, 7, 4, 7, 6, 12)).toISOExtendedString() == |
|---|
| | 8178 | "2010-07-04T07:06:12"); |
|---|
| | 8179 | assert(SysTime(DateTime(1998, 12, 25, 2, 15, 0), FracSec.from!"msecs"(24)).toISOExtendedString() == |
|---|
| | 8180 | "1998-12-25T02:15:00.024"); |
|---|
| | 8181 | assert(SysTime(DateTime(0, 1, 5, 23, 9, 59)).toISOExtendedString() == |
|---|
| | 8182 | "0000-01-05T23:09:59"); |
|---|
| | 8183 | assert(SysTime(DateTime(-4, 1, 5, 0, 0, 2), FracSec.from!"hnsecs"(520920)).toISOExtendedString() == |
|---|
| | 8184 | "-0004-01-05T00:00:02.052092"); |
|---|
| | 8185 | -------------------- |
|---|
| | 8186 | +/ |
|---|
| | 8187 | string toISOExtendedString() const nothrow |
|---|
| | 8188 | { |
|---|
| | 8189 | try |
|---|
| | 8190 | { |
|---|
| | 8191 | immutable adjustedTime = adjTime; |
|---|
| | 8192 | long hnsecs = adjustedTime; |
|---|
| | 8193 | |
|---|
| | 8194 | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| | 8195 | |
|---|
| | 8196 | if(hnsecs < 0) |
|---|
| | 8197 | { |
|---|
| | 8198 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 8199 | --days; |
|---|
| | 8200 | } |
|---|
| | 8201 | |
|---|
| | 8202 | auto hour = splitUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| | 8203 | auto minute = splitUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| | 8204 | auto second = splitUnitsFromHNSecs!"seconds"(hnsecs); |
|---|
| | 8205 | |
|---|
| | 8206 | auto dateTime = DateTime(Date(cast(int)days), TimeOfDay(cast(int)hour, cast(int)minute, cast(int)second)); |
|---|
| | 8207 | auto fracSecStr = fracSecToISOString(cast(int)hnsecs); |
|---|
| | 8208 | |
|---|
| | 8209 | if(_timezone.get is LocalTime()) |
|---|
| | 8210 | return dateTime.toISOExtendedString() ~ fracSecToISOString(cast(int)hnsecs); |
|---|
| | 8211 | |
|---|
| | 8212 | if(_timezone.get is UTC()) |
|---|
| | 8213 | return dateTime.toISOExtendedString() ~ fracSecToISOString(cast(int)hnsecs) ~ "Z"; |
|---|
| | 8214 | |
|---|
| | 8215 | immutable utcOffset = cast(int)convert!("hnsecs", "minutes")(stdTime - adjustedTime); |
|---|
| | 8216 | |
|---|
| | 8217 | return dateTime.toISOExtendedString() ~ fracSecToISOString(cast(int)hnsecs) ~ SimpleTimeZone.toISOString(utcOffset); |
|---|
| | 8218 | } |
|---|
| | 8219 | catch(Exception e) |
|---|
| | 8220 | assert(0, "format() threw."); |
|---|
| | 8221 | } |
|---|
| | 8222 | |
|---|
| | 8223 | unittest |
|---|
| | 8224 | { |
|---|
| | 8225 | version(testStdDateTime) |
|---|
| | 8226 | { |
|---|
| | 8227 | //Test A.D. |
|---|
| | 8228 | assertPred!"=="(SysTime(DateTime.init, UTC()).toISOExtendedString(), "0001-01-01T00:00:00Z"); |
|---|
| | 8229 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1), UTC()).toISOExtendedString(), "0001-01-01T00:00:00.0000001Z"); |
|---|
| | 8230 | |
|---|
| | 8231 | assertPred!"=="(SysTime(DateTime(9, 12, 4, 0, 0, 0)).toISOExtendedString(), "0009-12-04T00:00:00"); |
|---|
| | 8232 | assertPred!"=="(SysTime(DateTime(99, 12, 4, 5, 6, 12)).toISOExtendedString(), "0099-12-04T05:06:12"); |
|---|
| | 8233 | assertPred!"=="(SysTime(DateTime(999, 12, 4, 13, 44, 59)).toISOExtendedString(), "0999-12-04T13:44:59"); |
|---|
| | 8234 | assertPred!"=="(SysTime(DateTime(9999, 7, 4, 23, 59, 59)).toISOExtendedString(), "9999-07-04T23:59:59"); |
|---|
| | 8235 | assertPred!"=="(SysTime(DateTime(10000, 10, 20, 1, 1, 1)).toISOExtendedString(), "+10000-10-20T01:01:01"); |
|---|
| | 8236 | |
|---|
| | 8237 | assertPred!"=="(SysTime(DateTime(9, 12, 4, 0, 0, 0), FracSec.from!"msecs"(42)).toISOExtendedString(), "0009-12-04T00:00:00.042"); |
|---|
| | 8238 | assertPred!"=="(SysTime(DateTime(99, 12, 4, 5, 6, 12), FracSec.from!"msecs"(100)).toISOExtendedString(), "0099-12-04T05:06:12.1"); |
|---|
| | 8239 | assertPred!"=="(SysTime(DateTime(999, 12, 4, 13, 44, 59), FracSec.from!"usecs"(45020)).toISOExtendedString(), "0999-12-04T13:44:59.04502"); |
|---|
| | 8240 | assertPred!"=="(SysTime(DateTime(9999, 7, 4, 23, 59, 59), FracSec.from!"hnsecs"(12)).toISOExtendedString(), "9999-07-04T23:59:59.0000012"); |
|---|
| | 8241 | assertPred!"=="(SysTime(DateTime(10000, 10, 20, 1, 1, 1), FracSec.from!"hnsecs"(507890)).toISOExtendedString(), "+10000-10-20T01:01:01.050789"); |
|---|
| | 8242 | |
|---|
| | 8243 | //Test B.C. |
|---|
| | 8244 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).toISOExtendedString(), "0000-12-31T23:59:59.9999999Z"); |
|---|
| | 8245 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1), UTC()).toISOExtendedString(), "0000-12-31T23:59:59.0000001Z"); |
|---|
| | 8246 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), UTC()).toISOExtendedString(), "0000-12-31T23:59:59Z"); |
|---|
| | 8247 | |
|---|
| | 8248 | assertPred!"=="(SysTime(DateTime(0, 12, 4, 0, 12, 4)).toISOExtendedString(), "0000-12-04T00:12:04"); |
|---|
| | 8249 | assertPred!"=="(SysTime(DateTime(-9, 12, 4, 0, 0, 0)).toISOExtendedString(), "-0009-12-04T00:00:00"); |
|---|
| | 8250 | assertPred!"=="(SysTime(DateTime(-99, 12, 4, 5, 6, 12)).toISOExtendedString(), "-0099-12-04T05:06:12"); |
|---|
| | 8251 | assertPred!"=="(SysTime(DateTime(-999, 12, 4, 13, 44, 59)).toISOExtendedString(), "-0999-12-04T13:44:59"); |
|---|
| | 8252 | assertPred!"=="(SysTime(DateTime(-9999, 7, 4, 23, 59, 59)).toISOExtendedString(), "-9999-07-04T23:59:59"); |
|---|
| | 8253 | assertPred!"=="(SysTime(DateTime(-10000, 10, 20, 1, 1, 1)).toISOExtendedString(), "-10000-10-20T01:01:01"); |
|---|
| | 8254 | |
|---|
| | 8255 | assertPred!"=="(SysTime(DateTime(0, 12, 4, 0, 0, 0), FracSec.from!"msecs"(7)).toISOExtendedString(), "0000-12-04T00:00:00.007"); |
|---|
| | 8256 | assertPred!"=="(SysTime(DateTime(-9, 12, 4, 0, 0, 0), FracSec.from!"msecs"(42)).toISOExtendedString(), "-0009-12-04T00:00:00.042"); |
|---|
| | 8257 | assertPred!"=="(SysTime(DateTime(-99, 12, 4, 5, 6, 12), FracSec.from!"msecs"(100)).toISOExtendedString(), "-0099-12-04T05:06:12.1"); |
|---|
| | 8258 | assertPred!"=="(SysTime(DateTime(-999, 12, 4, 13, 44, 59), FracSec.from!"usecs"(45020)).toISOExtendedString(), "-0999-12-04T13:44:59.04502"); |
|---|
| | 8259 | assertPred!"=="(SysTime(DateTime(-9999, 7, 4, 23, 59, 59), FracSec.from!"hnsecs"(12)).toISOExtendedString(), "-9999-07-04T23:59:59.0000012"); |
|---|
| | 8260 | assertPred!"=="(SysTime(DateTime(-10000, 10, 20, 1, 1, 1), FracSec.from!"hnsecs"(507890)).toISOExtendedString(), "-10000-10-20T01:01:01.050789"); |
|---|
| | 8261 | |
|---|
| | 8262 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 8263 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 8264 | static assert(__traits(compiles, cast(TimeOfDay)cst)); |
|---|
| | 8265 | //static assert(__traits(compiles, cast(TimeOfDay)ist)); |
|---|
| | 8266 | |
|---|
| | 8267 | //Verify Examples. |
|---|
| | 8268 | assert(SysTime(DateTime(2010, 7, 4, 7, 6, 12)).toISOExtendedString() == "2010-07-04T07:06:12"); |
|---|
| | 8269 | assert(SysTime(DateTime(1998, 12, 25, 2, 15, 0), FracSec.from!"msecs"(24)).toISOExtendedString() == "1998-12-25T02:15:00.024"); |
|---|
| | 8270 | assert(SysTime(DateTime(0, 1, 5, 23, 9, 59)).toISOExtendedString() == "0000-01-05T23:09:59"); |
|---|
| | 8271 | assert(SysTime(DateTime(-4, 1, 5, 0, 0, 2), FracSec.from!"hnsecs"(520920)).toISOExtendedString() == "-0004-01-05T00:00:02.052092"); |
|---|
| | 8272 | } |
|---|
| | 8273 | } |
|---|
| | 8274 | |
|---|
| | 8275 | /++ |
|---|
| | 8276 | Converts this SysTime to a string with the format YYYY-Mon-DD HH:MM:SS.FFFFFFFTZ |
|---|
| | 8277 | (where F is fractional seconds and TZ is time zone). |
|---|
| | 8278 | |
|---|
| | 8279 | Note that the number of digits in the fractional seconds varies with the |
|---|
| | 8280 | number of fractional seconds. It's a maximum of 7 (which would be hnsecs), |
|---|
| | 8281 | but only has as many as are necessary to hold the correct value (so no |
|---|
| | 8282 | trailing zeroes), and if there are no fractional seconds, then there is |
|---|
| | 8283 | no decimal point. |
|---|
| | 8284 | |
|---|
| | 8285 | If this SysTime's time zone is LocalTime, then TZ is empty. If the time |
|---|
| | 8286 | zone is UTC, then it is "Z". Otherwise, it is the offset from UTC |
|---|
| | 8287 | (e.g. +1:00 or -7:00). Note that the offset from UTC is $(I not) enough |
|---|
| | 8288 | to uniquely identify the time zone. |
|---|
| | 8289 | |
|---|
| | 8290 | Time zone offsets will be in the form +HH:MM or -HH:MM. |
|---|
| | 8291 | |
|---|
| | 8292 | Examples: |
|---|
| | 8293 | -------------------- |
|---|
| | 8294 | assert(SysTime(DateTime(2010, 7, 4, 7, 6, 12)).toSimpleString() == |
|---|
| | 8295 | "2010-Jul-04 07:06:12"); |
|---|
| | 8296 | assert(SysTime(DateTime(1998, 12, 25, 2, 15, 0), FracSec.from!"msecs"(24)).toSimpleString() == |
|---|
| | 8297 | "1998-Dec-25 02:15:00.024"); |
|---|
| | 8298 | assert(SysTime(DateTime(0, 1, 5, 23, 9, 59)).toSimpleString() == |
|---|
| | 8299 | "0000-Jan-05 23:09:59"); |
|---|
| | 8300 | assert(SysTime(DateTime(-4, 1, 5, 0, 0, 2), FracSec.from!"hnsecs"(520920)).toSimpleString() == |
|---|
| | 8301 | "-0004-Jan-05 00:00:02.052092"); |
|---|
| | 8302 | -------------------- |
|---|
| | 8303 | +/ |
|---|
| | 8304 | string toSimpleString() const nothrow |
|---|
| | 8305 | { |
|---|
| | 8306 | try |
|---|
| | 8307 | { |
|---|
| | 8308 | immutable adjustedTime = adjTime; |
|---|
| | 8309 | long hnsecs = adjustedTime; |
|---|
| | 8310 | |
|---|
| | 8311 | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| | 8312 | |
|---|
| | 8313 | if(hnsecs < 0) |
|---|
| | 8314 | { |
|---|
| | 8315 | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| | 8316 | --days; |
|---|
| | 8317 | } |
|---|
| | 8318 | |
|---|
| | 8319 | auto hour = splitUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| | 8320 | auto minute = splitUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| | 8321 | auto second = splitUnitsFromHNSecs!"seconds"(hnsecs); |
|---|
| | 8322 | |
|---|
| | 8323 | auto dateTime = DateTime(Date(cast(int)days), TimeOfDay(cast(int)hour, cast(int)minute, cast(int)second)); |
|---|
| | 8324 | auto fracSecStr = fracSecToISOString(cast(int)hnsecs); |
|---|
| | 8325 | |
|---|
| | 8326 | if(_timezone.get is LocalTime()) |
|---|
| | 8327 | return dateTime.toSimpleString() ~ fracSecToISOString(cast(int)hnsecs); |
|---|
| | 8328 | |
|---|
| | 8329 | if(_timezone.get is UTC()) |
|---|
| | 8330 | return dateTime.toSimpleString() ~ fracSecToISOString(cast(int)hnsecs) ~ "Z"; |
|---|
| | 8331 | |
|---|
| | 8332 | immutable utcOffset = cast(int)convert!("hnsecs", "minutes")(stdTime - adjustedTime); |
|---|
| | 8333 | |
|---|
| | 8334 | return dateTime.toSimpleString() ~ fracSecToISOString(cast(int)hnsecs) ~ SimpleTimeZone.toISOString(utcOffset); |
|---|
| | 8335 | } |
|---|
| | 8336 | catch(Exception e) |
|---|
| | 8337 | assert(0, "format() threw."); |
|---|
| | 8338 | } |
|---|
| | 8339 | |
|---|
| | 8340 | unittest |
|---|
| | 8341 | { |
|---|
| | 8342 | version(testStdDateTime) |
|---|
| | 8343 | { |
|---|
| | 8344 | //Test A.D. |
|---|
| | 8345 | assertPred!"=="(SysTime(DateTime.init, UTC()).toString(), "0001-Jan-01 00:00:00Z"); |
|---|
| | 8346 | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1), UTC()).toString(), "0001-Jan-01 00:00:00.0000001Z"); |
|---|
| | 8347 | |
|---|
| | 8348 | assertPred!"=="(SysTime(DateTime(9, 12, 4, 0, 0, 0)).toSimpleString(), "0009-Dec-04 00:00:00"); |
|---|
| | 8349 | assertPred!"=="(SysTime(DateTime(99, 12, 4, 5, 6, 12)).toSimpleString(), "0099-Dec-04 05:06:12"); |
|---|
| | 8350 | assertPred!"=="(SysTime(DateTime(999, 12, 4, 13, 44, 59)).toSimpleString(), "0999-Dec-04 13:44:59"); |
|---|
| | 8351 | assertPred!"=="(SysTime(DateTime(9999, 7, 4, 23, 59, 59)).toSimpleString(), "9999-Jul-04 23:59:59"); |
|---|
| | 8352 | assertPred!"=="(SysTime(DateTime(10000, 10, 20, 1, 1, 1)).toSimpleString(), "+10000-Oct-20 01:01:01"); |
|---|
| | 8353 | |
|---|
| | 8354 | assertPred!"=="(SysTime(DateTime(9, 12, 4, 0, 0, 0), FracSec.from!"msecs"(42)).toSimpleString(), "0009-Dec-04 00:00:00.042"); |
|---|
| | 8355 | assertPred!"=="(SysTime(DateTime(99, 12, 4, 5, 6, 12), FracSec.from!"msecs"(100)).toSimpleString(), "0099-Dec-04 05:06:12.1"); |
|---|
| | 8356 | assertPred!"=="(SysTime(DateTime(999, 12, 4, 13, 44, 59), FracSec.from!"usecs"(45020)).toSimpleString(), "0999-Dec-04 13:44:59.04502"); |
|---|
| | 8357 | assertPred!"=="(SysTime(DateTime(9999, 7, 4, 23, 59, 59), FracSec.from!"hnsecs"(12)).toSimpleString(), "9999-Jul-04 23:59:59.0000012"); |
|---|
| | 8358 | assertPred!"=="(SysTime(DateTime(10000, 10, 20, 1, 1, 1), FracSec.from!"hnsecs"(507890)).toSimpleString(), "+10000-Oct-20 01:01:01.050789"); |
|---|
| | 8359 | |
|---|
| | 8360 | //Test B.C. |
|---|
| | 8361 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).toSimpleString(), "0000-Dec-31 23:59:59.9999999Z"); |
|---|
| | 8362 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1), UTC()).toSimpleString(), "0000-Dec-31 23:59:59.0000001Z"); |
|---|
| | 8363 | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), UTC()).toSimpleString(), "0000-Dec-31 23:59:59Z"); |
|---|
| | 8364 | |
|---|
| | 8365 | assertPred!"=="(SysTime(DateTime(0, 12, 4, 0, 12, 4)).toSimpleString(), "0000-Dec-04 00:12:04"); |
|---|
| | 8366 | assertPred!"=="(SysTime(DateTime(-9, 12, 4, 0, 0, 0)).toSimpleString(), "-0009-Dec-04 00:00:00"); |
|---|
| | 8367 | assertPred!"=="(SysTime(DateTime(-99, 12, 4, 5, 6, 12)).toSimpleString(), "-0099-Dec-04 05:06:12"); |
|---|
| | 8368 | assertPred!"=="(SysTime(DateTime(-999, 12, 4, 13, 44, 59)).toSimpleString(), "-0999-Dec-04 13:44:59"); |
|---|
| | 8369 | assertPred!"=="(SysTime(DateTime(-9999, 7, 4, 23, 59, 59)).toSimpleString(), "-9999-Jul-04 23:59:59"); |
|---|
| | 8370 | assertPred!"=="(SysTime(DateTime(-10000, 10, 20, 1, 1, 1)).toSimpleString(), "-10000-Oct-20 01:01:01"); |
|---|
| | 8371 | |
|---|
| | 8372 | assertPred!"=="(SysTime(DateTime(0, 12, 4, 0, 0, 0), FracSec.from!"msecs"(7)).toSimpleString(), "0000-Dec-04 00:00:00.007"); |
|---|
| | 8373 | assertPred!"=="(SysTime(DateTime(-9, 12, 4, 0, 0, 0), FracSec.from!"msecs"(42)).toSimpleString(), "-0009-Dec-04 00:00:00.042"); |
|---|
| | 8374 | assertPred!"=="(SysTime(DateTime(-99, 12, 4, 5, 6, 12), FracSec.from!"msecs"(100)).toSimpleString(), "-0099-Dec-04 05:06:12.1"); |
|---|
| | 8375 | assertPred!"=="(SysTime(DateTime(-999, 12, 4, 13, 44, 59), FracSec.from!"usecs"(45020)).toSimpleString(), "-0999-Dec-04 13:44:59.04502"); |
|---|
| | 8376 | assertPred!"=="(SysTime(DateTime(-9999, 7, 4, 23, 59, 59), FracSec.from!"hnsecs"(12)).toSimpleString(), "-9999-Jul-04 23:59:59.0000012"); |
|---|
| | 8377 | assertPred!"=="(SysTime(DateTime(-10000, 10, 20, 1, 1, 1), FracSec.from!"hnsecs"(507890)).toSimpleString(), "-10000-Oct-20 01:01:01.050789"); |
|---|
| | 8378 | |
|---|
| | 8379 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 8380 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 8381 | static assert(__traits(compiles, cast(TimeOfDay)cst)); |
|---|
| | 8382 | //static assert(__traits(compiles, cast(TimeOfDay)ist)); |
|---|
| | 8383 | |
|---|
| | 8384 | //Verify Examples. |
|---|
| | 8385 | assert(SysTime(DateTime(2010, 7, 4, 7, 6, 12)).toSimpleString() == "2010-Jul-04 07:06:12"); |
|---|
| | 8386 | assert(SysTime(DateTime(1998, 12, 25, 2, 15, 0), FracSec.from!"msecs"(24)).toSimpleString() == "1998-Dec-25 02:15:00.024"); |
|---|
| | 8387 | assert(SysTime(DateTime(0, 1, 5, 23, 9, 59)).toSimpleString() == "0000-Jan-05 23:09:59"); |
|---|
| | 8388 | assert(SysTime(DateTime(-4, 1, 5, 0, 0, 2), FracSec.from!"hnsecs"(520920)).toSimpleString() == "-0004-Jan-05 00:00:02.052092"); |
|---|
| | 8389 | } |
|---|
| | 8390 | } |
|---|
| | 8391 | |
|---|
| | 8392 | |
|---|
| | 8393 | /+ |
|---|
| | 8394 | Converts this SysTime to a string. |
|---|
| | 8395 | +/ |
|---|
| | 8396 | //Due to bug http://d.puremagic.com/issues/show_bug.cgi?id=3715 , we can't |
|---|
| | 8397 | //have versions of toString() with extra modifiers, so we define one version |
|---|
| | 8398 | //with modifiers and one without. |
|---|
| | 8399 | string toString() |
|---|
| | 8400 | { |
|---|
| | 8401 | return toSimpleString(); |
|---|
| | 8402 | } |
|---|
| | 8403 | |
|---|
| | 8404 | /++ |
|---|
| | 8405 | Converts this SysTime to a string. |
|---|
| | 8406 | +/ |
|---|
| | 8407 | //Due to bug http://d.puremagic.com/issues/show_bug.cgi?id=3715 , we can't |
|---|
| | 8408 | //have versions of toString() with extra modifiers, so we define one version |
|---|
| | 8409 | //with modifiers and one without. |
|---|
| | 8410 | string toString() const nothrow |
|---|
| | 8411 | { |
|---|
| | 8412 | return toSimpleString(); |
|---|
| | 8413 | } |
|---|
| | 8414 | |
|---|
| | 8415 | unittest |
|---|
| | 8416 | { |
|---|
| | 8417 | version(testStdDateTime) |
|---|
| | 8418 | { |
|---|
| | 8419 | auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 8420 | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 8421 | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| | 8422 | static assert(__traits(compiles, st.toString())); |
|---|
| | 8423 | static assert(__traits(compiles, cst.toString())); |
|---|
| | 8424 | //static assert(__traits(compiles, ist.toString())); |
|---|
| | 8425 | } |
|---|
| | 8426 | } |
|---|
| | 8427 | |
|---|
| | 8428 | |
|---|
| | 8429 | /++ |
|---|
| | 8430 | Creates a SysTime from a string with the format YYYYMMDDTHHMMSS.FFFFFFFTZ |
|---|
| | 8431 | (where F is fractional seconds is time zone). Whitespace is stripped from |
|---|
| | 8432 | the given string. |
|---|
| | 8433 | |
|---|
| | 8434 | The exact format is exactly as described in toISOString() except that |
|---|
| | 8435 | trailing zeroes are permitted - including having fractional seconds with |
|---|
| | 8436 | all zeroes. However, a decimal point with nothing following it is invalid. |
|---|
| | 8437 | |
|---|
| | 8438 | If there is no time zone in the string, then LocalTime is used. If the |
|---|
| | 8439 | time zone is "Z", then UTC is used. Otherwise, a SimpleTimeZone which |
|---|
| | 8440 | corresponds to the given offset from UTC is used. If you wish the |
|---|
| | 8441 | returned SysTime to be a particular time zone, then pass in that time |
|---|
| | 8442 | zone and the SysTime to be returned will be converted to that time zone |
|---|
| | 8443 | (though it will still be read in as whatever time zone is in its string). |
|---|
| | 8444 | |
|---|
| | 8445 | The accepted formats for time zone offsets are +H, -H, +HH, -HH, +H:MM, |
|---|
| | 8446 | -H:MM, +HH:MM, and -HH:MM. |
|---|
| | 8447 | |
|---|
| | 8448 | Params: |
|---|
| | 8449 | isoString = A string formatted in the ISO format for dates and times. |
|---|
| | 8450 | tz = The time zone to convert the given time to (no conversion |
|---|
| | 8451 | occurs if null). |
|---|
| | 8452 | |
|---|
| | 8453 | Throws: |
|---|
| | 8454 | DateTimeException if the given string is not in the ISO format or if |
|---|
| | 8455 | the resulting SysTime would not be valid. |
|---|
| | 8456 | |
|---|
| | 8457 | Examples: |
|---|
| | 8458 | -------------------- |
|---|
| | 8459 | assert(SysTime.fromISOString("20100704T070612") == |
|---|
| | 8460 | SysTime(DateTime(2010, 7, 4, 7, 6, 12))); |
|---|
| | 8461 | assert(SysTime.fromISOString("19981225T021500.007") == |
|---|
| | 8462 | SysTime(DateTime(1998, 12, 25, 2, 15, 0), FracSec.from!"msecs"(7))); |
|---|
| | 8463 | assert(SysTime.fromISOString("00000105T230959.00002") == |
|---|
| | 8464 | SysTime(DateTime(0, 1, 5, 23, 9, 59), FracSec.from!"usecs"(20))); |
|---|
| | 8465 | assert(SysTime.fromISOString("-00040105T000002") == |
|---|
| | 8466 | SysTime(DateTime(-4, 1, 5, 0, 0, 2))); |
|---|
| | 8467 | assert(SysTime.fromISOString(" 20100704T070612 ") == |
|---|
| | 8468 | SysTime(DateTime(2010, 7, 4, 7, 6, 12))); |
|---|
| | 8469 | |
|---|
| | 8470 | assert(SysTime.fromISOString("20100704T070612Z") == |
|---|
| | 8471 | SysTime(DateTime(2010, 7, 4, 7, 6, 12), UTC())); |
|---|
| | 8472 | assert(SysTime.fromISOString("20100704T070612-8:00") == |
|---|
| | 8473 | SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(-480))); |
|---|
| | 8474 | assert(SysTime.fromISOString("20100704T070612+8:00") == |
|---|
| | 8475 | SysTime(DateTime(2010, 7, 3, 7, 6, 12), new SimpleTimeZone(480))); |
|---|
| | 8476 | -------------------- |
|---|
| | 8477 | +/ |
|---|
| | 8478 | static SysTime fromISOString(S)(in S isoString, immutable TimeZone tz = null) |
|---|
| | 8479 | if(isSomeString!S) |
|---|
| | 8480 | { |
|---|
| | 8481 | auto dstr = to!dstring(strip(isoString)); |
|---|
| | 8482 | immutable skipFirst = dstr.startsWith("+", "-") != 0; |
|---|
| | 8483 | |
|---|
| | 8484 | auto found = (skipFirst ? dstr[1..$] : dstr).find(".", "Z", "+", "-"); |
|---|
| | 8485 | auto dateTimeStr = dstr[0 .. $ - found[0].length]; |
|---|
| | 8486 | |
|---|
| | 8487 | dstring fracSecStr; |
|---|
| | 8488 | dstring zoneStr; |
|---|
| | 8489 | |
|---|
| | 8490 | if(found[1] != 0) |
|---|
| | 8491 | { |
|---|
| | 8492 | if(found[1] == 1) |
|---|
| | 8493 | { |
|---|
| | 8494 | auto foundTZ = found[0].find("Z", "+", "-"); |
|---|
| | 8495 | |
|---|
| | 8496 | if(foundTZ[1] != 0) |
|---|
| | 8497 | { |
|---|
| | 8498 | fracSecStr = found[0][0 .. $ - foundTZ[0].length]; |
|---|
| | 8499 | zoneStr = foundTZ[0]; |
|---|
| | 8500 | } |
|---|
| | 8501 | else |
|---|
| | 8502 | fracSecStr = found[0]; |
|---|
| | 8503 | } |
|---|
| | 8504 | else |
|---|
| | 8505 | zoneStr = found[0]; |
|---|
| | 8506 | } |
|---|
| | 8507 | |
|---|
| | 8508 | try |
|---|
| | 8509 | { |
|---|
| | 8510 | auto dateTime = DateTime.fromISOString(dateTimeStr); |
|---|
| | 8511 | auto fracSec = fracSecFromISOString(fracSecStr); |
|---|
| | 8512 | DTRebindable!(immutable TimeZone) parsedZone; |
|---|
| | 8513 | |
|---|
| | 8514 | if(zoneStr.empty) |
|---|
| | 8515 | parsedZone = LocalTime(); |
|---|
| | 8516 | else if(zoneStr == "Z") |
|---|
| | 8517 | parsedZone = UTC(); |
|---|
| | 8518 | else |
|---|
| | 8519 | parsedZone = SimpleTimeZone.fromISOString(zoneStr); |
|---|
| | 8520 | |
|---|
| | 8521 | auto retval = SysTime(dateTime, fracSec, parsedZone.get); |
|---|
| | 8522 | |
|---|
| | 8523 | if(tz !is null) |
|---|
| | 8524 | retval.timezone = tz; |
|---|
| | 8525 | |
|---|
| | 8526 | return retval; |
|---|
| | 8527 | } |
|---|
| | 8528 | catch(DateTimeException dte) |
|---|
| | 8529 | throw new DateTimeException(format("Invalid ISO String: %s", isoString)); |
|---|
| | 8530 | } |
|---|
| | 8531 | |
|---|
| | 8532 | unittest |
|---|
| | 8533 | { |
|---|
| | 8534 | version(testStdDateTime) |
|---|
| | 8535 | { |
|---|
| | 8536 | assertThrown!DateTimeException(SysTime.fromISOString("")); |
|---|
| | 8537 | assertThrown!DateTimeException(SysTime.fromISOString("20100704000000")); |
|---|
| | 8538 | assertThrown!DateTimeException(SysTime.fromISOString("20100704 000000")); |
|---|
| | 8539 | assertThrown!DateTimeException(SysTime.fromISOString("20100704t000000")); |
|---|
| | 8540 | assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000.")); |
|---|
| | 8541 | assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000.A")); |
|---|
| | 8542 | assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000.Z")); |
|---|
| | 8543 | assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000.00000000")); |
|---|
| | 8544 | assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000.00000000")); |
|---|
| | 8545 | assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000+")); |
|---|
| | 8546 | assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000-")); |
|---|
| | 8547 | assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000:")); |
|---|
| | 8548 | assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000-:")); |
|---|
| | 8549 | assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000+:")); |
|---|
| | 8550 | assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000-1:")); |
|---|
| | 8551 | assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000+1:")); |
|---|
| | 8552 | assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000+1:0")); |
|---|
| | 8553 | assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000-24.00")); |
|---|
| | 8554 | assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000+24.00")); |
|---|
| | 8555 | |
|---|
| | 8556 | assertThrown!DateTimeException(SysTime.fromISOString("2010-07-0400:00:00")); |
|---|
| | 8557 | assertThrown!DateTimeException(SysTime.fromISOString("2010-07-04 00:00:00")); |
|---|
| | 8558 | assertThrown!DateTimeException(SysTime.fromISOString("2010-07-04t00:00:00")); |
|---|
| | 8559 | assertThrown!DateTimeException(SysTime.fromISOString("2010-07-04T00:00:00.")); |
|---|
| | 8560 | |
|---|
| | 8561 | assertThrown!DateTimeException(SysTime.fromISOString("2010-Jul-0400:00:00")); |
|---|
| | 8562 | assertThrown!DateTimeException(SysTime.fromISOString("2010-Jul-04 00:00:00")); |
|---|
| | 8563 | assertThrown!DateTimeException(SysTime.fromISOString("2010-Jul-04t00:00:00")); |
|---|
| | 8564 | assertThrown!DateTimeException(SysTime.fromISOString("2010-Jul-04T00:00:00")); |
|---|
| | 8565 | assertThrown!DateTimeException(SysTime.fromISOString("2010-Jul-04 00:00:00.")); |
|---|
| | 8566 | |
|---|
| | 8567 | assertThrown!DateTimeException(SysTime.fromISOString("2010-12-22T172201")); |
|---|
| | 8568 | assertThrown!DateTimeException(SysTime.fromISOString("2010-Dec-22 17:22:01")); |
|---|
| | 8569 | |
|---|
| | 8570 | assertPred!"=="(SysTime.fromISOString("20101222T172201"), SysTime(DateTime(2010, 12, 22, 17, 22, 01))); |
|---|
| | 8571 | assertPred!"=="(SysTime.fromISOString("19990706T123033"), SysTime(DateTime(1999, 7, 6, 12, 30, 33))); |
|---|
| | 8572 | assertPred!"=="(SysTime.fromISOString("-19990706T123033"), SysTime(DateTime(-1999, 7, 6, 12, 30, 33))); |
|---|
| | 8573 | assertPred!"=="(SysTime.fromISOString("+019990706T123033"), SysTime(DateTime(1999, 7, 6, 12, 30, 33))); |
|---|
| | 8574 | assertPred!"=="(SysTime.fromISOString("19990706T123033 "), SysTime(DateTime(1999, 7, 6, 12, 30, 33))); |
|---|
| | 8575 | assertPred!"=="(SysTime.fromISOString(" 19990706T123033"), SysTime(DateTime(1999, 7, 6, 12, 30, 33))); |
|---|
| | 8576 | assertPred!"=="(SysTime.fromISOString(" 19990706T123033 "), SysTime(DateTime(1999, 7, 6, 12, 30, 33))); |
|---|
| | 8577 | |
|---|
| | 8578 | assertPred!"=="(SysTime.fromISOString("19070707T121212.0"), SysTime(DateTime(1907, 07, 07, 12, 12, 12))); |
|---|
| | 8579 | assertPred!"=="(SysTime.fromISOString("19070707T121212.0000000"), SysTime(DateTime(1907, 07, 07, 12, 12, 12))); |
|---|
| | 8580 | assertPred!"=="(SysTime.fromISOString("19070707T121212.0000001"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"hnsecs"(1))); |
|---|
| | 8581 | assertPred!"=="(SysTime.fromISOString("19070707T121212.000001"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"usecs"(1))); |
|---|
| | 8582 | assertPred!"=="(SysTime.fromISOString("19070707T121212.0000010"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"usecs"(1))); |
|---|
| | 8583 | assertPred!"=="(SysTime.fromISOString("19070707T121212.001"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"msecs"(1))); |
|---|
| | 8584 | assertPred!"=="(SysTime.fromISOString("19070707T121212.0010000"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"msecs"(1))); |
|---|
| | 8585 | |
|---|
| | 8586 | assertPred!"=="(SysTime.fromISOString("20101222T172201Z"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), UTC())); |
|---|
| | 8587 | assertPred!"=="(SysTime.fromISOString("20101222T172201-1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-60))); |
|---|
| | 8588 | assertPred!"=="(SysTime.fromISOString("20101222T172201-1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-60))); |
|---|
| | 8589 | assertPred!"=="(SysTime.fromISOString("20101222T172201-1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-90))); |
|---|
| | 8590 | assertPred!"=="(SysTime.fromISOString("20101222T172201-8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-480))); |
|---|
| | 8591 | assertPred!"=="(SysTime.fromISOString("20101222T172201+1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(60))); |
|---|
| | 8592 | assertPred!"=="(SysTime.fromISOString("20101222T172201+1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(60))); |
|---|
| | 8593 | assertPred!"=="(SysTime.fromISOString("20101222T172201+1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(90))); |
|---|
| | 8594 | assertPred!"=="(SysTime.fromISOString("20101222T172201+8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(480))); |
|---|
| | 8595 | |
|---|
| | 8596 | assertPred!"=="(SysTime.fromISOString("20101103T065106.57159Z"), SysTime(DateTime(2010, 11, 3, 6, 51, 6), FracSec.from!"hnsecs"(5715900), UTC())); |
|---|
| | 8597 | |
|---|
| | 8598 | assertPred!"=="(SysTime.fromISOString("20101222T172201.23412Z"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(2_341_200), UTC())); |
|---|
| | 8599 | assertPred!"=="(SysTime.fromISOString("20101222T172201.23112-1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(2_311_200), new SimpleTimeZone(-60))); |
|---|
| | 8600 | assertPred!"=="(SysTime.fromISOString("20101222T172201.45-1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(4_500_000), new SimpleTimeZone(-60))); |
|---|
| | 8601 | assertPred!"=="(SysTime.fromISOString("20101222T172201.1-1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(1_000_000), new SimpleTimeZone(-90))); |
|---|
| | 8602 | assertPred!"=="(SysTime.fromISOString("20101222T172201.55-8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(5_500_000), new SimpleTimeZone(-480))); |
|---|
| | 8603 | assertPred!"=="(SysTime.fromISOString("20101222T172201.1234567+1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(1_234_567), new SimpleTimeZone(60))); |
|---|
| | 8604 | assertPred!"=="(SysTime.fromISOString("20101222T172201.0+1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(0), new SimpleTimeZone(60))); |
|---|
| | 8605 | assertPred!"=="(SysTime.fromISOString("20101222T172201.0000000+1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(0), new SimpleTimeZone(90))); |
|---|
| | 8606 | assertPred!"=="(SysTime.fromISOString("20101222T172201.45+8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(4_500_000), new SimpleTimeZone(480))); |
|---|
| | 8607 | |
|---|
| | 8608 | //Verify Examples. |
|---|
| | 8609 | assert(SysTime.fromISOString("20100704T070612") == SysTime(DateTime(2010, 7, 4, 7, 6, 12))); |
|---|
| | 8610 | assert(SysTime.fromISOString("19981225T021500.007") == SysTime(DateTime(1998, 12, 25, 2, 15, 0), FracSec.from!"msecs"(7))); |
|---|
| | 8611 | assert(SysTime.fromISOString("00000105T230959.00002") == SysTime(DateTime(0, 1, 5, 23, 9, 59), FracSec.from!"usecs"(20))); |
|---|
| | 8612 | assert(SysTime.fromISOString("-00040105T000002") == SysTime(DateTime(-4, 1, 5, 0, 0, 2))); |
|---|
| | 8613 | assert(SysTime.fromISOString(" 20100704T070612 ") == SysTime(DateTime(2010, 7, 4, 7, 6, 12))); |
|---|
| | 8614 | |
|---|
| | 8615 | assert(SysTime.fromISOString("20100704T070612Z") == SysTime(DateTime(2010, 7, 4, 7, 6, 12), UTC())); |
|---|
| | 8616 | assert(SysTime.fromISOString("20100704T070612-8:00") == SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(-480))); |
|---|
| | 8617 | assert(SysTime.fromISOString("20100704T070612+8:00") == SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(480))); |
|---|
| | 8618 | } |
|---|
| | 8619 | } |
|---|
| | 8620 | |
|---|
| | 8621 | |
|---|
| | 8622 | /++ |
|---|
| | 8623 | Creates a SysTime from a string with the format YYYY-MM-DDTHH:MM:SS.FFFFFFFTZ |
|---|
| | 8624 | (where F is fractional seconds is time zone). Whitespace is stripped from the |
|---|
| | 8625 | given string. |
|---|
| | 8626 | |
|---|
| | 8627 | The exact format is exactly as described in toISOExtendedString() except |
|---|
| | 8628 | that trailing zeroes are permitted - including having fractional seconds |
|---|
| | 8629 | with all zeroes. However, a decimal point with nothing following it is |
|---|
| | 8630 | invalid. |
|---|
| | 8631 | |
|---|
| | 8632 | If there is no time zone in the string, then LocalTime is used. If the |
|---|
| | 8633 | time zone is "Z", then UTC is used. Otherwise, a SimpleTimeZone which |
|---|
| | 8634 | corresponds to the given offset from UTC is used. If you wish the |
|---|
| | 8635 | returned SysTime to be a particular time zone, then pass in that time |
|---|
| | 8636 | zone and the SysTime to be returned will be converted to that time zone |
|---|
| | 8637 | (though it will still be read in as whatever time zone is in its string). |
|---|
| | 8638 | |
|---|
| | 8639 | The accepted formats for time zone offsets are +H, -H, +HH, -HH, +H:MM, |
|---|
| | 8640 | -H:MM, +HH:MM, and -HH:MM. |
|---|
| | 8641 | |
|---|
| | 8642 | Params: |
|---|
| | 8643 | isoString = A string formatted in the ISO Extended format for dates |
|---|
| | 8644 | and times. |
|---|
| | 8645 | tz = The time zone to convert the given time to (no conversion |
|---|
| | 8646 | occurs if null). |
|---|
| | 8647 | |
|---|
| | 8648 | Throws: |
|---|
| | 8649 | DateTimeException if the given string is not in the ISO format or if |
|---|
| | 8650 | the resulting SysTime would not be valid. |
|---|
| | 8651 | |
|---|
| | 8652 | Examples: |
|---|
| | 8653 | -------------------- |
|---|
| | 8654 | assert(SysTime.fromISOExtendedString("2010-07-04T07:06:12") == |
|---|
| | 8655 | SysTime(DateTime(2010, 7, 4, 7, 6, 12))); |
|---|
| | 8656 | assert(SysTime.fromISOExtendedString("1998-12-25T02:15:00.007") == |
|---|
| | 8657 | SysTime(DateTime(1998, 12, 25, 2, 15, 0), FracSec.from!"msecs"(7))); |
|---|
| | 8658 | assert(SysTime.fromISOExtendedString("0000-01-05T23:09:59.00002") == |
|---|
| | 8659 | SysTime(DateTime(0, 1, 5, 23, 9, 59), FracSec.from!"usecs"(20))); |
|---|
| | 8660 | assert(SysTime.fromISOExtendedString("-0004-01-05T00:00:02") == |
|---|
| | 8661 | SysTime(DateTime(-4, 1, 5, 0, 0, 2))); |
|---|
| | 8662 | assert(SysTime.fromISOExtendedString(" 2010-07-04T07:06:12 ") == |
|---|
| | 8663 | SysTime(DateTime(2010, 7, 4, 7, 6, 12))); |
|---|
| | 8664 | |
|---|
| | 8665 | assert(SysTime.fromISOExtendedString("2010-07-04T07:06:12Z") == |
|---|
| | 8666 | SysTime(DateTime(2010, 7, 4, 7, 6, 12), UTC())); |
|---|
| | 8667 | assert(SysTime.fromISOExtendedString("2010-07-04T07:06:12-8:00") == |
|---|
| | 8668 | SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(-480))); |
|---|
| | 8669 | assert(SysTime.fromISOExtendedString("2010-07-04T07:06:12+8:00") == |
|---|
| | 8670 | SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(480))); |
|---|
| | 8671 | -------------------- |
|---|
| | 8672 | +/ |
|---|
| | 8673 | static SysTime fromISOExtendedString(S)(in S isoExtString, immutable TimeZone tz = null) |
|---|
| | 8674 | if(isSomeString!(S)) |
|---|
| | 8675 | { |
|---|
| | 8676 | auto dstr = to!dstring(strip(isoExtString)); |
|---|
| | 8677 | |
|---|
| | 8678 | auto tIndex = dstr.indexOf("T"); |
|---|
| | 8679 | enforce(tIndex != -1, new DateTimeException(format("Invalid ISO Extended String: %s", isoExtString))); |
|---|
| | 8680 | |
|---|
| | 8681 | auto found = dstr[tIndex + 1 .. $].find(".", "Z", "+", "-"); |
|---|
| | 8682 | auto dateTimeStr = dstr[0 .. $ - found[0].length]; |
|---|
| | 8683 | |
|---|
| | 8684 | dstring fracSecStr; |
|---|
| | 8685 | dstring zoneStr; |
|---|
| | 8686 | |
|---|
| | 8687 | if(found[1] != 0) |
|---|
| | 8688 | { |
|---|
| | 8689 | if(found[1] == 1) |
|---|
| | 8690 | { |
|---|
| | 8691 | auto foundTZ = found[0].find("Z", "+", "-"); |
|---|
| | 8692 | |
|---|
| | 8693 | if(foundTZ[1] != 0) |
|---|
| | 8694 | { |
|---|
| | 8695 | fracSecStr = found[0][0 .. $ - foundTZ[0].length]; |
|---|
| | 8696 | zoneStr = foundTZ[0]; |
|---|
| | 8697 | } |
|---|
| | 8698 | else |
|---|
| | 8699 | fracSecStr = found[0]; |
|---|
| | 8700 | } |
|---|
| | 8701 | else |
|---|
| | 8702 | zoneStr = found[0]; |
|---|
| | 8703 | } |
|---|
| | 8704 | |
|---|
| | 8705 | try |
|---|
| | 8706 | { |
|---|
| | 8707 | auto dateTime = DateTime.fromISOExtendedString(dateTimeStr); |
|---|
| | 8708 | auto fracSec = fracSecFromISOString(fracSecStr); |
|---|
| | 8709 | DTRebindable!(immutable TimeZone) parsedZone; |
|---|
| | 8710 | |
|---|
| | 8711 | if(zoneStr.empty) |
|---|
| | 8712 | parsedZone = LocalTime(); |
|---|
| | 8713 | else if(zoneStr == "Z") |
|---|
| | 8714 | parsedZone = UTC(); |
|---|
| | 8715 | else |
|---|
| | 8716 | parsedZone = SimpleTimeZone.fromISOString(zoneStr); |
|---|
| | 8717 | |
|---|
| | 8718 | auto retval = SysTime(dateTime, fracSec, parsedZone.get); |
|---|
| | 8719 | |
|---|
| | 8720 | if(tz !is null) |
|---|
| | 8721 | retval.timezone = tz; |
|---|
| | 8722 | |
|---|
| | 8723 | return retval; |
|---|
| | 8724 | } |
|---|
| | 8725 | catch(DateTimeException dte) |
|---|
| | 8726 | throw new DateTimeException(format("Invalid ISO Extended String: %s", isoExtString)); |
|---|
| | 8727 | } |
|---|
| | 8728 | |
|---|
| | 8729 | unittest |
|---|
| | 8730 | { |
|---|
| | 8731 | version(testStdDateTime) |
|---|
| | 8732 | { |
|---|
| | 8733 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("")); |
|---|
| | 8734 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("20100704000000")); |
|---|
| | 8735 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("20100704 000000")); |
|---|
| | 8736 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("20100704t000000")); |
|---|
| | 8737 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("20100704T000000.")); |
|---|
| | 8738 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("20100704T000000.0")); |
|---|
| | 8739 | |
|---|
| | 8740 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07:0400:00:00")); |
|---|
| | 8741 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04 00:00:00")); |
|---|
| | 8742 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04 00:00:00")); |
|---|
| | 8743 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04t00:00:00")); |
|---|
| | 8744 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04T00:00:00.")); |
|---|
| | 8745 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04T00:00:00.A")); |
|---|
| | 8746 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04T00:00:00.Z")); |
|---|
| | 8747 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04T00:00:00.00000000")); |
|---|
| | 8748 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04T00:00:00.00000000")); |
|---|
| | 8749 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04T00:00:00+")); |
|---|
| | 8750 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04T00:00:00-")); |
|---|
| | 8751 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04T00:00:00:")); |
|---|
| | 8752 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04T00:00:00-:")); |
|---|
| | 8753 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04T00:00:00+:")); |
|---|
| | 8754 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04T00:00:00-1:")); |
|---|
| | 8755 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04T00:00:00+1:")); |
|---|
| | 8756 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04T00:00:00+1:0")); |
|---|
| | 8757 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04T00:00:00-24.00")); |
|---|
| | 8758 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-07-04T00:00:00+24.00")); |
|---|
| | 8759 | |
|---|
| | 8760 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-Jul-0400:00:00")); |
|---|
| | 8761 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-Jul-04t00:00:00")); |
|---|
| | 8762 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-Jul-04 00:00:00.")); |
|---|
| | 8763 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-Jul-04 00:00:00.0")); |
|---|
| | 8764 | |
|---|
| | 8765 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("20101222T172201")); |
|---|
| | 8766 | assertThrown!DateTimeException(SysTime.fromISOExtendedString("2010-Dec-22 17:22:01")); |
|---|
| | 8767 | |
|---|
| | 8768 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01"), SysTime(DateTime(2010, 12, 22, 17, 22, 01))); |
|---|
| | 8769 | assertPred!"=="(SysTime.fromISOExtendedString("1999-07-06T12:30:33"), SysTime(DateTime(1999, 7, 6, 12, 30, 33))); |
|---|
| | 8770 | assertPred!"=="(SysTime.fromISOExtendedString("-1999-07-06T12:30:33"), SysTime(DateTime(-1999, 7, 6, 12, 30, 33))); |
|---|
| | 8771 | assertPred!"=="(SysTime.fromISOExtendedString("+01999-07-06T12:30:33"), SysTime(DateTime(1999, 7, 6, 12, 30, 33))); |
|---|
| | 8772 | assertPred!"=="(SysTime.fromISOExtendedString("1999-07-06T12:30:33 "), SysTime(DateTime(1999, 7, 6, 12, 30, 33))); |
|---|
| | 8773 | assertPred!"=="(SysTime.fromISOExtendedString(" 1999-07-06T12:30:33"), SysTime(DateTime(1999, 7, 6, 12, 30, 33))); |
|---|
| | 8774 | assertPred!"=="(SysTime.fromISOExtendedString(" 1999-07-06T12:30:33 "), SysTime(DateTime(1999, 7, 6, 12, 30, 33))); |
|---|
| | 8775 | |
|---|
| | 8776 | assertPred!"=="(SysTime.fromISOExtendedString("1907-07-07T12:12:12.0"), SysTime(DateTime(1907, 07, 07, 12, 12, 12))); |
|---|
| | 8777 | assertPred!"=="(SysTime.fromISOExtendedString("1907-07-07T12:12:12.0000000"), SysTime(DateTime(1907, 07, 07, 12, 12, 12))); |
|---|
| | 8778 | assertPred!"=="(SysTime.fromISOExtendedString("1907-07-07T12:12:12.0000001"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"hnsecs"(1))); |
|---|
| | 8779 | assertPred!"=="(SysTime.fromISOExtendedString("1907-07-07T12:12:12.000001"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"usecs"(1))); |
|---|
| | 8780 | assertPred!"=="(SysTime.fromISOExtendedString("1907-07-07T12:12:12.0000010"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"usecs"(1))); |
|---|
| | 8781 | assertPred!"=="(SysTime.fromISOExtendedString("1907-07-07T12:12:12.001"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"msecs"(1))); |
|---|
| | 8782 | assertPred!"=="(SysTime.fromISOExtendedString("1907-07-07T12:12:12.0010000"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"msecs"(1))); |
|---|
| | 8783 | |
|---|
| | 8784 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01Z"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), UTC())); |
|---|
| | 8785 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01-1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-60))); |
|---|
| | 8786 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01-1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-60))); |
|---|
| | 8787 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01-1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-90))); |
|---|
| | 8788 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01-8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-480))); |
|---|
| | 8789 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01+1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(60))); |
|---|
| | 8790 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01+1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(60))); |
|---|
| | 8791 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01+1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(90))); |
|---|
| | 8792 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01+8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(480))); |
|---|
| | 8793 | |
|---|
| | 8794 | assertPred!"=="(SysTime.fromISOExtendedString("2010-11-03T06:51:06.57159Z"), SysTime(DateTime(2010, 11, 3, 6, 51, 6), FracSec.from!"hnsecs"(5715900), UTC())); |
|---|
| | 8795 | |
|---|
| | 8796 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01.23412Z"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(2_341_200), UTC())); |
|---|
| | 8797 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01.23112-1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(2_311_200), new SimpleTimeZone(-60))); |
|---|
| | 8798 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01.45-1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(4_500_000), new SimpleTimeZone(-60))); |
|---|
| | 8799 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01.1-1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(1_000_000), new SimpleTimeZone(-90))); |
|---|
| | 8800 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01.55-8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(5_500_000), new SimpleTimeZone(-480))); |
|---|
| | 8801 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01.1234567+1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(1_234_567), new SimpleTimeZone(60))); |
|---|
| | 8802 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01.0+1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(0), new SimpleTimeZone(60))); |
|---|
| | 8803 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01.0000000+1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(0), new SimpleTimeZone(90))); |
|---|
| | 8804 | assertPred!"=="(SysTime.fromISOExtendedString("2010-12-22T17:22:01.45+8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(4_500_000), new SimpleTimeZone(480))); |
|---|
| | 8805 | |
|---|
| | 8806 | //Verify Examples. |
|---|
| | 8807 | assert(SysTime.fromISOExtendedString("2010-07-04T07:06:12") == SysTime(DateTime(2010, 7, 4, 7, 6, 12))); |
|---|
| | 8808 | assert(SysTime.fromISOExtendedString("1998-12-25T02:15:00.007") == SysTime(DateTime(1998, 12, 25, 2, 15, 0), FracSec.from!"msecs"(7))); |
|---|
| | 8809 | assert(SysTime.fromISOExtendedString("0000-01-05T23:09:59.00002") == SysTime(DateTime(0, 1, 5, 23, 9, 59), FracSec.from!"usecs"(20))); |
|---|
| | 8810 | assert(SysTime.fromISOExtendedString("-0004-01-05T00:00:02") == SysTime(DateTime(-4, 1, 5, 0, 0, 2))); |
|---|
| | 8811 | assert(SysTime.fromISOExtendedString(" 2010-07-04T07:06:12 ") == SysTime(DateTime(2010, 7, 4, 7, 6, 12))); |
|---|
| | 8812 | |
|---|
| | 8813 | assert(SysTime.fromISOExtendedString("2010-07-04T07:06:12Z") == SysTime(DateTime(2010, 7, 4, 7, 6, 12), UTC())); |
|---|
| | 8814 | assert(SysTime.fromISOExtendedString("2010-07-04T07:06:12-8:00") == SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(-480))); |
|---|
| | 8815 | assert(SysTime.fromISOExtendedString("2010-07-04T07:06:12+8:00") == SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(480))); |
|---|
| | 8816 | } |
|---|
| | 8817 | } |
|---|
| | 8818 | |
|---|
| | 8819 | |
|---|
| | 8820 | /++ |
|---|
| | 8821 | Creates a SysTime from a string with the format YYYY-MM-DD HH:MM:SS.FFFFFFFTZ |
|---|
| | 8822 | (where F is fractional seconds is time zone). Whitespace is stripped from the |
|---|
| | 8823 | given string. |
|---|
| | 8824 | |
|---|
| | 8825 | The exact format is exactly as described in toSimpleString() except that |
|---|
| | 8826 | trailing zeroes are permitted - including having fractional seconds with |
|---|
| | 8827 | all zeroes. However, a decimal point with nothing following it is invalid. |
|---|
| | 8828 | |
|---|
| | 8829 | If there is no time zone in the string, then LocalTime is used. If the |
|---|
| | 8830 | time zone is "Z", then UTC is used. Otherwise, a SimpleTimeZone which |
|---|
| | 8831 | corresponds to the given offset from UTC is used. If you wish the |
|---|
| | 8832 | returned SysTime to be a particular time zone, then pass in that time |
|---|
| | 8833 | zone and the SysTime to be returned will be converted to that time zone |
|---|
| | 8834 | (though it will still be read in as whatever time zone is in its string). |
|---|
| | 8835 | |
|---|
| | 8836 | The accepted formats for time zone offsets are +H, -H, +HH, -HH, +H:MM, |
|---|
| | 8837 | -H:MM, +HH:MM, and -HH:MM. |
|---|
| | 8838 | |
|---|
| | 8839 | |
|---|
| | 8840 | Params: |
|---|
| | 8841 | simpleString = A string formatted in the way that toSimpleString() |
|---|
| | 8842 | formats dates and times. |
|---|
| | 8843 | tz = The time zone to convert the given time to (no |
|---|
| | 8844 | conversion occurs if null). |
|---|
| | 8845 | |
|---|
| | 8846 | Throws: |
|---|
| | 8847 | DateTimeException if the given string is not in the ISO format or if |
|---|
| | 8848 | the resulting SysTime would not be valid. |
|---|
| | 8849 | |
|---|
| | 8850 | Examples: |
|---|
| | 8851 | -------------------- |
|---|
| | 8852 | assert(SysTime.fromSimpleString("2010-Jul-04 07:06:12") == |
|---|
| | 8853 | SysTime(DateTime(2010, 7, 4, 7, 6, 12))); |
|---|
| | 8854 | assert(SysTime.fromSimpleString("1998-Dec-25 02:15:00.007") == |
|---|
| | 8855 | SysTime(DateTime(1998, 12, 25, 2, 15, 0), FracSec.from!"msecs"(7))); |
|---|
| | 8856 | assert(SysTime.fromSimpleString("0000-Jan-05 23:09:59.00002") == |
|---|
| | 8857 | SysTime(DateTime(0, 1, 5, 23, 9, 59), FracSec.from!"usecs"(20))); |
|---|
| | 8858 | assert(SysTime.fromSimpleString("-0004-Jan-05 00:00:02") == |
|---|
| | 8859 | SysTime(DateTime(-4, 1, 5, 0, 0, 2))); |
|---|
| | 8860 | assert(SysTime.fromSimpleString(" 2010-Jul-04 07:06:12 ") == |
|---|
| | 8861 | SysTime(DateTime(2010, 7, 4, 7, 6, 12))); |
|---|
| | 8862 | |
|---|
| | 8863 | assert(SysTime.fromSimpleString("2010-Jul-04 07:06:12Z") == |
|---|
| | 8864 | SysTime(DateTime(2010, 7, 4, 7, 6, 12), UTC())); |
|---|
| | 8865 | assert(SysTime.fromSimpleString("2010-Jul-04 07:06:12-8:00") == |
|---|
| | 8866 | SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(-480))); |
|---|
| | 8867 | assert(SysTime.fromSimpleString("2010-Jul-04 07:06:12+8:00") == |
|---|
| | 8868 | SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(480))); |
|---|
| | 8869 | -------------------- |
|---|
| | 8870 | +/ |
|---|
| | 8871 | static SysTime fromSimpleString(S)(in S simpleString, immutable TimeZone tz = null) |
|---|
| | 8872 | if(isSomeString!(S)) |
|---|
| | 8873 | { |
|---|
| | 8874 | auto dstr = to!dstring(strip(simpleString)); |
|---|
| | 8875 | |
|---|
| | 8876 | auto spaceIndex = dstr.indexOf(" "); |
|---|
| | 8877 | enforce(spaceIndex != -1, new DateTimeException(format("Invalid Simple String: %s", simpleString))); |
|---|
| | 8878 | |
|---|
| | 8879 | auto found = dstr[spaceIndex + 1 .. $].find(".", "Z", "+", "-"); |
|---|
| | 8880 | auto dateTimeStr = dstr[0 .. $ - found[0].length]; |
|---|
| | 8881 | |
|---|
| | 8882 | dstring fracSecStr; |
|---|
| | 8883 | dstring zoneStr; |
|---|
| | 8884 | |
|---|
| | 8885 | if(found[1] != 0) |
|---|
| | 8886 | { |
|---|
| | 8887 | if(found[1] == 1) |
|---|
| | 8888 | { |
|---|
| | 8889 | auto foundTZ = found[0].find("Z", "+", "-"); |
|---|
| | 8890 | |
|---|
| | 8891 | if(foundTZ[1] != 0) |
|---|
| | 8892 | { |
|---|
| | 8893 | fracSecStr = found[0][0 .. $ - foundTZ[0].length]; |
|---|
| | 8894 | zoneStr = foundTZ[0]; |
|---|
| | 8895 | } |
|---|
| | 8896 | else |
|---|
| | 8897 | fracSecStr = found[0]; |
|---|
| | 8898 | } |
|---|
| | 8899 | else |
|---|
| | 8900 | zoneStr = found[0]; |
|---|
| | 8901 | } |
|---|
| | 8902 | |
|---|
| | 8903 | try |
|---|
| | 8904 | { |
|---|
| | 8905 | auto dateTime = DateTime.fromSimpleString(dateTimeStr); |
|---|
| | 8906 | auto fracSec = fracSecFromISOString(fracSecStr); |
|---|
| | 8907 | DTRebindable!(immutable TimeZone) parsedZone; |
|---|
| | 8908 | |
|---|
| | 8909 | if(zoneStr.empty) |
|---|
| | 8910 | parsedZone = LocalTime(); |
|---|
| | 8911 | else if(zoneStr == "Z") |
|---|
| | 8912 | parsedZone = UTC(); |
|---|
| | 8913 | else |
|---|
| | 8914 | parsedZone = SimpleTimeZone.fromISOString(zoneStr); |
|---|
| | 8915 | |
|---|
| | 8916 | auto retval = SysTime(dateTime, fracSec, parsedZone.get); |
|---|
| | 8917 | |
|---|
| | 8918 | if(tz !is null) |
|---|
| | 8919 | retval.timezone = tz; |
|---|
| | 8920 | |
|---|
| | 8921 | return retval; |
|---|
| | 8922 | } |
|---|
| | 8923 | catch(DateTimeException dte) |
|---|
| | 8924 | throw new DateTimeException(format("Invalid Simple String: %s", simpleString)); |
|---|
| | 8925 | } |
|---|
| | 8926 | |
|---|
| | 8927 | unittest |
|---|
| | 8928 | { |
|---|
| | 8929 | version(testStdDateTime) |
|---|
| | 8930 | { |
|---|
| | 8931 | assertThrown!DateTimeException(SysTime.fromSimpleString("")); |
|---|
| | 8932 | assertThrown!DateTimeException(SysTime.fromSimpleString("20100704000000")); |
|---|
| | 8933 | assertThrown!DateTimeException(SysTime.fromSimpleString("20100704 000000")); |
|---|
| | 8934 | assertThrown!DateTimeException(SysTime.fromSimpleString("20100704t000000")); |
|---|
| | 8935 | assertThrown!DateTimeException(SysTime.fromSimpleString("20100704T000000.")); |
|---|
| | 8936 | assertThrown!DateTimeException(SysTime.fromSimpleString("20100704T000000.0")); |
|---|
| | 8937 | |
|---|
| | 8938 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-07-0400:00:00")); |
|---|
| | 8939 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-07-04 00:00:00")); |
|---|
| | 8940 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-07-04t00:00:00")); |
|---|
| | 8941 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-07-04T00:00:00.")); |
|---|
| | 8942 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-07-04T00:00:00.0")); |
|---|
| | 8943 | |
|---|
| | 8944 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-0400:00:00")); |
|---|
| | 8945 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04t00:00:00")); |
|---|
| | 8946 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04T00:00:00")); |
|---|
| | 8947 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04 00:00:00.")); |
|---|
| | 8948 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04 00:00:00.A")); |
|---|
| | 8949 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04 00:00:00.Z")); |
|---|
| | 8950 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04 00:00:00.00000000")); |
|---|
| | 8951 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04 00:00:00.00000000")); |
|---|
| | 8952 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04 00:00:00+")); |
|---|
| | 8953 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04 00:00:00-")); |
|---|
| | 8954 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04 00:00:00:")); |
|---|
| | 8955 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04 00:00:00-:")); |
|---|
| | 8956 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04 00:00:00+:")); |
|---|
| | 8957 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04 00:00:00-1:")); |
|---|
| | 8958 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04 00:00:00+1:")); |
|---|
| | 8959 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04 00:00:00+1:0")); |
|---|
| | 8960 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04 00:00:00-24.00")); |
|---|
| | 8961 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-Jul-04 00:00:00+24.00")); |
|---|
| | 8962 | |
|---|
| | 8963 | assertThrown!DateTimeException(SysTime.fromSimpleString("20101222T172201")); |
|---|
| | 8964 | assertThrown!DateTimeException(SysTime.fromSimpleString("2010-12-22T172201")); |
|---|
| | 8965 | |
|---|
| | 8966 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01"), SysTime(DateTime(2010, 12, 22, 17, 22, 01))); |
|---|
| | 8967 | assertPred!"=="(SysTime.fromSimpleString("1999-Jul-06 12:30:33"), SysTime(DateTime(1999, 7, 6, 12, 30, 33))); |
|---|
| | 8968 | assertPred!"=="(SysTime.fromSimpleString("-1999-Jul-06 12:30:33"), SysTime(DateTime(-1999, 7, 6, 12, 30, 33))); |
|---|
| | 8969 | assertPred!"=="(SysTime.fromSimpleString("+01999-Jul-06 12:30:33"), SysTime(DateTime(1999, 7, 6, 12, 30, 33))); |
|---|
| | 8970 | assertPred!"=="(SysTime.fromSimpleString("1999-Jul-06 12:30:33 "), SysTime(DateTime(1999, 7, 6, 12, 30, 33))); |
|---|
| | 8971 | assertPred!"=="(SysTime.fromSimpleString(" 1999-Jul-06 12:30:33"), SysTime(DateTime(1999, 7, 6, 12, 30, 33))); |
|---|
| | 8972 | assertPred!"=="(SysTime.fromSimpleString(" 1999-Jul-06 12:30:33 "), SysTime(DateTime(1999, 7, 6, 12, 30, 33))); |
|---|
| | 8973 | |
|---|
| | 8974 | assertPred!"=="(SysTime.fromSimpleString("1907-Jul-07 12:12:12.0"), SysTime(DateTime(1907, 07, 07, 12, 12, 12))); |
|---|
| | 8975 | assertPred!"=="(SysTime.fromSimpleString("1907-Jul-07 12:12:12.0000000"), SysTime(DateTime(1907, 07, 07, 12, 12, 12))); |
|---|
| | 8976 | assertPred!"=="(SysTime.fromSimpleString("1907-Jul-07 12:12:12.0000001"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"hnsecs"(1))); |
|---|
| | 8977 | assertPred!"=="(SysTime.fromSimpleString("1907-Jul-07 12:12:12.000001"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"usecs"(1))); |
|---|
| | 8978 | assertPred!"=="(SysTime.fromSimpleString("1907-Jul-07 12:12:12.0000010"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"usecs"(1))); |
|---|
| | 8979 | assertPred!"=="(SysTime.fromSimpleString("1907-Jul-07 12:12:12.001"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"msecs"(1))); |
|---|
| | 8980 | assertPred!"=="(SysTime.fromSimpleString("1907-Jul-07 12:12:12.0010000"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"msecs"(1))); |
|---|
| | 8981 | |
|---|
| | 8982 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01Z"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), UTC())); |
|---|
| | 8983 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01-1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-60))); |
|---|
| | 8984 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01-1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-60))); |
|---|
| | 8985 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01-1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-90))); |
|---|
| | 8986 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01-8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-480))); |
|---|
| | 8987 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01+1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(60))); |
|---|
| | 8988 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01+1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(60))); |
|---|
| | 8989 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01+1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(90))); |
|---|
| | 8990 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01+8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(480))); |
|---|
| | 8991 | |
|---|
| | 8992 | assertPred!"=="(SysTime.fromSimpleString("2010-Nov-03 06:51:06.57159Z"), SysTime(DateTime(2010, 11, 3, 6, 51, 6), FracSec.from!"hnsecs"(5715900), UTC())); |
|---|
| | 8993 | |
|---|
| | 8994 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01.23412Z"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(2_341_200), UTC())); |
|---|
| | 8995 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01.23112-1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(2_311_200), new SimpleTimeZone(-60))); |
|---|
| | 8996 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01.45-1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(4_500_000), new SimpleTimeZone(-60))); |
|---|
| | 8997 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01.1-1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(1_000_000), new SimpleTimeZone(-90))); |
|---|
| | 8998 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01.55-8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(5_500_000), new SimpleTimeZone(-480))); |
|---|
| | 8999 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01.1234567+1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(1_234_567), new SimpleTimeZone(60))); |
|---|
| | 9000 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01.0+1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(0), new SimpleTimeZone(60))); |
|---|
| | 9001 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01.0000000+1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(0), new SimpleTimeZone(90))); |
|---|
| | 9002 | assertPred!"=="(SysTime.fromSimpleString("2010-Dec-22 17:22:01.45+8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(4_500_000), new SimpleTimeZone(480))); |
|---|
| | 9003 | |
|---|
| | 9004 | //Verify Examples. |
|---|
| | 9005 | assert(SysTime.fromSimpleString("2010-Jul-04 07:06:12") == SysTime(DateTime(2010, 7, 4, 7, 6, 12))); |
|---|
| | 9006 | assert(SysTime.fromSimpleString("1998-Dec-25 02:15:00.007") == SysTime(DateTime(1998, 12, 25, 2, 15, 0), FracSec.from!"msecs"(7))); |
|---|
| | 9007 | assert(SysTime.fromSimpleString("0000-Jan-05 23:09:59.00002") == SysTime(DateTime(0, 1, 5, 23, 9, 59), FracSec.from!"usecs"(20))); |
|---|
| | 9008 | assert(SysTime.fromSimpleString("-0004-Jan-05 00:00:02") == SysTime(DateTime(-4, 1, 5, 0, 0, 2))); |
|---|
| | 9009 | assert(SysTime.fromSimpleString(" 2010-Jul-04 07:06:12 ") == SysTime(DateTime(2010, 7, 4, 7, 6, 12))); |
|---|
| | 9010 | |
|---|
| | 9011 | assert(SysTime.fromSimpleString("2010-Jul-04 07:06:12Z") == SysTime(DateTime(2010, 7, 4, 7, 6, 12), UTC())); |
|---|
| | 9012 | assert(SysTime.fromSimpleString("2010-Jul-04 07:06:12-8:00") == SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(-480))); |
|---|
| | 9013 | assert(SysTime.fromSimpleString("2010-Jul-04 07:06:12+8:00") == SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(480))); |
|---|
| | 9014 | } |
|---|
| | 9015 | } |
|---|
| | 9016 | |
|---|
| | 9017 | |
|---|
| | 9018 | //TODO Add function which takes a user-specified time format and produces a SysTime |
|---|
| | 9019 | |
|---|
| | 9020 | //TODO Add function which takes pretty much any time-string and produces a SysTime. |
|---|
| | 9021 | // Obviously, it will be less efficient, and it probably won't manage _every_ |
|---|
| | 9022 | // possible date format, but a smart conversion function would be nice. |
|---|
| | 9023 | |
|---|
| | 9024 | |
|---|
| | 9025 | /++ |
|---|
| | 9026 | Returns the SysTime farthest in the past which is representable by SysTime. |
|---|
| | 9027 | |
|---|
| | 9028 | The SysTime which is returned is in UTC. |
|---|
| | 9029 | +/ |
|---|
| | 9030 | @property static SysTime min() pure nothrow |
|---|
| | 9031 | { |
|---|
| | 9032 | return SysTime(long.min, UTC()); |
|---|
| | 9033 | } |
|---|
| | 9034 | |
|---|
| | 9035 | unittest |
|---|
| | 9036 | { |
|---|
| | 9037 | version(testStdDateTime) |
|---|
| | 9038 | { |
|---|
| | 9039 | assert(SysTime.min.year < 0); |
|---|
| | 9040 | assert(SysTime.min < SysTime.max); |
|---|
| | 9041 | } |
|---|
| | 9042 | } |
|---|
| | 9043 | |
|---|
| | 9044 | |
|---|
| | 9045 | /++ |
|---|
| | 9046 | Returns the SysTime farthest in the future which is representable by SysTime. |
|---|
| | 9047 | |
|---|
| | 9048 | The SysTime which is returned is in UTC. |
|---|
| | 9049 | +/ |
|---|
| | 9050 | @property static SysTime max() pure nothrow |
|---|
| | 9051 | { |
|---|
| | 9052 | return SysTime(long.max, UTC()); |
|---|
| | 9053 | } |
|---|
| | 9054 | |
|---|
| | 9055 | unittest |
|---|
| | 9056 | { |
|---|
| | 9057 | version(testStdDateTime) |
|---|
| | 9058 | { |
|---|
| | 9059 | assert(SysTime.max.year > 0); |
|---|
| | 9060 | assert(SysTime.max > SysTime.min); |
|---|
| | 9061 | } |
|---|
| | 9062 | } |
|---|
| | 9063 | |
|---|
| | 9064 | |
|---|
| | 9065 | private: |
|---|
| | 9066 | |
|---|
| | 9067 | /++ |
|---|
| | 9068 | Returns stdTime converted to SysTime's time zone. |
|---|
| | 9069 | +/ |
|---|
| | 9070 | @property long adjTime() const nothrow |
|---|
| | 9071 | { |
|---|
| | 9072 | return _timezone.utcToTZ(_stdTime); |
|---|
| | 9073 | } |
|---|
| | 9074 | |
|---|
| | 9075 | |
|---|
| | 9076 | /++ |
|---|
| | 9077 | Converts the given hnsecs from SysTime's time zone to std time. |
|---|
| | 9078 | +/ |
|---|
| | 9079 | @property void adjTime(long adjTime) nothrow |
|---|
| | 9080 | { |
|---|
| | 9081 | _stdTime = _timezone.tzToUTC(adjTime); |
|---|
| | 9082 | } |
|---|
| | 9083 | |
|---|
| | 9084 | |
|---|
| | 9085 | //Commented out due to bug http://d.puremagic.com/issues/show_bug.cgi?id=5058 |
|---|
| | 9086 | /+ |
|---|
| | 9087 | invariant() |
|---|
| | 9088 | { |
|---|
| | 9089 | assert(_timezone.get !is null, "Invariant Failure: timezone is null. Were you foolish enough to use SysTime.init? (since timezone for SysTime.init can't be set at compile time)."); |
|---|
| | 9090 | } |
|---|
| | 9091 | +/ |
|---|
| | 9092 | |
|---|
| | 9093 | |
|---|
| | 9094 | long _stdTime; |
|---|
| | 9095 | DTRebindable!(immutable TimeZone) _timezone; |
|---|
| | 9096 | } |
|---|
| | 9097 | |
|---|
| 10055 | | } |
|---|
| 10056 | | |
|---|
| 10057 | | |
|---|
| 10058 | | |
|---|
| 10059 | | /++ |
|---|
| 10060 | | SysTime is the type used when you want to get the current time from the system |
|---|
| 10061 | | or if you're doing anything that involves time zones. Unlike DateTime, time |
|---|
| 10062 | | zone is an integral part of SysTime (though if all you care about is local |
|---|
| 10063 | | time, you can pretty much ignore time zones, and it will work, since it |
|---|
| 10064 | | defaults to using the local time zone). It holds its internal time in std time |
|---|
| 10065 | | (hnsecs since midnight, January 1st, 1 A.D. UTC), so it interfaces well with the |
|---|
| 10066 | | system time. However, that means that, unlike DateTime, it is not optimized |
|---|
| 10067 | | for calendar operations, and getting individual units from it such as years |
|---|
| 10068 | | or days is going to involve conversions and be less efficient. |
|---|
| 10069 | | |
|---|
| 10070 | | Basically, if you care about calendar operations and don't necessarily care |
|---|
| 10071 | | about time zones, then DateTime would be the type to use. However, if what |
|---|
| 10072 | | you care about is the system time, then SysTime is the type to use. |
|---|
| 10073 | | |
|---|
| 10074 | | $(D Clock.currTime()) will return the current time as a SysTime. If you want |
|---|
| 10075 | | to convert a SysTime to a Date or DateTime, simply cast it. And if you ever |
|---|
| 10076 | | want to convert a Date or DateTime to a SysTime, use SysTime's constructor, |
|---|
| 10077 | | and you can pass in the intended time zone with it (or don't pass in a |
|---|
| 10078 | | TimeZone, and the local time zone will be used). |
|---|
| 10079 | | |
|---|
| 10080 | | If you care about using time zones other than local time or UTC, you can use |
|---|
| 10081 | | PosixTimeZone on Posix systems (or on Windows, if you provide the TZ Database |
|---|
| 10082 | | files), and you can use WindowsTimeZone on Windows systems. The time in SysTime |
|---|
| 10083 | | is kept internally in hnsecs from midnight, January 1st, 1 A.D. UTC. So, you |
|---|
| 10084 | | never get conversion errors when changing the time zone of a SysTime (since, |
|---|
| 10085 | | if the hnecs were kept in local time, DST would cause problems with conversions). |
|---|
| 10086 | | LocalTime is the TimeZone class which represents the local time, and UTC is the |
|---|
| 10087 | | TimeZone class which represents UTC. SysTime uses LocalTime if no TimeZone is |
|---|
| 10088 | | provided. For more details on time zones, look at the documentation for |
|---|
| 10089 | | TimeZone, PosixTimeZone, and WindowsTimeZone. |
|---|
| 10090 | | |
|---|
| 10091 | | SysTime's range is from approximately 29,000 B.C. to 29,000 A.D. |
|---|
| 10092 | | +/ |
|---|
| 10093 | | struct SysTime |
|---|
| 10094 | | { |
|---|
| 10095 | | public: |
|---|
| 10096 | | |
|---|
| 10097 | | /++ |
|---|
| 10098 | | Params: |
|---|
| 10099 | | dateTime = The DateTime to use to set this SysTime's internal std |
|---|
| 10100 | | time. As DateTime has no concept of time zone, tz is used |
|---|
| 10101 | | as its time zone. |
|---|
| 10102 | | tz = The TimeZone to use for this SysTime. If null, LocalTime |
|---|
| 10103 | | will be used. The given DateTime is assumed to be in the |
|---|
| 10104 | | given time zone. |
|---|
| 10105 | | +/ |
|---|
| 10106 | | this(in DateTime dateTime, immutable TimeZone tz = null) nothrow |
|---|
| 10107 | | { |
|---|
| 10108 | | try |
|---|
| 10109 | | this(dateTime, FracSec.from!"hnsecs"(0), tz); |
|---|
| 10110 | | catch(Exception e) |
|---|
| 10111 | | assert(0, "FracSec's constructor threw when it shouldn't have."); |
|---|
| 10112 | | } |
|---|
| 10113 | | |
|---|
| 10114 | | unittest |
|---|
| 10115 | | { |
|---|
| 10116 | | version(testStdDateTime) |
|---|
| 10117 | | { |
|---|
| 10118 | | assertPred!"=="(SysTime(DateTime.init, UTC())._stdTime, 0); |
|---|
| 10119 | | assertPred!"=="(SysTime(DateTime(1, 1, 1, 12, 30, 33), UTC())._stdTime, 450_330_000_000L); |
|---|
| 10120 | | assertPred!"=="(SysTime(DateTime(0, 12, 31, 12, 30, 33), UTC())._stdTime, -413_670_000_000L); |
|---|
| 10121 | | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), UTC())._stdTime, 0); |
|---|
| 10122 | | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 1), UTC())._stdTime, 10_000_000L); |
|---|
| 10123 | | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), UTC())._stdTime, -10_000_000L); |
|---|
| 10124 | | |
|---|
| 10125 | | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), new SimpleTimeZone(-60)).stdTime, 36_000_000_000L); |
|---|
| 10126 | | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), new SimpleTimeZone(0)).stdTime, 0); |
|---|
| 10127 | | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), new SimpleTimeZone(60)).stdTime, -36_000_000_000L); |
|---|
| 10128 | | } |
|---|
| 10129 | | } |
|---|
| 10130 | | |
|---|
| 10131 | | |
|---|
| 10132 | | /++ |
|---|
| 10133 | | Params: |
|---|
| 10134 | | dateTime = The DateTime to use to set this SysTime's internal std time. |
|---|
| 10135 | | As DateTime has no concept of time zone, tz is used as its |
|---|
| 10136 | | time zone. |
|---|
| 10137 | | fsec = The fractional seconds portion of the time. |
|---|
| 10138 | | tz = The TimeZone to use for this SysTime. If null, LocalTime will |
|---|
| 10139 | | be used. The given DateTime is assumed to be in the given |
|---|
| 10140 | | time zone. |
|---|
| 10141 | | +/ |
|---|
| 10142 | | this(in DateTime dateTime, in FracSec fsec, immutable TimeZone tz = null) nothrow |
|---|
| 10143 | | { |
|---|
| 10144 | | if(tz is null) |
|---|
| 10145 | | _timezone = LocalTime(); |
|---|
| 10146 | | else |
|---|
| 10147 | | _timezone = tz; |
|---|
| 10148 | | |
|---|
| 10149 | | try |
|---|
| 10150 | | { |
|---|
| 10151 | | immutable dateDiff = (dateTime.date - Date(1, 1, 1)).total!"hnsecs"; |
|---|
| 10152 | | immutable todDiff = (dateTime.timeOfDay - TimeOfDay(0, 0, 0)).total!"hnsecs"; |
|---|
| 10153 | | |
|---|
| 10154 | | immutable adjustedTime = dateDiff + todDiff + fsec.hnsecs; |
|---|
| 10155 | | immutable standardTime = _timezone.tzToUTC(adjustedTime); |
|---|
| 10156 | | |
|---|
| 10157 | | this(standardTime, _timezone.get); |
|---|
| 10158 | | } |
|---|
| 10159 | | catch(Exception e) |
|---|
| 10160 | | assert(0, "Date, TimeOfDay, or DateTime's constructor threw when it shouldn't have."); |
|---|
| 10161 | | } |
|---|
| 10162 | | |
|---|
| 10163 | | unittest |
|---|
| 10164 | | { |
|---|
| 10165 | | version(testStdDateTime) |
|---|
| 10166 | | { |
|---|
| 10167 | | assertPred!"=="(SysTime(DateTime.init, FracSec.init, UTC())._stdTime, 0); |
|---|
| 10168 | | assertPred!"=="(SysTime(DateTime(1, 1, 1, 12, 30, 33), FracSec.init, UTC())._stdTime, 450_330_000_000L); |
|---|
| 10169 | | assertPred!"=="(SysTime(DateTime(0, 12, 31, 12, 30, 33), FracSec.init, UTC())._stdTime, -413_670_000_000L); |
|---|
| 10170 | | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(1), UTC())._stdTime, 10_000L); |
|---|
| 10171 | | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"msecs"(999), UTC())._stdTime, -10_000L); |
|---|
| 10172 | | |
|---|
| 10173 | | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).stdTime, -1); |
|---|
| 10174 | | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1), UTC()).stdTime, -9_999_999); |
|---|
| 10175 | | assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0), UTC()).stdTime, -10_000_000); |
|---|
| 10176 | | } |
|---|
| 10177 | | } |
|---|
| 10178 | | |
|---|
| 10179 | | |
|---|
| 10180 | | /++ |
|---|
| 10181 | | Params: |
|---|
| 10182 | | date = The Date to use to set this SysTime's internal std time. |
|---|
| 10183 | | As Date has no concept of time zone, tz is used as its |
|---|
| 10184 | | time zone. |
|---|
| 10185 | | tz = The TimeZone to use for this SysTime. If null, LocalTime will |
|---|
| 10186 | | be used. The given Date is assumed to be in the given time zone. |
|---|
| 10187 | | +/ |
|---|
| 10188 | | this(in Date date, immutable TimeZone tz = null) nothrow |
|---|
| 10189 | | { |
|---|
| 10190 | | if(tz is null) |
|---|
| 10191 | | _timezone = LocalTime(); |
|---|
| 10192 | | else |
|---|
| 10193 | | _timezone = tz; |
|---|
| 10194 | | |
|---|
| 10195 | | try |
|---|
| 10196 | | { |
|---|
| 10197 | | immutable adjustedTime = (date - Date(1, 1, 1)).total!"hnsecs"; |
|---|
| 10198 | | immutable standardTime = _timezone.tzToUTC(adjustedTime); |
|---|
| 10199 | | |
|---|
| 10200 | | this(standardTime, _timezone.get); |
|---|
| 10201 | | } |
|---|
| 10202 | | catch(Exception e) |
|---|
| 10203 | | assert(0, "Date's constructor through when it shouldn't have"); |
|---|
| 10204 | | } |
|---|
| 10205 | | |
|---|
| 10206 | | unittest |
|---|
| 10207 | | { |
|---|
| 10208 | | version(testStdDateTime) |
|---|
| 10209 | | { |
|---|
| 10210 | | assertPred!"=="(SysTime(Date.init, UTC())._stdTime, 0); |
|---|
| 10211 | | assertPred!"=="(SysTime(Date(1, 1, 1), UTC())._stdTime, 0); |
|---|
| 10212 | | assertPred!"=="(SysTime(Date(1, 1, 2), UTC())._stdTime, 864000000000); |
|---|
| 10213 | | assertPred!"=="(SysTime(Date(0, 12, 31), UTC())._stdTime, -864000000000); |
|---|
| 10214 | | } |
|---|
| 10215 | | } |
|---|
| 10216 | | |
|---|
| 10217 | | |
|---|
| 10218 | | /++ |
|---|
| 10219 | | Note: |
|---|
| 10220 | | Whereas the other constructors take in the given date/time, assume |
|---|
| 10221 | | that it's in the given time zone, and convert it to hnsecs in UTC |
|---|
| 10222 | | since midnight, January 1st, 1 A.D. UTC - i.e. std time - this constructor |
|---|
| 10223 | | takes a std time, which is specifically already in UTC, so no conversion |
|---|
| 10224 | | takes place. Of course, the various getter properties and functions |
|---|
| 10225 | | will use the given time zone's conversion function to convert the |
|---|
| 10226 | | results to that time zone, but no conversion of the arguments to |
|---|
| 10227 | | this constructor takes place. |
|---|
| 10228 | | |
|---|
| 10229 | | Params: |
|---|
| 10230 | | stdTime = The number of hnsecs since midnight, January 1st, 1 A.D. UTC. |
|---|
| 10231 | | tz = The TimeZone to use for this SysTime. If null, LocalTime will be used. |
|---|
| 10232 | | +/ |
|---|
| 10233 | | this(long stdTime, immutable TimeZone tz = null) pure nothrow |
|---|
| 10234 | | { |
|---|
| 10235 | | _stdTime = stdTime; |
|---|
| 10236 | | |
|---|
| 10237 | | if(tz is null) |
|---|
| 10238 | | _timezone = LocalTime(); |
|---|
| 10239 | | else |
|---|
| 10240 | | _timezone = tz; |
|---|
| 10241 | | } |
|---|
| 10242 | | |
|---|
| 10243 | | unittest |
|---|
| 10244 | | { |
|---|
| 10245 | | version(testStdDateTime) |
|---|
| 10246 | | { |
|---|
| 10247 | | assertPred!"=="(SysTime(0)._stdTime, 0); |
|---|
| 10248 | | } |
|---|
| 10249 | | } |
|---|
| 10250 | | |
|---|
| 10251 | | |
|---|
| 10252 | | /++ |
|---|
| 10253 | | Params: |
|---|
| 10254 | | rhs = The SysTime to assign to this one. |
|---|
| 10255 | | +/ |
|---|
| 10256 | | ref SysTime opAssign(const ref SysTime rhs) pure nothrow |
|---|
| 10257 | | { |
|---|
| 10258 | | _stdTime = rhs._stdTime; |
|---|
| 10259 | | _timezone = rhs._timezone.get; |
|---|
| 10260 | | |
|---|
| 10261 | | return this; |
|---|
| 10262 | | } |
|---|
| 10263 | | |
|---|
| 10264 | | |
|---|
| 10265 | | /++ |
|---|
| 10266 | | Params: |
|---|
| 10267 | | rhs = The SysTime to assign to this one. |
|---|
| 10268 | | +/ |
|---|
| 10269 | | ref SysTime opAssign(SysTime rhs) pure nothrow |
|---|
| 10270 | | { |
|---|
| 10271 | | _stdTime = rhs._stdTime; |
|---|
| 10272 | | _timezone = rhs._timezone.get; |
|---|
| 10273 | | |
|---|
| 10274 | | return this; |
|---|
| 10275 | | } |
|---|
| 10276 | | |
|---|
| 10277 | | |
|---|
| 10278 | | /++ |
|---|
| 10279 | | Checks for equality between this SysTime and the given |
|---|
| 10280 | | SysTime. |
|---|
| 10281 | | |
|---|
| 10282 | | Note that the time zone is ignored. Only the internal |
|---|
| 10283 | | std times (which are in UTC) are compared. |
|---|
| 10284 | | +/ |
|---|
| 10285 | | bool opEquals(const ref SysTime rhs) const pure nothrow |
|---|
| 10286 | | { |
|---|
| 10287 | | return _stdTime == rhs._stdTime; |
|---|
| 10288 | | } |
|---|
| 10289 | | |
|---|
| 10290 | | unittest |
|---|
| 10291 | | { |
|---|
| 10292 | | version(testStdDateTime) |
|---|
| 10293 | | { |
|---|
| 10294 | | auto a = SysTime(DateTime.init, UTC()); |
|---|
| 10295 | | auto b = SysTime(0, UTC()); |
|---|
| 10296 | | assert(a == b); |
|---|
| 10297 | | assertPred!"=="(a, b); |
|---|
| 10298 | | assertPred!"=="(SysTime(DateTime.init, UTC()), SysTime(0, UTC())); |
|---|
| 10299 | | assertPred!"=="(SysTime(Date.init, UTC()), SysTime(0, UTC())); |
|---|
| 10300 | | assertPred!"=="(SysTime(0), SysTime(0)); |
|---|
| 10301 | | |
|---|
| 10302 | | assertPred!"=="(SysTime(Date(1999, 1, 1)), SysTime(Date(1999, 1, 1))); |
|---|
| 10303 | | assertPred!"=="(SysTime(Date(1999, 1, 1)), SysTime(Date(1999, 1, 1))); |
|---|
| 10304 | | assertPred!"=="(SysTime(Date(1, 7, 1)), SysTime(Date(1, 7, 1))); |
|---|
| 10305 | | assertPred!"=="(SysTime(Date(1, 1, 6)), SysTime(Date(1, 1, 6))); |
|---|
| 10306 | | |
|---|
| 10307 | | assertPred!"=="(SysTime(Date(1999, 7, 1)), SysTime(Date(1999, 7, 1))); |
|---|
| 10308 | | assertPred!"=="(SysTime(Date(1999, 7, 6)), SysTime(Date(1999, 7, 6))); |
|---|
| 10309 | | |
|---|
| 10310 | | assertPred!"=="(SysTime(Date(1, 7, 6)), SysTime(Date(1, 7, 6))); |
|---|
| 10311 | | |
|---|
| 10312 | | assertPred!"=="(SysTime(DateTime(1999, 1, 1, 0, 0, 0)), SysTime(Date(1999, 1, 1))); |
|---|
| 10313 | | assertPred!"=="(SysTime(Date(1999, 1, 1)), SysTime(DateTime(1999, 1, 1, 0, 0, 0))); |
|---|
| 10314 | | |
|---|
| 10315 | | assertPred!"!="(SysTime(DateTime(1999, 1, 1, 11, 30, 20)), SysTime(Date(1999, 1, 1))); |
|---|
| 10316 | | assertPred!"!="(SysTime(Date(1999, 1, 1)), SysTime(DateTime(1999, 1, 1, 11, 30, 20))); |
|---|
| 10317 | | |
|---|
| 10318 | | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0))), |
|---|
| 10319 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)))); |
|---|
| 10320 | | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 0, 0))), |
|---|
| 10321 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 0, 0)))); |
|---|
| 10322 | | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 0))), |
|---|
| 10323 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 0)))); |
|---|
| 10324 | | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33))), |
|---|
| 10325 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33)))); |
|---|
| 10326 | | |
|---|
| 10327 | | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 0))), |
|---|
| 10328 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 0)))); |
|---|
| 10329 | | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10330 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10331 | | |
|---|
| 10332 | | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 33))), |
|---|
| 10333 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 33)))); |
|---|
| 10334 | | assertPred!"=="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33))), |
|---|
| 10335 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33)))); |
|---|
| 10336 | | |
|---|
| 10337 | | { |
|---|
| 10338 | | auto sysUTC = SysTime(Date(1999, 1, 1)); |
|---|
| 10339 | | sysUTC.timezone = UTC(); |
|---|
| 10340 | | |
|---|
| 10341 | | auto sysLocal = SysTime(Date(1999, 1, 1)); |
|---|
| 10342 | | sysUTC.timezone = LocalTime(); |
|---|
| 10343 | | |
|---|
| 10344 | | assertPred!"=="(sysUTC, sysLocal); |
|---|
| 10345 | | assertPred!"=="(sysLocal, sysUTC); |
|---|
| 10346 | | |
|---|
| 10347 | | if(!localTimeIsUTC) |
|---|
| 10348 | | { |
|---|
| 10349 | | assertPred!"!="(SysTime(Date(1999, 1, 1), UTC()), SysTime(Date(1999, 1, 1), LocalTime())); |
|---|
| 10350 | | assertPred!"!="(SysTime(Date(1999, 7, 1), LocalTime()), SysTime(Date(1999, 7, 1), UTC())); |
|---|
| 10351 | | } |
|---|
| 10352 | | } |
|---|
| 10353 | | |
|---|
| 10354 | | { |
|---|
| 10355 | | auto sysUTC = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0))); |
|---|
| 10356 | | sysUTC.timezone = UTC(); |
|---|
| 10357 | | |
|---|
| 10358 | | auto sysSimple = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0))); |
|---|
| 10359 | | sysSimple.timezone = new SimpleTimeZone(-360); |
|---|
| 10360 | | |
|---|
| 10361 | | assertPred!"=="(sysUTC, sysSimple); |
|---|
| 10362 | | assertPred!"=="(sysSimple, sysUTC); |
|---|
| 10363 | | |
|---|
| 10364 | | assertPred!"!="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), UTC()), |
|---|
| 10365 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), sysSimple.timezone)); |
|---|
| 10366 | | assertPred!"!="(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), sysSimple.timezone), |
|---|
| 10367 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), UTC())); |
|---|
| 10368 | | } |
|---|
| 10369 | | |
|---|
| 10370 | | { |
|---|
| 10371 | | auto sysUTC = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), UTC()); |
|---|
| 10372 | | auto sysSimple = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), new SimpleTimeZone(240)); |
|---|
| 10373 | | |
|---|
| 10374 | | assertPred!"!="(sysUTC, sysSimple); |
|---|
| 10375 | | assertPred!"!="(sysSimple, sysUTC); |
|---|
| 10376 | | |
|---|
| 10377 | | sysUTC = SysTime(DateTime(Date(1999, 7, 5), TimeOfDay(20, 0, 0)), UTC()); |
|---|
| 10378 | | |
|---|
| 10379 | | assertPred!"=="(sysUTC, sysSimple); |
|---|
| 10380 | | assertPred!"=="(sysSimple, sysUTC); |
|---|
| 10381 | | } |
|---|
| 10382 | | |
|---|
| 10383 | | auto st = SysTime(DateTime(1999, 7, 6, 12, 33, 30)); |
|---|
| 10384 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 33, 30)); |
|---|
| 10385 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 33, 30)); |
|---|
| 10386 | | static assert(__traits(compiles, st == st)); |
|---|
| 10387 | | static assert(__traits(compiles, st == cst)); |
|---|
| 10388 | | //static assert(__traits(compiles, st == ist)); |
|---|
| 10389 | | static assert(__traits(compiles, cst == st)); |
|---|
| 10390 | | static assert(__traits(compiles, cst == cst)); |
|---|
| 10391 | | //static assert(__traits(compiles, cst == ist)); |
|---|
| 10392 | | //static assert(__traits(compiles, ist == st)); |
|---|
| 10393 | | //static assert(__traits(compiles, ist == cst)); |
|---|
| 10394 | | //static assert(__traits(compiles, ist == ist)); |
|---|
| 10395 | | } |
|---|
| 10396 | | } |
|---|
| 10397 | | |
|---|
| 10398 | | |
|---|
| 10399 | | /++ |
|---|
| 10400 | | Compares this SysTime with the given SysTime. |
|---|
| 10401 | | |
|---|
| 10402 | | Time zone is irrelevant to comparing SysTimes. |
|---|
| 10403 | | |
|---|
| 10404 | | Returns: |
|---|
| 10405 | | $(TABLE |
|---|
| 10406 | | $(TR $(TD this < rhs) $(TD < 0)) |
|---|
| 10407 | | $(TR $(TD this == rhs) $(TD 0)) |
|---|
| 10408 | | $(TR $(TD this > rhs) $(TD > 0)) |
|---|
| 10409 | | ) |
|---|
| 10410 | | +/ |
|---|
| 10411 | | int opCmp(in SysTime rhs) const pure nothrow |
|---|
| 10412 | | { |
|---|
| 10413 | | if(_stdTime < rhs._stdTime) |
|---|
| 10414 | | return -1; |
|---|
| 10415 | | if(_stdTime > rhs._stdTime) |
|---|
| 10416 | | return 1; |
|---|
| 10417 | | |
|---|
| 10418 | | return 0; |
|---|
| 10419 | | } |
|---|
| 10420 | | |
|---|
| 10421 | | unittest |
|---|
| 10422 | | { |
|---|
| 10423 | | version(testStdDateTime) |
|---|
| 10424 | | { |
|---|
| 10425 | | //Test A.D. |
|---|
| 10426 | | assertPred!("opCmp", "==")(SysTime(DateTime.init, UTC()), SysTime(0)); |
|---|
| 10427 | | assertPred!("opCmp", "==")(SysTime(Date.init, UTC()), SysTime(0)); |
|---|
| 10428 | | |
|---|
| 10429 | | assertPred!("opCmp", "==")(SysTime(Date(1999, 1, 1)), SysTime(Date(1999, 1, 1))); |
|---|
| 10430 | | assertPred!("opCmp", "==")(SysTime(Date(1999, 1, 1)), SysTime(Date(1999, 1, 1))); |
|---|
| 10431 | | assertPred!("opCmp", "==")(SysTime(Date(1, 7, 1)), SysTime(Date(1, 7, 1))); |
|---|
| 10432 | | assertPred!("opCmp", "==")(SysTime(Date(1, 1, 6)), SysTime(Date(1, 1, 6))); |
|---|
| 10433 | | |
|---|
| 10434 | | assertPred!("opCmp", "==")(SysTime(Date(1999, 7, 1)), SysTime(Date(1999, 7, 1))); |
|---|
| 10435 | | assertPred!("opCmp", "==")(SysTime(Date(1999, 7, 6)), SysTime(Date(1999, 7, 6))); |
|---|
| 10436 | | |
|---|
| 10437 | | assertPred!("opCmp", "==")(SysTime(Date(1, 7, 6)), SysTime(Date(1, 7, 6))); |
|---|
| 10438 | | |
|---|
| 10439 | | assertPred!("opCmp", ">")(SysTime(DateTime(1999, 1, 1, 11, 30, 20)), SysTime(Date(1999, 1, 1))); |
|---|
| 10440 | | assertPred!("opCmp", "<")(SysTime(Date(1999, 1, 1)), SysTime(DateTime(1999, 1, 1, 11, 30, 20))); |
|---|
| 10441 | | |
|---|
| 10442 | | assertPred!("opCmp", "<")(SysTime(Date(1999, 7, 6)), SysTime(Date(2000, 7, 6))); |
|---|
| 10443 | | assertPred!("opCmp", ">")(SysTime(Date(2000, 7, 6)), SysTime(Date(1999, 7, 6))); |
|---|
| 10444 | | assertPred!("opCmp", "<")(SysTime(Date(1999, 7, 6)), SysTime(Date(1999, 8, 6))); |
|---|
| 10445 | | assertPred!("opCmp", ">")(SysTime(Date(1999, 8, 6)), SysTime(Date(1999, 7, 6))); |
|---|
| 10446 | | assertPred!("opCmp", "<")(SysTime(Date(1999, 7, 6)), SysTime(Date(1999, 7, 7))); |
|---|
| 10447 | | assertPred!("opCmp", ">")(SysTime(Date(1999, 7, 7)), SysTime(Date(1999, 7, 6))); |
|---|
| 10448 | | |
|---|
| 10449 | | assertPred!("opCmp", "<")(SysTime(Date(1999, 8, 7)), SysTime(Date(2000, 7, 6))); |
|---|
| 10450 | | assertPred!("opCmp", ">")(SysTime(Date(2000, 8, 6)), SysTime(Date(1999, 7, 7))); |
|---|
| 10451 | | assertPred!("opCmp", "<")(SysTime(Date(1999, 7, 7)), SysTime(Date(2000, 7, 6))); |
|---|
| 10452 | | assertPred!("opCmp", ">")(SysTime(Date(2000, 7, 6)), SysTime(Date(1999, 7, 7))); |
|---|
| 10453 | | assertPred!("opCmp", "<")(SysTime(Date(1999, 7, 7)), SysTime(Date(1999, 8, 6))); |
|---|
| 10454 | | assertPred!("opCmp", ">")(SysTime(Date(1999, 8, 6)), SysTime(Date(1999, 7, 7))); |
|---|
| 10455 | | |
|---|
| 10456 | | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0))), |
|---|
| 10457 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)))); |
|---|
| 10458 | | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 0, 0))), |
|---|
| 10459 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 0, 0)))); |
|---|
| 10460 | | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 0))), |
|---|
| 10461 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 0)))), |
|---|
| 10462 | | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33))), |
|---|
| 10463 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33)))); |
|---|
| 10464 | | |
|---|
| 10465 | | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 0))), |
|---|
| 10466 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 0)))); |
|---|
| 10467 | | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10468 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10469 | | |
|---|
| 10470 | | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 33))), |
|---|
| 10471 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 30, 33)))); |
|---|
| 10472 | | assertPred!("opCmp", "==")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33))), |
|---|
| 10473 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 33)))); |
|---|
| 10474 | | |
|---|
| 10475 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10476 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33)))); |
|---|
| 10477 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33))), |
|---|
| 10478 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10479 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10480 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33)))); |
|---|
| 10481 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33))), |
|---|
| 10482 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10483 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10484 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34)))); |
|---|
| 10485 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34))), |
|---|
| 10486 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10487 | | |
|---|
| 10488 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33))), |
|---|
| 10489 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34)))); |
|---|
| 10490 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34))), |
|---|
| 10491 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33)))); |
|---|
| 10492 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33))), |
|---|
| 10493 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33)))); |
|---|
| 10494 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33))), |
|---|
| 10495 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33)))); |
|---|
| 10496 | | |
|---|
| 10497 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33))), |
|---|
| 10498 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34)))); |
|---|
| 10499 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34))), |
|---|
| 10500 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33)))); |
|---|
| 10501 | | |
|---|
| 10502 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33))), |
|---|
| 10503 | | SysTime(DateTime(Date(2000, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10504 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(2000, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10505 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33)))); |
|---|
| 10506 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33))), |
|---|
| 10507 | | SysTime(DateTime(Date(2000, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10508 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(2000, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10509 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33)))); |
|---|
| 10510 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34))), |
|---|
| 10511 | | SysTime(DateTime(Date(2000, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10512 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(2000, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10513 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34)))); |
|---|
| 10514 | | |
|---|
| 10515 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33))), |
|---|
| 10516 | | SysTime(DateTime(Date(1999, 8, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10517 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10518 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33)))); |
|---|
| 10519 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33))), |
|---|
| 10520 | | SysTime(DateTime(Date(1999, 8, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10521 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10522 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33)))); |
|---|
| 10523 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34))), |
|---|
| 10524 | | SysTime(DateTime(Date(1999, 8, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10525 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10526 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34)))); |
|---|
| 10527 | | |
|---|
| 10528 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33))), |
|---|
| 10529 | | SysTime(DateTime(Date(1999, 7, 7), TimeOfDay(12, 30, 33)))); |
|---|
| 10530 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 7), TimeOfDay(12, 30, 33))), |
|---|
| 10531 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(13, 30, 33)))); |
|---|
| 10532 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 31, 33))), |
|---|
| 10533 | | SysTime(DateTime(Date(1999, 7, 7), TimeOfDay(12, 31, 33)))); |
|---|
| 10534 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 7), TimeOfDay(12, 30, 33))), |
|---|
| 10535 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10536 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34))), |
|---|
| 10537 | | SysTime(DateTime(Date(1999, 7, 7), TimeOfDay(12, 30, 33)))); |
|---|
| 10538 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 7), TimeOfDay(12, 30, 33))), |
|---|
| 10539 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 34)))); |
|---|
| 10540 | | |
|---|
| 10541 | | //Test B.C. |
|---|
| 10542 | | assertPred!("opCmp", "==")(SysTime(DateTime(Date(-1, 1, 1), TimeOfDay(12, 30, 33))), |
|---|
| 10543 | | SysTime(DateTime(Date(-1, 1, 1), TimeOfDay(12, 30, 33)))); |
|---|
| 10544 | | assertPred!("opCmp", "==")(SysTime(DateTime(Date(-1, 7, 1), TimeOfDay(12, 30, 33))), |
|---|
| 10545 | | SysTime(DateTime(Date(-1, 7, 1), TimeOfDay(12, 30, 33)))); |
|---|
| 10546 | | assertPred!("opCmp", "==")(SysTime(DateTime(Date(-1, 1, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10547 | | SysTime(DateTime(Date(-1, 1, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10548 | | |
|---|
| 10549 | | assertPred!("opCmp", "==")(SysTime(DateTime(Date(-1999, 7, 1), TimeOfDay(12, 30, 33))), |
|---|
| 10550 | | SysTime(DateTime(Date(-1999, 7, 1), TimeOfDay(12, 30, 33)))); |
|---|
| 10551 | | assertPred!("opCmp", "==")(SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10552 | | SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10553 | | |
|---|
| 10554 | | assertPred!("opCmp", "==")(SysTime(DateTime(Date(-1, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10555 | | SysTime(DateTime(Date(-1, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10556 | | |
|---|
| 10557 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-2000, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10558 | | SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10559 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10560 | | SysTime(DateTime(Date(-2000, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10561 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10562 | | SysTime(DateTime(Date(-1999, 8, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10563 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(-1999, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10564 | | SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10565 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10566 | | SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33)))); |
|---|
| 10567 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33))), |
|---|
| 10568 | | SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10569 | | |
|---|
| 10570 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-2000, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10571 | | SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33)))); |
|---|
| 10572 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(-1999, 8, 7), TimeOfDay(12, 30, 33))), |
|---|
| 10573 | | SysTime(DateTime(Date(-2000, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10574 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-2000, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10575 | | SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33)))); |
|---|
| 10576 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33))), |
|---|
| 10577 | | SysTime(DateTime(Date(-2000, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10578 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33))), |
|---|
| 10579 | | SysTime(DateTime(Date(-1999, 8, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10580 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(-1999, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10581 | | SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33)))); |
|---|
| 10582 | | |
|---|
| 10583 | | //Test Both |
|---|
| 10584 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10585 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10586 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10587 | | SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10588 | | |
|---|
| 10589 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10590 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10591 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10592 | | SysTime(DateTime(Date(-1999, 8, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10593 | | |
|---|
| 10594 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33))), |
|---|
| 10595 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10596 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10597 | | SysTime(DateTime(Date(-1999, 7, 7), TimeOfDay(12, 30, 33)))); |
|---|
| 10598 | | |
|---|
| 10599 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 8, 7), TimeOfDay(12, 30, 33))), |
|---|
| 10600 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10601 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10602 | | SysTime(DateTime(Date(-1999, 8, 7), TimeOfDay(12, 30, 33)))); |
|---|
| 10603 | | |
|---|
| 10604 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(-1999, 8, 6), TimeOfDay(12, 30, 33))), |
|---|
| 10605 | | SysTime(DateTime(Date(1999, 6, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10606 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 6, 8), TimeOfDay(12, 30, 33))), |
|---|
| 10607 | | SysTime(DateTime(Date(-1999, 7, 6), TimeOfDay(12, 30, 33)))); |
|---|
| 10608 | | |
|---|
| 10609 | | { |
|---|
| 10610 | | auto sysUTC = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0))); |
|---|
| 10611 | | sysUTC.timezone = UTC(); |
|---|
| 10612 | | |
|---|
| 10613 | | auto sysSimple = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0))); |
|---|
| 10614 | | sysSimple.timezone = new SimpleTimeZone(-360); |
|---|
| 10615 | | |
|---|
| 10616 | | assertPred!("opCmp", "==")(sysUTC, sysSimple); |
|---|
| 10617 | | assertPred!("opCmp", "==")(sysSimple, sysUTC); |
|---|
| 10618 | | |
|---|
| 10619 | | assertPred!("opCmp", "<")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), UTC()), |
|---|
| 10620 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), sysSimple.timezone)); |
|---|
| 10621 | | assertPred!("opCmp", ">")(SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), sysSimple.timezone), |
|---|
| 10622 | | SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), UTC())); |
|---|
| 10623 | | } |
|---|
| 10624 | | |
|---|
| 10625 | | { |
|---|
| 10626 | | auto sysUTC = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), UTC()); |
|---|
| 10627 | | auto sysSimple = SysTime(DateTime(Date(1999, 7, 6), TimeOfDay(0, 0, 0)), new SimpleTimeZone(240)); |
|---|
| 10628 | | |
|---|
| 10629 | | assertPred!("opCmp", ">")(sysUTC, sysSimple); |
|---|
| 10630 | | assertPred!("opCmp", "<")(sysSimple, sysUTC); |
|---|
| 10631 | | |
|---|
| 10632 | | sysUTC = SysTime(DateTime(Date(1999, 7, 5), TimeOfDay(20, 0, 0)), UTC()); |
|---|
| 10633 | | |
|---|
| 10634 | | assertPred!("opCmp", "==")(sysUTC, sysSimple); |
|---|
| 10635 | | assertPred!("opCmp", "==")(sysSimple, sysUTC); |
|---|
| 10636 | | } |
|---|
| 10637 | | |
|---|
| 10638 | | auto st = SysTime(DateTime(1999, 7, 6, 12, 33, 30)); |
|---|
| 10639 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 33, 30)); |
|---|
| 10640 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 33, 30)); |
|---|
| 10641 | | static assert(__traits(compiles, st.opCmp(st))); |
|---|
| 10642 | | static assert(__traits(compiles, st.opCmp(cst))); |
|---|
| 10643 | | //static assert(__traits(compiles, st.opCmp(ist))); |
|---|
| 10644 | | static assert(__traits(compiles, cst.opCmp(st))); |
|---|
| 10645 | | static assert(__traits(compiles, cst.opCmp(cst))); |
|---|
| 10646 | | //static assert(__traits(compiles, cst.opCmp(ist))); |
|---|
| 10647 | | //static assert(__traits(compiles, ist.opCmp(st))); |
|---|
| 10648 | | //static assert(__traits(compiles, ist.opCmp(cst))); |
|---|
| 10649 | | //static assert(__traits(compiles, ist.opCmp(ist))); |
|---|
| 10650 | | } |
|---|
| 10651 | | } |
|---|
| 10652 | | |
|---|
| 10653 | | |
|---|
| 10654 | | /++ |
|---|
| 10655 | | Year of the Gregorian Calendar. Positive numbers are A.D. Non-positive |
|---|
| 10656 | | are B.C. |
|---|
| 10657 | | +/ |
|---|
| 10658 | | @property short year() const nothrow |
|---|
| 10659 | | { |
|---|
| 10660 | | return (cast(Date)this).year; |
|---|
| 10661 | | } |
|---|
| 10662 | | |
|---|
| 10663 | | unittest |
|---|
| 10664 | | { |
|---|
| 10665 | | version(testStdDateTime) |
|---|
| 10666 | | { |
|---|
| 10667 | | assertPred!"=="(SysTime(0, UTC()).year, 1); |
|---|
| 10668 | | assertPred!"=="(SysTime(1, UTC()).year, 1); |
|---|
| 10669 | | assertPred!"=="(SysTime(-1, UTC()).year, 0); |
|---|
| 10670 | | assertPred!"=="(SysTime(DateTime(12, 1, 1, 0, 0, 0)).year, 12); |
|---|
| 10671 | | assertPred!"=="(SysTime(DateTime(-12, 1, 1, 0, 0, 0)).year, -12); |
|---|
| 10672 | | assertPred!"=="(SysTime(Date(1999, 7, 6)).year, 1999); |
|---|
| 10673 | | assertPred!"=="(SysTime(Date(-1999, 7, 6)).year, -1999); |
|---|
| 10674 | | |
|---|
| 10675 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 10676 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 10677 | | static assert(__traits(compiles, cst.year)); |
|---|
| 10678 | | //static assert(__traits(compiles, ist.year)); |
|---|
| 10679 | | } |
|---|
| 10680 | | } |
|---|
| 10681 | | |
|---|
| 10682 | | |
|---|
| 10683 | | /++ |
|---|
| 10684 | | Year of the Gregorian Calendar. Positive numbers are A.D. Non-positive |
|---|
| 10685 | | are B.C. |
|---|
| 10686 | | |
|---|
| 10687 | | Params: |
|---|
| 10688 | | year = The year to set this SysTime's year to. |
|---|
| 10689 | | |
|---|
| 10690 | | Throws: |
|---|
| 10691 | | DateTimeException if the new year is not a leap year and the resulting |
|---|
| 10692 | | date would be on February 29th. |
|---|
| 10693 | | |
|---|
| 10694 | | Examples: |
|---|
| 10695 | | -------------------- |
|---|
| 10696 | | assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).year == 1999); |
|---|
| 10697 | | assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).year == 2010); |
|---|
| 10698 | | assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).year == -7); |
|---|
| 10699 | | -------------------- |
|---|
| 10700 | | +/ |
|---|
| 10701 | | @property void year(int year) |
|---|
| 10702 | | { |
|---|
| 10703 | | auto hnsecs = adjTime; |
|---|
| 10704 | | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| 10705 | | |
|---|
| 10706 | | if(hnsecs < 0) |
|---|
| 10707 | | { |
|---|
| 10708 | | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| 10709 | | --days; |
|---|
| 10710 | | } |
|---|
| 10711 | | |
|---|
| 10712 | | auto date = Date(cast(int)days); |
|---|
| 10713 | | date.year = year; |
|---|
| 10714 | | |
|---|
| 10715 | | immutable newDaysHNSecs = convert!("days", "hnsecs")(date.dayOfGregorianCal - 1); |
|---|
| 10716 | | |
|---|
| 10717 | | adjTime = newDaysHNSecs + hnsecs; |
|---|
| 10718 | | } |
|---|
| 10719 | | |
|---|
| 10720 | | unittest |
|---|
| 10721 | | { |
|---|
| 10722 | | version(testStdDateTime) |
|---|
| 10723 | | { |
|---|
| 10724 | | static void testST(SysTime st, int year, in SysTime expected, size_t line = __LINE__) |
|---|
| 10725 | | { |
|---|
| 10726 | | st.year = year; |
|---|
| 10727 | | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| 10728 | | } |
|---|
| 10729 | | |
|---|
| 10730 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), 1999, SysTime(Date(1999, 1, 1))); |
|---|
| 10731 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), 0, SysTime(Date(0, 1, 1))); |
|---|
| 10732 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), -1999, SysTime(Date(-1999, 1, 1))); |
|---|
| 10733 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1999, SysTime(DateTime(1999, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 10734 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 0, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 10735 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), -1999, SysTime(DateTime(-1999, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 10736 | | |
|---|
| 10737 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), 1999, SysTime(Date(1999, 1, 1))); |
|---|
| 10738 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), 0, SysTime(Date(0, 1, 1))); |
|---|
| 10739 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), -1999, SysTime(Date(-1999, 1, 1))); |
|---|
| 10740 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1999, SysTime(DateTime(1999, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 10741 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 0, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 10742 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), -1999, SysTime(DateTime(-1999, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 10743 | | |
|---|
| 10744 | | testST(SysTime(Date(1, 7, 2)), 12, SysTime(Date(12, 7, 2))); |
|---|
| 10745 | | testST(SysTime(Date(5007, 7, 2)), 5, SysTime(Date(5, 7, 2))); |
|---|
| 10746 | | testST(SysTime(Date(0, 7, 2)), 999, SysTime(Date(999, 7, 2))); |
|---|
| 10747 | | testST(SysTime(Date(-1202, 7, 2)), 2300, SysTime(Date(2300, 7, 2))); |
|---|
| 10748 | | |
|---|
| 10749 | | testST(SysTime(Date(1, 7, 2)), -12, SysTime(Date(-12, 7, 2))); |
|---|
| 10750 | | testST(SysTime(Date(5007, 7, 2)), -5, SysTime(Date(-5, 7, 2))); |
|---|
| 10751 | | testST(SysTime(Date(0, 7, 2)), -999, SysTime(Date(-999, 7, 2))); |
|---|
| 10752 | | testST(SysTime(Date(-1202, 7, 2)), -2300, SysTime(Date(-2300, 7, 2))); |
|---|
| 10753 | | |
|---|
| 10754 | | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 12, SysTime(DateTime(12, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| 10755 | | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 12, SysTime(DateTime(12, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10756 | | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 0, SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10757 | | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), -1, SysTime(DateTime(-1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10758 | | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 1, SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10759 | | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 999, SysTime(DateTime(999, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10760 | | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2010, SysTime(DateTime(2010, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10761 | | |
|---|
| 10762 | | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 5, SysTime(DateTime(5, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| 10763 | | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5, SysTime(DateTime(5, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10764 | | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 0, SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10765 | | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), -507, SysTime(DateTime(-507, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10766 | | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2300, SysTime(DateTime(2300, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10767 | | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5007, SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10768 | | |
|---|
| 10769 | | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 12, SysTime(DateTime(12, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| 10770 | | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 12, SysTime(DateTime(12, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10771 | | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 0, SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10772 | | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), -1, SysTime(DateTime(-1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10773 | | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 1, SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10774 | | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 999, SysTime(DateTime(999, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10775 | | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2010, SysTime(DateTime(2010, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10776 | | |
|---|
| 10777 | | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 5, SysTime(DateTime(5, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| 10778 | | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5, SysTime(DateTime(5, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10779 | | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 0, SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10780 | | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), -507, SysTime(DateTime(-507, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10781 | | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2300, SysTime(DateTime(2300, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10782 | | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5007, SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10783 | | |
|---|
| 10784 | | testST(SysTime(0, UTC()), 12, SysTime(DateTime(12, 1, 1, 0, 0, 0), UTC())); |
|---|
| 10785 | | |
|---|
| 10786 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 10787 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 10788 | | static assert(!__traits(compiles, cst.year = 7)); |
|---|
| 10789 | | //static assert(!__traits(compiles, ist.year = 7)); |
|---|
| 10790 | | |
|---|
| 10791 | | //Verify Examples. |
|---|
| 10792 | | assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).year == 1999); |
|---|
| 10793 | | assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).year == 2010); |
|---|
| 10794 | | assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).year == -7); |
|---|
| 10795 | | } |
|---|
| 10796 | | } |
|---|
| 10797 | | |
|---|
| 10798 | | |
|---|
| 10799 | | /++ |
|---|
| 10800 | | Year B.C. of the Gregorian Calendar counting year 0 as 1 B.C. |
|---|
| 10801 | | |
|---|
| 10802 | | Throws: |
|---|
| 10803 | | DateTimeException if $(D isAD) is true. |
|---|
| 10804 | | |
|---|
| 10805 | | Examples: |
|---|
| 10806 | | -------------------- |
|---|
| 10807 | | assert(SysTime(DateTime(0, 1, 1, 12, 30, 33)).yearBC == 1); |
|---|
| 10808 | | assert(SysTime(DateTime(-1, 1, 1, 10, 7, 2)).yearBC == 2); |
|---|
| 10809 | | assert(SysTime(DateTime(-100, 1, 1, 4, 59, 0)).yearBC == 101); |
|---|
| 10810 | | -------------------- |
|---|
| 10811 | | +/ |
|---|
| 10812 | | @property ushort yearBC() const |
|---|
| 10813 | | { |
|---|
| 10814 | | return (cast(Date)this).yearBC; |
|---|
| 10815 | | } |
|---|
| 10816 | | |
|---|
| 10817 | | unittest |
|---|
| 10818 | | { |
|---|
| 10819 | | version(testStdDateTime) |
|---|
| 10820 | | { |
|---|
| 10821 | | assertThrown!DateTimeException((in SysTime st){st.yearBC;}(SysTime(Date(1, 1, 1), UTC()))); |
|---|
| 10822 | | assertThrown!DateTimeException((in SysTime st){st.yearBC;}(SysTime(0, UTC()))); |
|---|
| 10823 | | assertThrown!DateTimeException((in SysTime st){st.yearBC;}(SysTime(1, UTC()))); |
|---|
| 10824 | | |
|---|
| 10825 | | assertPred!"=="(SysTime(-1, UTC()).yearBC, 1); |
|---|
| 10826 | | assertPred!"=="(SysTime(DateTime(-12, 1, 1, 0, 0, 0)).yearBC, 13); |
|---|
| 10827 | | |
|---|
| 10828 | | auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 10829 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 10830 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 10831 | | static assert(__traits(compiles, st.year = 12)); |
|---|
| 10832 | | static assert(!__traits(compiles, cst.year = 12)); |
|---|
| 10833 | | //static assert(!__traits(compiles, ist.year = 12)); |
|---|
| 10834 | | |
|---|
| 10835 | | //Verify Examples. |
|---|
| 10836 | | assert(SysTime(DateTime(0, 1, 1, 12, 30, 33)).yearBC == 1); |
|---|
| 10837 | | assert(SysTime(DateTime(-1, 1, 1, 10, 7, 2)).yearBC == 2); |
|---|
| 10838 | | assert(SysTime(DateTime(-100, 1, 1, 4, 59, 0)).yearBC == 101); |
|---|
| 10839 | | } |
|---|
| 10840 | | } |
|---|
| 10841 | | |
|---|
| 10842 | | |
|---|
| 10843 | | /++ |
|---|
| 10844 | | Year B.C. of the Gregorian Calendar counting year 0 as 1 B.C. |
|---|
| 10845 | | |
|---|
| 10846 | | Params: |
|---|
| 10847 | | year = The year B.C. to set this SysTime's year to. |
|---|
| 10848 | | |
|---|
| 10849 | | Throws: |
|---|
| 10850 | | DateTimeException if a non-positive value is given. |
|---|
| 10851 | | |
|---|
| 10852 | | Examples: |
|---|
| 10853 | | -------------------- |
|---|
| 10854 | | auto st = SysTime(DateTime(2010, 1, 1, 7, 30, 0)); |
|---|
| 10855 | | st.yearBC = 1; |
|---|
| 10856 | | assert(st == SysTime(DateTime(0, 1, 1, 7, 30, 0))); |
|---|
| 10857 | | |
|---|
| 10858 | | st.yearBC = 10; |
|---|
| 10859 | | assert(st == SysTime(DateTime(-9, 1, 1, 7, 30, 0))); |
|---|
| 10860 | | -------------------- |
|---|
| 10861 | | +/ |
|---|
| 10862 | | @property void yearBC(int year) |
|---|
| 10863 | | { |
|---|
| 10864 | | auto hnsecs = adjTime; |
|---|
| 10865 | | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| 10866 | | |
|---|
| 10867 | | if(hnsecs < 0) |
|---|
| 10868 | | { |
|---|
| 10869 | | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| 10870 | | --days; |
|---|
| 10871 | | } |
|---|
| 10872 | | |
|---|
| 10873 | | auto date = Date(cast(int)days); |
|---|
| 10874 | | date.yearBC = year; |
|---|
| 10875 | | |
|---|
| 10876 | | immutable newDaysHNSecs = convert!("days", "hnsecs")(date.dayOfGregorianCal - 1); |
|---|
| 10877 | | |
|---|
| 10878 | | adjTime = newDaysHNSecs + hnsecs; |
|---|
| 10879 | | } |
|---|
| 10880 | | |
|---|
| 10881 | | unittest |
|---|
| 10882 | | { |
|---|
| 10883 | | version(testStdDateTime) |
|---|
| 10884 | | { |
|---|
| 10885 | | static void testSTInvalid(SysTime st, int year) |
|---|
| 10886 | | { |
|---|
| 10887 | | st.yearBC = year; |
|---|
| 10888 | | } |
|---|
| 10889 | | |
|---|
| 10890 | | static void testST(SysTime st, int year, in SysTime expected, size_t line = __LINE__) |
|---|
| 10891 | | { |
|---|
| 10892 | | st.yearBC = year; |
|---|
| 10893 | | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| 10894 | | } |
|---|
| 10895 | | |
|---|
| 10896 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 1, 1)), 0)); |
|---|
| 10897 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 1, 1)), -1)); |
|---|
| 10898 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 1, 1)), -1202)); |
|---|
| 10899 | | |
|---|
| 10900 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), 1999, SysTime(Date(-1998, 1, 1))); |
|---|
| 10901 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), 1, SysTime(Date(0, 1, 1))); |
|---|
| 10902 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1999, SysTime(DateTime(-1998, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 10903 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 10904 | | |
|---|
| 10905 | | testST(SysTime(Date(1, 7, 2)), 12, SysTime(Date(-11, 7, 2))); |
|---|
| 10906 | | testST(SysTime(Date(5007, 7, 2)), 5, SysTime(Date(-4, 7, 2))); |
|---|
| 10907 | | testST(SysTime(Date(0, 7, 2)), 999, SysTime(Date(-998, 7, 2))); |
|---|
| 10908 | | testST(SysTime(Date(-1202, 7, 2)), 2300, SysTime(Date(-2299, 7, 2))); |
|---|
| 10909 | | |
|---|
| 10910 | | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 12, SysTime(DateTime(-11, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| 10911 | | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 12, SysTime(DateTime(-11, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10912 | | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 1, SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10913 | | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 999, SysTime(DateTime(-998, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10914 | | testST(SysTime(DateTime(1, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2010, SysTime(DateTime(-2009, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10915 | | |
|---|
| 10916 | | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 5, SysTime(DateTime(-4, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| 10917 | | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5, SysTime(DateTime(-4, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10918 | | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2300, SysTime(DateTime(-2299, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10919 | | testST(SysTime(DateTime(5007, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5007, SysTime(DateTime(-5006, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10920 | | |
|---|
| 10921 | | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 12, SysTime(DateTime(-11, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| 10922 | | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 12, SysTime(DateTime(-11, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10923 | | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 1, SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10924 | | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 999, SysTime(DateTime(-998, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10925 | | testST(SysTime(DateTime(0, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2010, SysTime(DateTime(-2009, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10926 | | |
|---|
| 10927 | | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0)), 5, SysTime(DateTime(-4, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(0))); |
|---|
| 10928 | | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5, SysTime(DateTime(-4, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10929 | | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 2300, SysTime(DateTime(-2299, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10930 | | testST(SysTime(DateTime(-1202, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007)), 5007, SysTime(DateTime(-5006, 7, 2, 1, 3, 2), FracSec.from!"hnsecs"(5007))); |
|---|
| 10931 | | |
|---|
| 10932 | | testST(SysTime(0, UTC()), 12, SysTime(DateTime(-11, 1, 1, 0, 0, 0), UTC())); |
|---|
| 10933 | | |
|---|
| 10934 | | { |
|---|
| 10935 | | auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 10936 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 10937 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 10938 | | static assert(__traits(compiles, st.yearBC = 12)); |
|---|
| 10939 | | static assert(!__traits(compiles, cst.yearBC = 12)); |
|---|
| 10940 | | //static assert(!__traits(compiles, ist.yearBC = 12)); |
|---|
| 10941 | | } |
|---|
| 10942 | | |
|---|
| 10943 | | //Verify Examples. |
|---|
| 10944 | | { |
|---|
| 10945 | | auto st = SysTime(DateTime(2010, 1, 1, 7, 30, 0)); |
|---|
| 10946 | | st.yearBC = 1; |
|---|
| 10947 | | assert(st == SysTime(DateTime(0, 1, 1, 7, 30, 0))); |
|---|
| 10948 | | |
|---|
| 10949 | | st.yearBC = 10; |
|---|
| 10950 | | assert(st == SysTime(DateTime(-9, 1, 1, 7, 30, 0))); |
|---|
| 10951 | | } |
|---|
| 10952 | | } |
|---|
| 10953 | | } |
|---|
| 10954 | | |
|---|
| 10955 | | |
|---|
| 10956 | | /++ |
|---|
| 10957 | | Month of a Gregorian Year. |
|---|
| 10958 | | |
|---|
| 10959 | | Examples: |
|---|
| 10960 | | -------------------- |
|---|
| 10961 | | assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).month == 7); |
|---|
| 10962 | | assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).month == 10); |
|---|
| 10963 | | assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).month == 4); |
|---|
| 10964 | | -------------------- |
|---|
| 10965 | | +/ |
|---|
| 10966 | | @property Month month() const nothrow |
|---|
| 10967 | | { |
|---|
| 10968 | | return (cast(Date)this).month; |
|---|
| 10969 | | } |
|---|
| 10970 | | |
|---|
| 10971 | | unittest |
|---|
| 10972 | | { |
|---|
| 10973 | | version(testStdDateTime) |
|---|
| 10974 | | { |
|---|
| 10975 | | assertPred!"=="(SysTime(0, UTC()).month, 1); |
|---|
| 10976 | | assertPred!"=="(SysTime(1, UTC()).month, 1); |
|---|
| 10977 | | assertPred!"=="(SysTime(-1, UTC()).month, 12); |
|---|
| 10978 | | assertPred!"=="(SysTime(DateTime(1, 12, 1, 0, 0, 0)).month, 12); |
|---|
| 10979 | | assertPred!"=="(SysTime(DateTime(0, 12, 1, 0, 0, 0)).month, 12); |
|---|
| 10980 | | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)).month, 7); |
|---|
| 10981 | | assertPred!"=="(SysTime(DateTime(-1999, 7, 6, 12, 30, 33)).month, 7); |
|---|
| 10982 | | |
|---|
| 10983 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 10984 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 10985 | | static assert(__traits(compiles, cst.month)); |
|---|
| 10986 | | //static assert(__traits(compiles, ist.month)); |
|---|
| 10987 | | |
|---|
| 10988 | | //Verify Examples. |
|---|
| 10989 | | assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).month == 7); |
|---|
| 10990 | | assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).month == 10); |
|---|
| 10991 | | assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).month == 4); |
|---|
| 10992 | | } |
|---|
| 10993 | | } |
|---|
| 10994 | | |
|---|
| 10995 | | |
|---|
| 10996 | | /++ |
|---|
| 10997 | | Month of a Gregorian Year. |
|---|
| 10998 | | |
|---|
| 10999 | | Params: |
|---|
| 11000 | | month = The month to set this SysTime's month to. |
|---|
| 11001 | | |
|---|
| 11002 | | Throws: |
|---|
| 11003 | | DateTimeException if the given month is not a valid month. |
|---|
| 11004 | | +/ |
|---|
| 11005 | | @property void month(Month month) |
|---|
| 11006 | | { |
|---|
| 11007 | | auto hnsecs = adjTime; |
|---|
| 11008 | | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| 11009 | | |
|---|
| 11010 | | if(hnsecs < 0) |
|---|
| 11011 | | { |
|---|
| 11012 | | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| 11013 | | --days; |
|---|
| 11014 | | } |
|---|
| 11015 | | |
|---|
| 11016 | | auto date = Date(cast(int)days); |
|---|
| 11017 | | date.month = month; |
|---|
| 11018 | | |
|---|
| 11019 | | immutable newDaysHNSecs = convert!("days", "hnsecs")(date.dayOfGregorianCal - 1); |
|---|
| 11020 | | |
|---|
| 11021 | | adjTime = newDaysHNSecs + hnsecs; |
|---|
| 11022 | | } |
|---|
| 11023 | | |
|---|
| 11024 | | unittest |
|---|
| 11025 | | { |
|---|
| 11026 | | version(testStdDateTime) |
|---|
| 11027 | | { |
|---|
| 11028 | | static void testSTInvalid(SysTime st, Month month) |
|---|
| 11029 | | { |
|---|
| 11030 | | st.month = month; |
|---|
| 11031 | | } |
|---|
| 11032 | | |
|---|
| 11033 | | static void testST(SysTime st, Month month, in SysTime expected, size_t line = __LINE__) |
|---|
| 11034 | | { |
|---|
| 11035 | | st.month = month; |
|---|
| 11036 | | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| 11037 | | } |
|---|
| 11038 | | |
|---|
| 11039 | | assertThrown!DateTimeException(testSTInvalid(SysTime(DateTime(1, 1, 1, 12, 30, 33)), cast(Month)0)); |
|---|
| 11040 | | assertThrown!DateTimeException(testSTInvalid(SysTime(DateTime(1, 1, 1, 12, 30, 33)), cast(Month)13)); |
|---|
| 11041 | | assertThrown!DateTimeException(testSTInvalid(SysTime(DateTime(1, 1, 29, 12, 30, 33)), cast(Month)2)); |
|---|
| 11042 | | assertThrown!DateTimeException(testSTInvalid(SysTime(DateTime(1, 7, 31, 12, 30, 33)), cast(Month)6)); |
|---|
| 11043 | | assertThrown!DateTimeException(testSTInvalid(SysTime(DateTime(4, 7, 30, 12, 30, 33)), cast(Month)2)); |
|---|
| 11044 | | |
|---|
| 11045 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), cast(Month)1, SysTime(Date(1, 1, 1))); |
|---|
| 11046 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), cast(Month)7, SysTime(Date(1, 7, 1))); |
|---|
| 11047 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), cast(Month)12, SysTime(Date(1, 12, 1))); |
|---|
| 11048 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11049 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)7, SysTime(DateTime(1, 7, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11050 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)12, SysTime(DateTime(1, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11051 | | |
|---|
| 11052 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), cast(Month)1, SysTime(Date(0, 1, 1))); |
|---|
| 11053 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), cast(Month)7, SysTime(Date(0, 7, 1))); |
|---|
| 11054 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), cast(Month)12, SysTime(Date(0, 12, 1))); |
|---|
| 11055 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)1, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11056 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)7, SysTime(DateTime(0, 7, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11057 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)12, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11058 | | |
|---|
| 11059 | | testST(SysTime(Date(1, 7, 2)), cast(Month)12, SysTime(Date(1, 12, 2))); |
|---|
| 11060 | | testST(SysTime(Date(5007, 7, 2)), cast(Month)5, SysTime(Date(5007, 5, 2))); |
|---|
| 11061 | | testST(SysTime(Date(0, 7, 2)), cast(Month)7, SysTime(Date(0, 7, 2))); |
|---|
| 11062 | | testST(SysTime(Date(-1202, 7, 2)), cast(Month)1, SysTime(Date(-1202, 1, 2))); |
|---|
| 11063 | | |
|---|
| 11064 | | testST(SysTime(DateTime(1, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(0)), cast(Month)12, SysTime(DateTime(1, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(0))); |
|---|
| 11065 | | testST(SysTime(DateTime(1, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(1)), cast(Month)12, SysTime(DateTime(1, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(1))); |
|---|
| 11066 | | testST(SysTime(DateTime(1, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(2)), cast(Month)7, SysTime(DateTime(1, 7, 29, 9, 13, 2), FracSec.from!"hnsecs"(2))); |
|---|
| 11067 | | testST(SysTime(DateTime(1, 11, 28, 10, 13, 2), FracSec.from!"hnsecs"(3)), cast(Month)1, SysTime(DateTime(1, 1, 28, 10, 13, 2), FracSec.from!"hnsecs"(3))); |
|---|
| 11068 | | testST(SysTime(DateTime(1, 1, 28, 10, 13, 2), FracSec.from!"hnsecs"(4)), cast(Month)2, SysTime(DateTime(1, 2, 28, 10, 13, 2), FracSec.from!"hnsecs"(4))); |
|---|
| 11069 | | testST(SysTime(DateTime(1, 7, 28, 10, 13, 2), FracSec.from!"hnsecs"(5)),cast(Month) 6, SysTime(DateTime(1, 6, 28, 10, 13, 2), FracSec.from!"hnsecs"(5))); |
|---|
| 11070 | | testST(SysTime(DateTime(4, 7, 29, 10, 13, 2), FracSec.from!"hnsecs"(6)), cast(Month)2, SysTime(DateTime(4, 2, 29, 10, 13, 2), FracSec.from!"hnsecs"(6))); |
|---|
| 11071 | | testST(SysTime(DateTime(4, 7, 31, 10, 13, 2), FracSec.from!"hnsecs"(6)), cast(Month)8, SysTime(DateTime(4, 8, 31, 10, 13, 2), FracSec.from!"hnsecs"(6))); |
|---|
| 11072 | | |
|---|
| 11073 | | testST(SysTime(DateTime(1207, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(0)), cast(Month)12, SysTime(DateTime(1207, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(0))); |
|---|
| 11074 | | testST(SysTime(DateTime(1207, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(11)), cast(Month)12, SysTime(DateTime(1207, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(11))); |
|---|
| 11075 | | testST(SysTime(DateTime(1207, 12, 29, 9, 12, 3), FracSec.from!"hnsecs"(10)), cast(Month)7, SysTime(DateTime(1207, 7, 29, 9, 12, 3), FracSec.from!"hnsecs"(10))); |
|---|
| 11076 | | testST(SysTime(DateTime(1207, 11, 28, 10, 12, 3), FracSec.from!"hnsecs"(9)), cast(Month)1, SysTime(DateTime(1207, 1, 28, 10, 12, 3), FracSec.from!"hnsecs"(9))); |
|---|
| 11077 | | testST(SysTime(DateTime(1207, 1, 28, 10, 12, 3), FracSec.from!"hnsecs"(8)), cast(Month)2, SysTime(DateTime(1207, 2, 28, 10, 12, 3), FracSec.from!"hnsecs"(8))); |
|---|
| 11078 | | testST(SysTime(DateTime(1207, 7, 28, 10, 12, 3), FracSec.from!"hnsecs"(7)), cast(Month)6, SysTime(DateTime(1207, 6, 28, 10, 12, 3), FracSec.from!"hnsecs"(7))); |
|---|
| 11079 | | |
|---|
| 11080 | | testST(SysTime(DateTime(0, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(0)), cast(Month)12, SysTime(DateTime(0, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(0))); |
|---|
| 11081 | | testST(SysTime(DateTime(0, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(1)), cast(Month)12, SysTime(DateTime(0, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(1))); |
|---|
| 11082 | | testST(SysTime(DateTime(0, 12, 29, 9, 13, 2), FracSec.from!"hnsecs"(2)), cast(Month)7, SysTime(DateTime(0, 7, 29, 9, 13, 2), FracSec.from!"hnsecs"(2))); |
|---|
| 11083 | | testST(SysTime(DateTime(0, 11, 28, 10, 13, 2), FracSec.from!"hnsecs"(3)), cast(Month)1, SysTime(DateTime(0, 1, 28, 10, 13, 2), FracSec.from!"hnsecs"(3))); |
|---|
| 11084 | | testST(SysTime(DateTime(0, 1, 28, 10, 13, 2), FracSec.from!"hnsecs"(4)), cast(Month)2, SysTime(DateTime(0, 2, 28, 10, 13, 2), FracSec.from!"hnsecs"(4))); |
|---|
| 11085 | | testST(SysTime(DateTime(0, 7, 28, 10, 13, 2), FracSec.from!"hnsecs"(5)), cast(Month)6, SysTime(DateTime(0, 6, 28, 10, 13, 2), FracSec.from!"hnsecs"(5))); |
|---|
| 11086 | | |
|---|
| 11087 | | testST(SysTime(DateTime(0, 12, 30, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)11, SysTime(DateTime(0, 11, 30, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11088 | | testST(SysTime(DateTime(-1, 7, 28, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)2, SysTime(DateTime(-1, 2, 28, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11089 | | testST(SysTime(DateTime(0, 7, 29, 0, 0, 0), FracSec.from!"hnsecs"(1)), cast(Month)2, SysTime(DateTime(0, 2, 29, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11090 | | testST(SysTime(DateTime(0, 7, 29, 10, 13, 2), FracSec.from!"hnsecs"(6)), cast(Month)2, SysTime(DateTime(0, 2, 29, 10, 13, 2), FracSec.from!"hnsecs"(6))); |
|---|
| 11091 | | testST(SysTime(DateTime(0, 7, 31, 10, 13, 2), FracSec.from!"hnsecs"(6)), cast(Month)8, SysTime(DateTime(0, 8, 31, 10, 13, 2), FracSec.from!"hnsecs"(6))); |
|---|
| 11092 | | |
|---|
| 11093 | | testST(SysTime(DateTime(-9999, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(0)), cast(Month)12, SysTime(DateTime(-9999, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(0))); |
|---|
| 11094 | | testST(SysTime(DateTime(-9999, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(11)), cast(Month)12, SysTime(DateTime(-9999, 12, 29, 9, 12, 2), FracSec.from!"hnsecs"(11))); |
|---|
| 11095 | | testST(SysTime(DateTime(-9999, 12, 29, 9, 12, 3), FracSec.from!"hnsecs"(10)), cast(Month)7, SysTime(DateTime(-9999, 7, 29, 9, 12, 3), FracSec.from!"hnsecs"(10))); |
|---|
| 11096 | | testST(SysTime(DateTime(-9999, 11, 28, 10, 12, 3), FracSec.from!"hnsecs"(9)), cast(Month)1, SysTime(DateTime(-9999, 1, 28, 10, 12, 3), FracSec.from!"hnsecs"(9))); |
|---|
| 11097 | | testST(SysTime(DateTime(-9999, 1, 28, 10, 12, 3), FracSec.from!"hnsecs"(8)), cast(Month)2, SysTime(DateTime(-9999, 2, 28, 10, 12, 3), FracSec.from!"hnsecs"(8))); |
|---|
| 11098 | | testST(SysTime(DateTime(-9999, 7, 28, 10, 12, 3), FracSec.from!"hnsecs"(7)), cast(Month)6, SysTime(DateTime(-9999, 6, 28, 10, 12, 3), FracSec.from!"hnsecs"(7))); |
|---|
| 11099 | | |
|---|
| 11100 | | testST(SysTime(0, UTC()), cast(Month)12, SysTime(DateTime(1, 12, 1, 0, 0, 0), UTC())); |
|---|
| 11101 | | |
|---|
| 11102 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11103 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11104 | | static assert(!__traits(compiles, cst.month = 12)); |
|---|
| 11105 | | //static assert(!__traits(compiles, ist.month = 12)); |
|---|
| 11106 | | } |
|---|
| 11107 | | } |
|---|
| 11108 | | |
|---|
| 11109 | | |
|---|
| 11110 | | /++ |
|---|
| 11111 | | Day of a Gregorian Month. |
|---|
| 11112 | | |
|---|
| 11113 | | Examples: |
|---|
| 11114 | | -------------------- |
|---|
| 11115 | | assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).day == 6); |
|---|
| 11116 | | assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).day == 4); |
|---|
| 11117 | | assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).day == 5); |
|---|
| 11118 | | -------------------- |
|---|
| 11119 | | +/ |
|---|
| 11120 | | @property ubyte day() const nothrow |
|---|
| 11121 | | { |
|---|
| 11122 | | return (cast(Date)this).day; |
|---|
| 11123 | | } |
|---|
| 11124 | | |
|---|
| 11125 | | unittest |
|---|
| 11126 | | { |
|---|
| 11127 | | version(testStdDateTime) |
|---|
| 11128 | | { |
|---|
| 11129 | | assertPred!"=="(SysTime(0, UTC()).day, 1); |
|---|
| 11130 | | assertPred!"=="(SysTime(1, UTC()).day, 1); |
|---|
| 11131 | | assertPred!"=="(SysTime(-1, UTC()).day, 31); |
|---|
| 11132 | | assertPred!"=="(SysTime(DateTime(50, 2, 4)).day, 4); |
|---|
| 11133 | | assertPred!"=="(SysTime(DateTime(50, 2, 4, 0, 0, 1)).day, 4); |
|---|
| 11134 | | assertPred!"=="(SysTime(DateTime(1999, 7, 6)).day, 6); |
|---|
| 11135 | | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 0, 0, 0)).day, 6); |
|---|
| 11136 | | assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)).day, 6); |
|---|
| 11137 | | assertPred!"=="(SysTime(DateTime(-50, 2, 4)).day, 4); |
|---|
| 11138 | | assertPred!"=="(SysTime(DateTime(-50, 2, 4, 0, 0, 1)).day, 4); |
|---|
| 11139 | | assertPred!"=="(SysTime(Date(-1999, 7, 6)).day, 6); |
|---|
| 11140 | | assertPred!"=="(SysTime(DateTime(-1999, 7, 6, 0, 0, 0)).day, 6); |
|---|
| 11141 | | assertPred!"=="(SysTime(DateTime(-1999, 7, 6, 12, 30, 33)).day, 6); |
|---|
| 11142 | | |
|---|
| 11143 | | assertPred!"=="(SysTime(DateTime(1, 1, 12, 0, 0, 0)).day, 12); |
|---|
| 11144 | | assertPred!"=="(SysTime(DateTime(0, 1, 12, 0, 0, 0)).day, 12); |
|---|
| 11145 | | |
|---|
| 11146 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11147 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11148 | | static assert(__traits(compiles, cst.day)); |
|---|
| 11149 | | //static assert(__traits(compiles, ist.day)); |
|---|
| 11150 | | |
|---|
| 11151 | | //Verify Examples. |
|---|
| 11152 | | assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).day == 6); |
|---|
| 11153 | | assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).day == 4); |
|---|
| 11154 | | assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).day == 5); |
|---|
| 11155 | | } |
|---|
| 11156 | | } |
|---|
| 11157 | | |
|---|
| 11158 | | |
|---|
| 11159 | | /++ |
|---|
| 11160 | | Day of a Gregorian Month. |
|---|
| 11161 | | |
|---|
| 11162 | | Params: |
|---|
| 11163 | | day = The day of the month to set this SysTime's day to. |
|---|
| 11164 | | |
|---|
| 11165 | | Throws: |
|---|
| 11166 | | DateTimeException if the given day is not a valid day of the current |
|---|
| 11167 | | month. |
|---|
| 11168 | | +/ |
|---|
| 11169 | | @property void day(int day) |
|---|
| 11170 | | { |
|---|
| 11171 | | auto hnsecs = adjTime; |
|---|
| 11172 | | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| 11173 | | |
|---|
| 11174 | | if(hnsecs < 0) |
|---|
| 11175 | | { |
|---|
| 11176 | | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| 11177 | | --days; |
|---|
| 11178 | | } |
|---|
| 11179 | | |
|---|
| 11180 | | auto date = Date(cast(int)days); |
|---|
| 11181 | | date.day = day; |
|---|
| 11182 | | |
|---|
| 11183 | | immutable newDaysHNSecs = convert!("days", "hnsecs")(date.dayOfGregorianCal - 1); |
|---|
| 11184 | | |
|---|
| 11185 | | adjTime = newDaysHNSecs + hnsecs; |
|---|
| 11186 | | } |
|---|
| 11187 | | |
|---|
| 11188 | | unittest |
|---|
| 11189 | | { |
|---|
| 11190 | | version(testStdDateTime) |
|---|
| 11191 | | { |
|---|
| 11192 | | static void testSTInvalid(SysTime st, int day) |
|---|
| 11193 | | { |
|---|
| 11194 | | st.day = day; |
|---|
| 11195 | | } |
|---|
| 11196 | | |
|---|
| 11197 | | static void testST(SysTime st, int day, in SysTime expected, size_t line = __LINE__) |
|---|
| 11198 | | { |
|---|
| 11199 | | st.day = day; |
|---|
| 11200 | | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| 11201 | | } |
|---|
| 11202 | | |
|---|
| 11203 | | //Test A.D. |
|---|
| 11204 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 1, 1)), 0)); |
|---|
| 11205 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 1, 1)), 32)); |
|---|
| 11206 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 2, 1)), 29)); |
|---|
| 11207 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(4, 2, 1)), 30)); |
|---|
| 11208 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 3, 1)), 32)); |
|---|
| 11209 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 4, 1)), 31)); |
|---|
| 11210 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 5, 1)), 32)); |
|---|
| 11211 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 6, 1)), 31)); |
|---|
| 11212 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 7, 1)), 32)); |
|---|
| 11213 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 8, 1)), 32)); |
|---|
| 11214 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 9, 1)), 31)); |
|---|
| 11215 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 10, 1)), 32)); |
|---|
| 11216 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 11, 1)), 31)); |
|---|
| 11217 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 12, 1)), 32)); |
|---|
| 11218 | | |
|---|
| 11219 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 1, 1)), 31)); |
|---|
| 11220 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 2, 1)), 28)); |
|---|
| 11221 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(4, 2, 1)), 29)); |
|---|
| 11222 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 3, 1)), 31)); |
|---|
| 11223 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 4, 1)), 30)); |
|---|
| 11224 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 5, 1)), 31)); |
|---|
| 11225 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 6, 1)), 30)); |
|---|
| 11226 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 7, 1)), 31)); |
|---|
| 11227 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 8, 1)), 31)); |
|---|
| 11228 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 9, 1)), 30)); |
|---|
| 11229 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 10, 1)), 31)); |
|---|
| 11230 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 11, 1)), 30)); |
|---|
| 11231 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(1, 12, 1)), 31)); |
|---|
| 11232 | | |
|---|
| 11233 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), 1, SysTime(Date(1, 1, 1))); |
|---|
| 11234 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), 7, SysTime(Date(1, 1, 7))); |
|---|
| 11235 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), 12, SysTime(Date(1, 1, 12))); |
|---|
| 11236 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11237 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 1, 7, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11238 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 1, 12, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11239 | | |
|---|
| 11240 | | testST(SysTime(Date(1, 7, 2)), 12, SysTime(Date(1, 7, 12))); |
|---|
| 11241 | | testST(SysTime(Date(5007, 7, 2)), 5, SysTime(Date(5007, 7, 5))); |
|---|
| 11242 | | |
|---|
| 11243 | | testST(SysTime(DateTime(1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(1, 1, 6, 12, 22, 17), FracSec.from!"hnsecs"(7))); |
|---|
| 11244 | | testST(SysTime(DateTime(1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70))); |
|---|
| 11245 | | testST(SysTime(DateTime(1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700))); |
|---|
| 11246 | | testST(SysTime(DateTime(1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(1, 2, 5, 12, 22, 17), FracSec.from!"hnsecs"(7000))); |
|---|
| 11247 | | testST(SysTime(DateTime(1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000))); |
|---|
| 11248 | | testST(SysTime(DateTime(1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 29, SysTime(DateTime(1, 12, 29, 12, 22, 17), FracSec.from!"hnsecs"(700_000))); |
|---|
| 11249 | | |
|---|
| 11250 | | testST(SysTime(DateTime(999, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(999, 1, 6, 12, 22, 17), FracSec.from!"hnsecs"(9))); |
|---|
| 11251 | | testST(SysTime(DateTime(999, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(999, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90))); |
|---|
| 11252 | | testST(SysTime(DateTime(999, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(999, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900))); |
|---|
| 11253 | | testST(SysTime(DateTime(999, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(999, 2, 5, 12, 22, 17), FracSec.from!"hnsecs"(9000))); |
|---|
| 11254 | | testST(SysTime(DateTime(999, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(999, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000))); |
|---|
| 11255 | | testST(SysTime(DateTime(999, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 29, SysTime(DateTime(999, 12, 29, 12, 22, 17), FracSec.from!"hnsecs"(900_000))); |
|---|
| 11256 | | |
|---|
| 11257 | | //Test B.C. |
|---|
| 11258 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 1, 1)), 0)); |
|---|
| 11259 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 1, 1)), 32)); |
|---|
| 11260 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 2, 1)), 29)); |
|---|
| 11261 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(0, 2, 1)), 30)); |
|---|
| 11262 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 3, 1)), 32)); |
|---|
| 11263 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 4, 1)), 31)); |
|---|
| 11264 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 5, 1)), 32)); |
|---|
| 11265 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 6, 1)), 31)); |
|---|
| 11266 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 7, 1)), 32)); |
|---|
| 11267 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 8, 1)), 32)); |
|---|
| 11268 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 9, 1)), 31)); |
|---|
| 11269 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 10, 1)), 32)); |
|---|
| 11270 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 11, 1)), 31)); |
|---|
| 11271 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 12, 1)), 32)); |
|---|
| 11272 | | |
|---|
| 11273 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 1, 1)), 31)); |
|---|
| 11274 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 2, 1)), 28)); |
|---|
| 11275 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(0, 2, 1)), 29)); |
|---|
| 11276 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 3, 1)), 31)); |
|---|
| 11277 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 4, 1)), 30)); |
|---|
| 11278 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 5, 1)), 31)); |
|---|
| 11279 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 6, 1)), 30)); |
|---|
| 11280 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 7, 1)), 31)); |
|---|
| 11281 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 8, 1)), 31)); |
|---|
| 11282 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 9, 1)), 30)); |
|---|
| 11283 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 10, 1)), 31)); |
|---|
| 11284 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 11, 1)), 30)); |
|---|
| 11285 | | assertNotThrown!DateTimeException(testSTInvalid(SysTime(Date(-1, 12, 1)), 31)); |
|---|
| 11286 | | |
|---|
| 11287 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), 1, SysTime(Date(0, 1, 1))); |
|---|
| 11288 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), 7, SysTime(Date(0, 1, 7))); |
|---|
| 11289 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), 12, SysTime(Date(0, 1, 12))); |
|---|
| 11290 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11291 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 1, 7, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11292 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 1, 12, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11293 | | |
|---|
| 11294 | | testST(SysTime(Date(0, 7, 2)), 7, SysTime(Date(0, 7, 7))); |
|---|
| 11295 | | testST(SysTime(Date(-1202, 7, 2)), 1, SysTime(Date(-1202, 7, 1))); |
|---|
| 11296 | | |
|---|
| 11297 | | testST(SysTime(DateTime(0, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(0, 1, 6, 12, 22, 17), FracSec.from!"hnsecs"(7))); |
|---|
| 11298 | | testST(SysTime(DateTime(0, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(0, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70))); |
|---|
| 11299 | | testST(SysTime(DateTime(0, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(0, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700))); |
|---|
| 11300 | | testST(SysTime(DateTime(0, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(0, 2, 5, 12, 22, 17), FracSec.from!"hnsecs"(7000))); |
|---|
| 11301 | | testST(SysTime(DateTime(0, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(0, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000))); |
|---|
| 11302 | | testST(SysTime(DateTime(0, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 29, SysTime(DateTime(0, 12, 29, 12, 22, 17), FracSec.from!"hnsecs"(700_000))); |
|---|
| 11303 | | |
|---|
| 11304 | | testST(SysTime(DateTime(-1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(-1, 1, 6, 12, 22, 17), FracSec.from!"hnsecs"(9))); |
|---|
| 11305 | | testST(SysTime(DateTime(-1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(-1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90))); |
|---|
| 11306 | | testST(SysTime(DateTime(-1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(-1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900))); |
|---|
| 11307 | | testST(SysTime(DateTime(-1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(-1, 2, 5, 12, 22, 17), FracSec.from!"hnsecs"(9000))); |
|---|
| 11308 | | testST(SysTime(DateTime(-1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(-1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000))); |
|---|
| 11309 | | testST(SysTime(DateTime(-1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 29, SysTime(DateTime(-1, 12, 29, 12, 22, 17), FracSec.from!"hnsecs"(900_000))); |
|---|
| 11310 | | |
|---|
| 11311 | | testST(SysTime(0, UTC()), 12, SysTime(DateTime(1, 1, 12, 0, 0, 0), UTC())); |
|---|
| 11312 | | |
|---|
| 11313 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11314 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11315 | | static assert(!__traits(compiles, cst.day = 27)); |
|---|
| 11316 | | //static assert(!__traits(compiles, ist.day = 27)); |
|---|
| 11317 | | } |
|---|
| 11318 | | } |
|---|
| 11319 | | |
|---|
| 11320 | | |
|---|
| 11321 | | /++ |
|---|
| 11322 | | Hours past midnight. |
|---|
| 11323 | | +/ |
|---|
| 11324 | | @property ubyte hour() const nothrow |
|---|
| 11325 | | { |
|---|
| 11326 | | auto hnsecs = adjTime; |
|---|
| 11327 | | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| 11328 | | |
|---|
| 11329 | | if(hnsecs < 0) |
|---|
| 11330 | | { |
|---|
| 11331 | | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| 11332 | | --days; |
|---|
| 11333 | | } |
|---|
| 11334 | | |
|---|
| 11335 | | return cast(ubyte)getUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| 11336 | | } |
|---|
| 11337 | | |
|---|
| 11338 | | unittest |
|---|
| 11339 | | { |
|---|
| 11340 | | version(testStdDateTime) |
|---|
| 11341 | | { |
|---|
| 11342 | | assertPred!"=="(SysTime(0, UTC()).hour, 0); |
|---|
| 11343 | | assertPred!"=="(SysTime(1, UTC()).hour, 0); |
|---|
| 11344 | | assertPred!"=="(SysTime(-1, UTC()).hour, 23); |
|---|
| 11345 | | assertPred!"=="(SysTime(DateTime(1, 1, 1, 12, 0, 0)).hour, 12); |
|---|
| 11346 | | assertPred!"=="(SysTime(DateTime(0, 1, 1, 12, 0, 0)).hour, 12); |
|---|
| 11347 | | |
|---|
| 11348 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11349 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11350 | | static assert(__traits(compiles, cst.hour)); |
|---|
| 11351 | | //static assert(__traits(compiles, ist.hour)); |
|---|
| 11352 | | } |
|---|
| 11353 | | } |
|---|
| 11354 | | |
|---|
| 11355 | | |
|---|
| 11356 | | /++ |
|---|
| 11357 | | Hours past midnight. |
|---|
| 11358 | | |
|---|
| 11359 | | Params: |
|---|
| 11360 | | hour = The hours to set this SysTime's hour to. |
|---|
| 11361 | | |
|---|
| 11362 | | Throws: |
|---|
| 11363 | | DateTimeException if the given hour are not a valid hour of the day. |
|---|
| 11364 | | +/ |
|---|
| 11365 | | @property void hour(int hour) |
|---|
| 11366 | | { |
|---|
| 11367 | | enforceValid!"hours"(hour); |
|---|
| 11368 | | |
|---|
| 11369 | | auto hnsecs = adjTime; |
|---|
| 11370 | | auto days = splitUnitsFromHNSecs!"days"(hnsecs); |
|---|
| 11371 | | immutable daysHNSecs = convert!("days", "hnsecs")(days); |
|---|
| 11372 | | immutable negative = hnsecs < 0; |
|---|
| 11373 | | |
|---|
| 11374 | | if(negative) |
|---|
| 11375 | | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| 11376 | | |
|---|
| 11377 | | hnsecs = removeUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| 11378 | | hnsecs += convert!("hours", "hnsecs")(hour); |
|---|
| 11379 | | |
|---|
| 11380 | | if(negative) |
|---|
| 11381 | | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| 11382 | | |
|---|
| 11383 | | adjTime = daysHNSecs + hnsecs; |
|---|
| 11384 | | } |
|---|
| 11385 | | |
|---|
| 11386 | | unittest |
|---|
| 11387 | | { |
|---|
| 11388 | | version(testStdDateTime) |
|---|
| 11389 | | { |
|---|
| 11390 | | static void testSTInvalid(SysTime st, int hour) |
|---|
| 11391 | | { |
|---|
| 11392 | | st.hour = hour; |
|---|
| 11393 | | } |
|---|
| 11394 | | |
|---|
| 11395 | | static void testST(SysTime st, int hour, in SysTime expected, size_t line = __LINE__) |
|---|
| 11396 | | { |
|---|
| 11397 | | st.hour = hour; |
|---|
| 11398 | | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| 11399 | | } |
|---|
| 11400 | | |
|---|
| 11401 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1999, 7, 6)), 24)); |
|---|
| 11402 | | |
|---|
| 11403 | | //Test A.D. |
|---|
| 11404 | | testST(SysTime(Date(1, 1, 1)), 1, SysTime(DateTime(1, 1, 1, 1, 0, 0))); |
|---|
| 11405 | | testST(SysTime(Date(1, 1, 1)), 7, SysTime(DateTime(1, 1, 1, 7, 0, 0))); |
|---|
| 11406 | | testST(SysTime(Date(1, 1, 1)), 12, SysTime(DateTime(1, 1, 1, 12, 0, 0))); |
|---|
| 11407 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 1, 1, 1, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11408 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 1, 1, 7, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11409 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 1, 1, 12, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11410 | | |
|---|
| 11411 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(1, 12, 31, 1, 59, 59))); |
|---|
| 11412 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(1, 12, 31, 7, 59, 59))); |
|---|
| 11413 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(1, 12, 31, 12, 59, 59))); |
|---|
| 11414 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 12, 31, 1, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11415 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 12, 31, 7, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11416 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 12, 31, 12, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11417 | | |
|---|
| 11418 | | testST(SysTime(Date(1, 7, 2)), 12, SysTime(DateTime(1, 7, 2, 12, 0, 0))); |
|---|
| 11419 | | testST(SysTime(Date(5007, 7, 2)), 5, SysTime(DateTime(5007, 7, 2, 5, 0, 0))); |
|---|
| 11420 | | |
|---|
| 11421 | | testST(SysTime(DateTime(1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(1, 1, 7, 6, 22, 17), FracSec.from!"hnsecs"(7))); |
|---|
| 11422 | | testST(SysTime(DateTime(1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(1, 1, 1, 1, 22, 17), FracSec.from!"hnsecs"(70))); |
|---|
| 11423 | | testST(SysTime(DateTime(1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(1, 2, 1, 1, 22, 17), FracSec.from!"hnsecs"(700))); |
|---|
| 11424 | | testST(SysTime(DateTime(1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(1, 2, 27, 5, 22, 17), FracSec.from!"hnsecs"(7000))); |
|---|
| 11425 | | testST(SysTime(DateTime(1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(1, 12, 1, 1, 22, 17), FracSec.from!"hnsecs"(70_000))); |
|---|
| 11426 | | testST(SysTime(DateTime(1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(1, 12, 31, 23, 22, 17), FracSec.from!"hnsecs"(700_000))); |
|---|
| 11427 | | |
|---|
| 11428 | | testST(SysTime(DateTime(999, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(999, 1, 7, 6, 22, 17), FracSec.from!"hnsecs"(9))); |
|---|
| 11429 | | testST(SysTime(DateTime(999, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(999, 1, 1, 1, 22, 17), FracSec.from!"hnsecs"(90))); |
|---|
| 11430 | | testST(SysTime(DateTime(999, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(999, 2, 1, 1, 22, 17), FracSec.from!"hnsecs"(900))); |
|---|
| 11431 | | testST(SysTime(DateTime(999, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(999, 2, 27, 5, 22, 17), FracSec.from!"hnsecs"(9000))); |
|---|
| 11432 | | testST(SysTime(DateTime(999, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(999, 12, 1, 1, 22, 17), FracSec.from!"hnsecs"(90_000))); |
|---|
| 11433 | | testST(SysTime(DateTime(999, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(999, 12, 31, 23, 22, 17), FracSec.from!"hnsecs"(900_000))); |
|---|
| 11434 | | |
|---|
| 11435 | | //Test B.C. |
|---|
| 11436 | | testST(SysTime(Date(0, 1, 1)), 1, SysTime(DateTime(0, 1, 1, 1, 0, 0))); |
|---|
| 11437 | | testST(SysTime(Date(0, 1, 1)), 7, SysTime(DateTime(0, 1, 1, 7, 0, 0))); |
|---|
| 11438 | | testST(SysTime(Date(0, 1, 1)), 12, SysTime(DateTime(0, 1, 1, 12, 0, 0))); |
|---|
| 11439 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 1, 1, 1, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11440 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 1, 1, 7, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11441 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 1, 1, 12, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11442 | | |
|---|
| 11443 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(0, 12, 31, 1, 59, 59))); |
|---|
| 11444 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(0, 12, 31, 7, 59, 59))); |
|---|
| 11445 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(0, 12, 31, 12, 59, 59))); |
|---|
| 11446 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 12, 31, 1, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11447 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 12, 31, 7, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11448 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 12, 31, 12, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11449 | | |
|---|
| 11450 | | testST(SysTime(Date(0, 7, 2)), 7, SysTime(DateTime(0, 7, 2, 7, 0, 0))); |
|---|
| 11451 | | testST(SysTime(Date(-1202, 7, 2)), 1, SysTime(DateTime(-1202, 7, 2, 1, 0, 0))); |
|---|
| 11452 | | |
|---|
| 11453 | | testST(SysTime(DateTime(0, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(0, 1, 7, 6, 22, 17), FracSec.from!"hnsecs"(7))); |
|---|
| 11454 | | testST(SysTime(DateTime(0, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(0, 1, 1, 1, 22, 17), FracSec.from!"hnsecs"(70))); |
|---|
| 11455 | | testST(SysTime(DateTime(0, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(0, 2, 1, 1, 22, 17), FracSec.from!"hnsecs"(700))); |
|---|
| 11456 | | testST(SysTime(DateTime(0, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(0, 2, 27, 5, 22, 17), FracSec.from!"hnsecs"(7000))); |
|---|
| 11457 | | testST(SysTime(DateTime(0, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(0, 12, 1, 1, 22, 17), FracSec.from!"hnsecs"(70_000))); |
|---|
| 11458 | | testST(SysTime(DateTime(0, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(0, 12, 31, 23, 22, 17), FracSec.from!"hnsecs"(700_000))); |
|---|
| 11459 | | |
|---|
| 11460 | | testST(SysTime(DateTime(-1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(-1, 1, 7, 6, 22, 17), FracSec.from!"hnsecs"(9))); |
|---|
| 11461 | | testST(SysTime(DateTime(-1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(-1, 1, 1, 1, 22, 17), FracSec.from!"hnsecs"(90))); |
|---|
| 11462 | | testST(SysTime(DateTime(-1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(-1, 2, 1, 1, 22, 17), FracSec.from!"hnsecs"(900))); |
|---|
| 11463 | | testST(SysTime(DateTime(-1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(-1, 2, 27, 5, 22, 17), FracSec.from!"hnsecs"(9000))); |
|---|
| 11464 | | testST(SysTime(DateTime(-1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(-1, 12, 1, 1, 22, 17), FracSec.from!"hnsecs"(90_000))); |
|---|
| 11465 | | testST(SysTime(DateTime(-1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(-1, 12, 31, 23, 22, 17), FracSec.from!"hnsecs"(900_000))); |
|---|
| 11466 | | |
|---|
| 11467 | | testST(SysTime(0, UTC()), 12, SysTime(DateTime(1, 1, 1, 12, 0, 0), UTC())); |
|---|
| 11468 | | |
|---|
| 11469 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11470 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11471 | | static assert(!__traits(compiles, cst.hour = 27)); |
|---|
| 11472 | | //static assert(!__traits(compiles, ist.hour = 27)); |
|---|
| 11473 | | } |
|---|
| 11474 | | } |
|---|
| 11475 | | |
|---|
| 11476 | | |
|---|
| 11477 | | /++ |
|---|
| 11478 | | Minutes past the current hour. |
|---|
| 11479 | | +/ |
|---|
| 11480 | | @property ubyte minute() const nothrow |
|---|
| 11481 | | { |
|---|
| 11482 | | auto hnsecs = adjTime; |
|---|
| 11483 | | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| 11484 | | |
|---|
| 11485 | | if(hnsecs < 0) |
|---|
| 11486 | | { |
|---|
| 11487 | | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| 11488 | | --days; |
|---|
| 11489 | | } |
|---|
| 11490 | | |
|---|
| 11491 | | hnsecs = removeUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| 11492 | | |
|---|
| 11493 | | return cast(ubyte)getUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| 11494 | | } |
|---|
| 11495 | | |
|---|
| 11496 | | unittest |
|---|
| 11497 | | { |
|---|
| 11498 | | version(testStdDateTime) |
|---|
| 11499 | | { |
|---|
| 11500 | | assertPred!"=="(SysTime(0, UTC()).minute, 0); |
|---|
| 11501 | | assertPred!"=="(SysTime(1, UTC()).minute, 0); |
|---|
| 11502 | | assertPred!"=="(SysTime(-1, UTC()).minute, 59); |
|---|
| 11503 | | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 30, 0)).minute, 30); |
|---|
| 11504 | | assertPred!"=="(SysTime(DateTime(0, 1, 1, 0, 30, 0)).minute, 30); |
|---|
| 11505 | | |
|---|
| 11506 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11507 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11508 | | static assert(__traits(compiles, cst.minute)); |
|---|
| 11509 | | //static assert(__traits(compiles, ist.minute)); |
|---|
| 11510 | | } |
|---|
| 11511 | | } |
|---|
| 11512 | | |
|---|
| 11513 | | |
|---|
| 11514 | | /++ |
|---|
| 11515 | | Minutes past the current hour. |
|---|
| 11516 | | |
|---|
| 11517 | | Params: |
|---|
| 11518 | | minutes = The minute to set this SysTime's minute to. |
|---|
| 11519 | | |
|---|
| 11520 | | Throws: |
|---|
| 11521 | | DateTimeException if the given minute are not a valid minute of an |
|---|
| 11522 | | hour. |
|---|
| 11523 | | +/ |
|---|
| 11524 | | @property void minute(int minute) |
|---|
| 11525 | | { |
|---|
| 11526 | | enforceValid!"minutes"(minute); |
|---|
| 11527 | | |
|---|
| 11528 | | auto hnsecs = adjTime; |
|---|
| 11529 | | auto days = splitUnitsFromHNSecs!"days"(hnsecs); |
|---|
| 11530 | | immutable daysHNSecs = convert!("days", "hnsecs")(days); |
|---|
| 11531 | | immutable negative = hnsecs < 0; |
|---|
| 11532 | | |
|---|
| 11533 | | if(negative) |
|---|
| 11534 | | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| 11535 | | |
|---|
| 11536 | | immutable hour = splitUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| 11537 | | hnsecs = removeUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| 11538 | | |
|---|
| 11539 | | hnsecs += convert!("hours", "hnsecs")(hour); |
|---|
| 11540 | | hnsecs += convert!("minutes", "hnsecs")(minute); |
|---|
| 11541 | | |
|---|
| 11542 | | if(negative) |
|---|
| 11543 | | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| 11544 | | |
|---|
| 11545 | | adjTime = daysHNSecs + hnsecs; |
|---|
| 11546 | | } |
|---|
| 11547 | | |
|---|
| 11548 | | unittest |
|---|
| 11549 | | { |
|---|
| 11550 | | version(testStdDateTime) |
|---|
| 11551 | | { |
|---|
| 11552 | | static void testSTInvalid(SysTime st, int minute) |
|---|
| 11553 | | { |
|---|
| 11554 | | st.minute = minute; |
|---|
| 11555 | | } |
|---|
| 11556 | | |
|---|
| 11557 | | static void testST(SysTime st, int minute, in SysTime expected, size_t line = __LINE__) |
|---|
| 11558 | | { |
|---|
| 11559 | | st.minute = minute; |
|---|
| 11560 | | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| 11561 | | } |
|---|
| 11562 | | |
|---|
| 11563 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1999, 7, 6)), 60)); |
|---|
| 11564 | | |
|---|
| 11565 | | //Test A.D. |
|---|
| 11566 | | testST(SysTime(Date(1, 1, 1)), 1, SysTime(DateTime(1, 1, 1, 0, 1, 0))); |
|---|
| 11567 | | testST(SysTime(Date(1, 1, 1)), 7, SysTime(DateTime(1, 1, 1, 0, 7, 0))); |
|---|
| 11568 | | testST(SysTime(Date(1, 1, 1)), 12, SysTime(DateTime(1, 1, 1, 0, 12, 0))); |
|---|
| 11569 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 1, 1, 0, 1, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11570 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 1, 1, 0, 7, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11571 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 1, 1, 0, 12, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11572 | | |
|---|
| 11573 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(1, 12, 31, 23, 1, 59))); |
|---|
| 11574 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(1, 12, 31, 23, 7, 59))); |
|---|
| 11575 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(1, 12, 31, 23, 12, 59))); |
|---|
| 11576 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 12, 31, 23, 1, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11577 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 12, 31, 23, 7, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11578 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 12, 31, 23, 12, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11579 | | |
|---|
| 11580 | | testST(SysTime(Date(1, 7, 2)), 12, SysTime(DateTime(1, 7, 2, 0, 12, 0))); |
|---|
| 11581 | | testST(SysTime(Date(5007, 7, 2)), 5, SysTime(DateTime(5007, 7, 2, 0, 5, 0))); |
|---|
| 11582 | | |
|---|
| 11583 | | testST(SysTime(DateTime(1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(1, 1, 7, 12, 6, 17), FracSec.from!"hnsecs"(7))); |
|---|
| 11584 | | testST(SysTime(DateTime(1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(1, 1, 1, 12, 1, 17), FracSec.from!"hnsecs"(70))); |
|---|
| 11585 | | testST(SysTime(DateTime(1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(1, 2, 1, 12, 1, 17), FracSec.from!"hnsecs"(700))); |
|---|
| 11586 | | testST(SysTime(DateTime(1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(1, 2, 27, 12, 5, 17), FracSec.from!"hnsecs"(7000))); |
|---|
| 11587 | | testST(SysTime(DateTime(1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(1, 12, 1, 12, 1, 17), FracSec.from!"hnsecs"(70_000))); |
|---|
| 11588 | | testST(SysTime(DateTime(1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(1, 12, 31, 12, 23, 17), FracSec.from!"hnsecs"(700_000))); |
|---|
| 11589 | | |
|---|
| 11590 | | testST(SysTime(DateTime(999, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(999, 1, 7, 12, 6, 17), FracSec.from!"hnsecs"(9))); |
|---|
| 11591 | | testST(SysTime(DateTime(999, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(999, 1, 1, 12, 1, 17), FracSec.from!"hnsecs"(90))); |
|---|
| 11592 | | testST(SysTime(DateTime(999, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(999, 2, 1, 12, 1, 17), FracSec.from!"hnsecs"(900))); |
|---|
| 11593 | | testST(SysTime(DateTime(999, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(999, 2, 27, 12, 5, 17), FracSec.from!"hnsecs"(9000))); |
|---|
| 11594 | | testST(SysTime(DateTime(999, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(999, 12, 1, 12, 1, 17), FracSec.from!"hnsecs"(90_000))); |
|---|
| 11595 | | testST(SysTime(DateTime(999, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(999, 12, 31, 12, 23, 17), FracSec.from!"hnsecs"(900_000))); |
|---|
| 11596 | | |
|---|
| 11597 | | //Test B.C. |
|---|
| 11598 | | testST(SysTime(Date(0, 1, 1)), 1, SysTime(DateTime(0, 1, 1, 0, 1, 0))); |
|---|
| 11599 | | testST(SysTime(Date(0, 1, 1)), 7, SysTime(DateTime(0, 1, 1, 0, 7, 0))); |
|---|
| 11600 | | testST(SysTime(Date(0, 1, 1)), 12, SysTime(DateTime(0, 1, 1, 0, 12, 0))); |
|---|
| 11601 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 1, 1, 0, 1, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11602 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 1, 1, 0, 7, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11603 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 1, 1, 0, 12, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11604 | | |
|---|
| 11605 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(0, 12, 31, 23, 1, 59))); |
|---|
| 11606 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(0, 12, 31, 23, 7, 59))); |
|---|
| 11607 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(0, 12, 31, 23, 12, 59))); |
|---|
| 11608 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 12, 31, 23, 1, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11609 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 12, 31, 23, 7, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11610 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 12, 31, 23, 12, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11611 | | |
|---|
| 11612 | | testST(SysTime(Date(0, 7, 2)), 7, SysTime(DateTime(0, 7, 2, 0, 7, 0))); |
|---|
| 11613 | | testST(SysTime(Date(-1202, 7, 2)), 1, SysTime(DateTime(-1202, 7, 2, 0, 1, 0))); |
|---|
| 11614 | | |
|---|
| 11615 | | testST(SysTime(DateTime(0, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(0, 1, 7, 12, 6, 17), FracSec.from!"hnsecs"(7))); |
|---|
| 11616 | | testST(SysTime(DateTime(0, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(0, 1, 1, 12, 1, 17), FracSec.from!"hnsecs"(70))); |
|---|
| 11617 | | testST(SysTime(DateTime(0, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(0, 2, 1, 12, 1, 17), FracSec.from!"hnsecs"(700))); |
|---|
| 11618 | | testST(SysTime(DateTime(0, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(0, 2, 27, 12, 5, 17), FracSec.from!"hnsecs"(7000))); |
|---|
| 11619 | | testST(SysTime(DateTime(0, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(0, 12, 1, 12, 1, 17), FracSec.from!"hnsecs"(70_000))); |
|---|
| 11620 | | testST(SysTime(DateTime(0, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(0, 12, 31, 12, 23, 17), FracSec.from!"hnsecs"(700_000))); |
|---|
| 11621 | | |
|---|
| 11622 | | testST(SysTime(DateTime(-1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(-1, 1, 7, 12, 6, 17), FracSec.from!"hnsecs"(9))); |
|---|
| 11623 | | testST(SysTime(DateTime(-1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(-1, 1, 1, 12, 1, 17), FracSec.from!"hnsecs"(90))); |
|---|
| 11624 | | testST(SysTime(DateTime(-1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(-1, 2, 1, 12, 1, 17), FracSec.from!"hnsecs"(900))); |
|---|
| 11625 | | testST(SysTime(DateTime(-1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(-1, 2, 27, 12, 5, 17), FracSec.from!"hnsecs"(9000))); |
|---|
| 11626 | | testST(SysTime(DateTime(-1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(-1, 12, 1, 12, 1, 17), FracSec.from!"hnsecs"(90_000))); |
|---|
| 11627 | | testST(SysTime(DateTime(-1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(-1, 12, 31, 12, 23, 17), FracSec.from!"hnsecs"(900_000))); |
|---|
| 11628 | | |
|---|
| 11629 | | testST(SysTime(0, UTC()), 12, SysTime(DateTime(1, 1, 1, 0, 12, 0), UTC())); |
|---|
| 11630 | | |
|---|
| 11631 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11632 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11633 | | static assert(!__traits(compiles, cst.minute = 27)); |
|---|
| 11634 | | //static assert(!__traits(compiles, ist.minute = 27)); |
|---|
| 11635 | | } |
|---|
| 11636 | | } |
|---|
| 11637 | | |
|---|
| 11638 | | |
|---|
| 11639 | | /++ |
|---|
| 11640 | | Seconds past the current minute. |
|---|
| 11641 | | +/ |
|---|
| 11642 | | @property ubyte second() const nothrow |
|---|
| 11643 | | { |
|---|
| 11644 | | auto hnsecs = adjTime; |
|---|
| 11645 | | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| 11646 | | |
|---|
| 11647 | | if(hnsecs < 0) |
|---|
| 11648 | | { |
|---|
| 11649 | | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| 11650 | | --days; |
|---|
| 11651 | | } |
|---|
| 11652 | | |
|---|
| 11653 | | hnsecs = removeUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| 11654 | | hnsecs = removeUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| 11655 | | |
|---|
| 11656 | | return cast(ubyte)getUnitsFromHNSecs!"seconds"(hnsecs); |
|---|
| 11657 | | } |
|---|
| 11658 | | |
|---|
| 11659 | | unittest |
|---|
| 11660 | | { |
|---|
| 11661 | | version(testStdDateTime) |
|---|
| 11662 | | { |
|---|
| 11663 | | assertPred!"=="(SysTime(0, UTC()).second, 0); |
|---|
| 11664 | | assertPred!"=="(SysTime(1, UTC()).second, 0); |
|---|
| 11665 | | assertPred!"=="(SysTime(-1, UTC()).second, 59); |
|---|
| 11666 | | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 33)).second, 33); |
|---|
| 11667 | | assertPred!"=="(SysTime(DateTime(0, 1, 1, 0, 0, 33)).second, 33); |
|---|
| 11668 | | |
|---|
| 11669 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11670 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11671 | | static assert(__traits(compiles, cst.second)); |
|---|
| 11672 | | //static assert(__traits(compiles, ist.second)); |
|---|
| 11673 | | } |
|---|
| 11674 | | } |
|---|
| 11675 | | |
|---|
| 11676 | | |
|---|
| 11677 | | /++ |
|---|
| 11678 | | Seconds past the current minute. |
|---|
| 11679 | | |
|---|
| 11680 | | Params |
|---|
| 11681 | | second = The second to set this SysTime's second to. |
|---|
| 11682 | | |
|---|
| 11683 | | Throws: |
|---|
| 11684 | | DateTimeException if the given second are not a valid second of a minute. |
|---|
| 11685 | | +/ |
|---|
| 11686 | | @property void second(int second) |
|---|
| 11687 | | { |
|---|
| 11688 | | enforceValid!"seconds"(second); |
|---|
| 11689 | | |
|---|
| 11690 | | auto hnsecs = adjTime; |
|---|
| 11691 | | auto days = splitUnitsFromHNSecs!"days"(hnsecs); |
|---|
| 11692 | | immutable daysHNSecs = convert!("days", "hnsecs")(days); |
|---|
| 11693 | | immutable negative = hnsecs < 0; |
|---|
| 11694 | | |
|---|
| 11695 | | if(negative) |
|---|
| 11696 | | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| 11697 | | |
|---|
| 11698 | | immutable hour = splitUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| 11699 | | immutable minute = splitUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| 11700 | | hnsecs = removeUnitsFromHNSecs!"seconds"(hnsecs); |
|---|
| 11701 | | |
|---|
| 11702 | | hnsecs += convert!("hours", "hnsecs")(hour); |
|---|
| 11703 | | hnsecs += convert!("minutes", "hnsecs")(minute); |
|---|
| 11704 | | hnsecs += convert!("seconds", "hnsecs")(second); |
|---|
| 11705 | | |
|---|
| 11706 | | if(negative) |
|---|
| 11707 | | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| 11708 | | |
|---|
| 11709 | | adjTime = daysHNSecs + hnsecs; |
|---|
| 11710 | | } |
|---|
| 11711 | | |
|---|
| 11712 | | unittest |
|---|
| 11713 | | { |
|---|
| 11714 | | version(testStdDateTime) |
|---|
| 11715 | | { |
|---|
| 11716 | | static void testSTInvalid(SysTime st, int second) |
|---|
| 11717 | | { |
|---|
| 11718 | | st.second = second; |
|---|
| 11719 | | } |
|---|
| 11720 | | |
|---|
| 11721 | | static void testST(SysTime st, int second, in SysTime expected, size_t line = __LINE__) |
|---|
| 11722 | | { |
|---|
| 11723 | | st.second = second; |
|---|
| 11724 | | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| 11725 | | } |
|---|
| 11726 | | |
|---|
| 11727 | | assertThrown!DateTimeException(testSTInvalid(SysTime(Date(1999, 7, 6)), 60)); |
|---|
| 11728 | | |
|---|
| 11729 | | //Test A.D. |
|---|
| 11730 | | testST(SysTime(Date(1, 1, 1)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 1))); |
|---|
| 11731 | | testST(SysTime(Date(1, 1, 1)), 7, SysTime(DateTime(1, 1, 1, 0, 0, 7))); |
|---|
| 11732 | | testST(SysTime(Date(1, 1, 1)), 12, SysTime(DateTime(1, 1, 1, 0, 0, 12))); |
|---|
| 11733 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 1), FracSec.from!"hnsecs"(1))); |
|---|
| 11734 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 1, 1, 0, 0, 7), FracSec.from!"hnsecs"(1))); |
|---|
| 11735 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 1, 1, 0, 0, 12), FracSec.from!"hnsecs"(1))); |
|---|
| 11736 | | |
|---|
| 11737 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(1, 12, 31, 23, 59, 1))); |
|---|
| 11738 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(1, 12, 31, 23, 59, 7))); |
|---|
| 11739 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(1, 12, 31, 23, 59, 12))); |
|---|
| 11740 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 12, 31, 23, 59, 1), FracSec.from!"hnsecs"(1))); |
|---|
| 11741 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 12, 31, 23, 59, 7), FracSec.from!"hnsecs"(1))); |
|---|
| 11742 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 12, 31, 23, 59, 12), FracSec.from!"hnsecs"(1))); |
|---|
| 11743 | | |
|---|
| 11744 | | testST(SysTime(Date(1, 7, 2)), 12, SysTime(DateTime(1, 7, 2, 0, 0, 12))); |
|---|
| 11745 | | testST(SysTime(Date(5007, 7, 2)), 5, SysTime(DateTime(5007, 7, 2, 0, 0, 5))); |
|---|
| 11746 | | |
|---|
| 11747 | | testST(SysTime(DateTime(1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(1, 1, 7, 12, 22, 6), FracSec.from!"hnsecs"(7))); |
|---|
| 11748 | | testST(SysTime(DateTime(1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(1, 1, 1, 12, 22, 1), FracSec.from!"hnsecs"(70))); |
|---|
| 11749 | | testST(SysTime(DateTime(1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(1, 2, 1, 12, 22, 1), FracSec.from!"hnsecs"(700))); |
|---|
| 11750 | | testST(SysTime(DateTime(1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(1, 2, 27, 12, 22, 5), FracSec.from!"hnsecs"(7000))); |
|---|
| 11751 | | testST(SysTime(DateTime(1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(1, 12, 1, 12, 22, 1), FracSec.from!"hnsecs"(70_000))); |
|---|
| 11752 | | testST(SysTime(DateTime(1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(1, 12, 31, 12, 22, 23), FracSec.from!"hnsecs"(700_000))); |
|---|
| 11753 | | |
|---|
| 11754 | | testST(SysTime(DateTime(999, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(999, 1, 7, 12, 22, 6), FracSec.from!"hnsecs"(9))); |
|---|
| 11755 | | testST(SysTime(DateTime(999, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(999, 1, 1, 12, 22, 1), FracSec.from!"hnsecs"(90))); |
|---|
| 11756 | | testST(SysTime(DateTime(999, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(999, 2, 1, 12, 22, 1), FracSec.from!"hnsecs"(900))); |
|---|
| 11757 | | testST(SysTime(DateTime(999, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(999, 2, 27, 12, 22, 5), FracSec.from!"hnsecs"(9000))); |
|---|
| 11758 | | testST(SysTime(DateTime(999, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(999, 12, 1, 12, 22, 1), FracSec.from!"hnsecs"(90_000))); |
|---|
| 11759 | | testST(SysTime(DateTime(999, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(999, 12, 31, 12, 22, 23), FracSec.from!"hnsecs"(900_000))); |
|---|
| 11760 | | |
|---|
| 11761 | | //Test B.C. |
|---|
| 11762 | | testST(SysTime(Date(0, 1, 1)), 1, SysTime(DateTime(0, 1, 1, 0, 0, 1))); |
|---|
| 11763 | | testST(SysTime(Date(0, 1, 1)), 7, SysTime(DateTime(0, 1, 1, 0, 0, 7))); |
|---|
| 11764 | | testST(SysTime(Date(0, 1, 1)), 12, SysTime(DateTime(0, 1, 1, 0, 0, 12))); |
|---|
| 11765 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 1, 1, 0, 0, 1), FracSec.from!"hnsecs"(1))); |
|---|
| 11766 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 1, 1, 0, 0, 7), FracSec.from!"hnsecs"(1))); |
|---|
| 11767 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 1, 1, 0, 0, 12), FracSec.from!"hnsecs"(1))); |
|---|
| 11768 | | |
|---|
| 11769 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(0, 12, 31, 23, 59, 1))); |
|---|
| 11770 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(0, 12, 31, 23, 59, 7))); |
|---|
| 11771 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(0, 12, 31, 23, 59, 12))); |
|---|
| 11772 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 12, 31, 23, 59, 1), FracSec.from!"hnsecs"(1))); |
|---|
| 11773 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 12, 31, 23, 59, 7), FracSec.from!"hnsecs"(1))); |
|---|
| 11774 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 12, 31, 23, 59, 12), FracSec.from!"hnsecs"(1))); |
|---|
| 11775 | | |
|---|
| 11776 | | testST(SysTime(Date(0, 7, 2)), 7, SysTime(DateTime(0, 7, 2, 0, 0, 7))); |
|---|
| 11777 | | testST(SysTime(Date(-1202, 7, 2)), 1, SysTime(DateTime(-1202, 7, 2, 0, 0, 1))); |
|---|
| 11778 | | |
|---|
| 11779 | | testST(SysTime(DateTime(0, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(0, 1, 7, 12, 22, 6), FracSec.from!"hnsecs"(7))); |
|---|
| 11780 | | testST(SysTime(DateTime(0, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(0, 1, 1, 12, 22, 1), FracSec.from!"hnsecs"(70))); |
|---|
| 11781 | | testST(SysTime(DateTime(0, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(0, 2, 1, 12, 22, 1), FracSec.from!"hnsecs"(700))); |
|---|
| 11782 | | testST(SysTime(DateTime(0, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(0, 2, 27, 12, 22, 5), FracSec.from!"hnsecs"(7000))); |
|---|
| 11783 | | testST(SysTime(DateTime(0, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(0, 12, 1, 12, 22, 1), FracSec.from!"hnsecs"(70_000))); |
|---|
| 11784 | | testST(SysTime(DateTime(0, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(0, 12, 31, 12, 22, 23), FracSec.from!"hnsecs"(700_000))); |
|---|
| 11785 | | |
|---|
| 11786 | | testST(SysTime(DateTime(-1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(-1, 1, 7, 12, 22, 6), FracSec.from!"hnsecs"(9))); |
|---|
| 11787 | | testST(SysTime(DateTime(-1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(-1, 1, 1, 12, 22, 1), FracSec.from!"hnsecs"(90))); |
|---|
| 11788 | | testST(SysTime(DateTime(-1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(-1, 2, 1, 12, 22, 1), FracSec.from!"hnsecs"(900))); |
|---|
| 11789 | | testST(SysTime(DateTime(-1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(-1, 2, 27, 12, 22, 5), FracSec.from!"hnsecs"(9000))); |
|---|
| 11790 | | testST(SysTime(DateTime(-1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(-1, 12, 1, 12, 22, 1), FracSec.from!"hnsecs"(90_000))); |
|---|
| 11791 | | testST(SysTime(DateTime(-1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(-1, 12, 31, 12, 22, 23), FracSec.from!"hnsecs"(900_000))); |
|---|
| 11792 | | |
|---|
| 11793 | | testST(SysTime(0, UTC()), 12, SysTime(DateTime(1, 1, 1, 0, 0, 12), UTC())); |
|---|
| 11794 | | |
|---|
| 11795 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11796 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11797 | | static assert(!__traits(compiles, cst.seconds = 27)); |
|---|
| 11798 | | //static assert(!__traits(compiles, ist.seconds = 27)); |
|---|
| 11799 | | } |
|---|
| 11800 | | } |
|---|
| 11801 | | |
|---|
| 11802 | | |
|---|
| 11803 | | /++ |
|---|
| 11804 | | Fractional seconds passed the second. |
|---|
| 11805 | | +/ |
|---|
| 11806 | | @property FracSec fracSec() const nothrow |
|---|
| 11807 | | { |
|---|
| 11808 | | try |
|---|
| 11809 | | { |
|---|
| 11810 | | auto hnsecs = removeUnitsFromHNSecs!"days"(adjTime); |
|---|
| 11811 | | |
|---|
| 11812 | | if(hnsecs < 0) |
|---|
| 11813 | | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| 11814 | | |
|---|
| 11815 | | hnsecs = removeUnitsFromHNSecs!"seconds"(hnsecs); |
|---|
| 11816 | | |
|---|
| 11817 | | return FracSec.from!"hnsecs"(cast(int)hnsecs); |
|---|
| 11818 | | } |
|---|
| 11819 | | catch(Exception e) |
|---|
| 11820 | | assert(0, "FracSec.from!\"hnsecs\"() threw."); |
|---|
| 11821 | | } |
|---|
| 11822 | | |
|---|
| 11823 | | unittest |
|---|
| 11824 | | { |
|---|
| 11825 | | version(testStdDateTime) |
|---|
| 11826 | | { |
|---|
| 11827 | | assertPred!"=="(SysTime(0, UTC()).fracSec.hnsecs, 0); |
|---|
| 11828 | | assertPred!"=="(SysTime(1, UTC()).fracSec.hnsecs, 1); |
|---|
| 11829 | | assertPred!"=="(SysTime(-1, UTC()).fracSec.hnsecs, 9_999_999); |
|---|
| 11830 | | |
|---|
| 11831 | | assertPred!"=="(SysTime(DateTime(200, 3, 30, 1, 27, 19), FracSec.from!"hnsecs"(348), UTC()).fracSec.hnsecs, 348); |
|---|
| 11832 | | assertPred!"=="(SysTime(DateTime(-1, 2, 17, 4, 5, 22), FracSec.from!"hnsecs"(347), UTC()).fracSec.hnsecs, 347); |
|---|
| 11833 | | |
|---|
| 11834 | | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 33), FracSec.from!"hnsecs"(502)).fracSec, FracSec.from!"hnsecs"(502)); |
|---|
| 11835 | | assertPred!"=="(SysTime(DateTime(0, 1, 1, 0, 0, 33), FracSec.from!"hnsecs"(502)).fracSec, FracSec.from!"hnsecs"(502)); |
|---|
| 11836 | | |
|---|
| 11837 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11838 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11839 | | static assert(__traits(compiles, cst.fracSec)); |
|---|
| 11840 | | //static assert(__traits(compiles, ist.fracSec)); |
|---|
| 11841 | | } |
|---|
| 11842 | | } |
|---|
| 11843 | | |
|---|
| 11844 | | |
|---|
| 11845 | | /++ |
|---|
| 11846 | | Fractional seconds passed the second. |
|---|
| 11847 | | |
|---|
| 11848 | | Params |
|---|
| 11849 | | fracSec = The fractional seconds to set this SysTimes's fractional |
|---|
| 11850 | | seconds to. |
|---|
| 11851 | | +/ |
|---|
| 11852 | | @property void fracSec(FracSec fracSec) nothrow |
|---|
| 11853 | | { |
|---|
| 11854 | | auto hnsecs = adjTime; |
|---|
| 11855 | | auto days = splitUnitsFromHNSecs!"days"(hnsecs); |
|---|
| 11856 | | immutable daysHNSecs = convert!("days", "hnsecs")(days); |
|---|
| 11857 | | immutable negative = hnsecs < 0; |
|---|
| 11858 | | |
|---|
| 11859 | | if(negative) |
|---|
| 11860 | | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| 11861 | | |
|---|
| 11862 | | immutable hour = splitUnitsFromHNSecs!"hours"(hnsecs); |
|---|
| 11863 | | immutable minute = splitUnitsFromHNSecs!"minutes"(hnsecs); |
|---|
| 11864 | | immutable second = getUnitsFromHNSecs!"seconds"(hnsecs); |
|---|
| 11865 | | |
|---|
| 11866 | | hnsecs = fracSec.hnsecs; |
|---|
| 11867 | | hnsecs += convert!("hours", "hnsecs")(hour); |
|---|
| 11868 | | hnsecs += convert!("minutes", "hnsecs")(minute); |
|---|
| 11869 | | hnsecs += convert!("seconds", "hnsecs")(second); |
|---|
| 11870 | | |
|---|
| 11871 | | if(negative) |
|---|
| 11872 | | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| 11873 | | |
|---|
| 11874 | | adjTime = daysHNSecs + hnsecs; |
|---|
| 11875 | | } |
|---|
| 11876 | | |
|---|
| 11877 | | unittest |
|---|
| 11878 | | { |
|---|
| 11879 | | version(testStdDateTime) |
|---|
| 11880 | | { |
|---|
| 11881 | | static void testST(SysTime st, int hnsecs, in SysTime expected, size_t line = __LINE__) |
|---|
| 11882 | | { |
|---|
| 11883 | | st.fracSec = FracSec.from!"hnsecs"(hnsecs); |
|---|
| 11884 | | assertPred!"=="(st, expected, "", __FILE__, line); |
|---|
| 11885 | | } |
|---|
| 11886 | | |
|---|
| 11887 | | //Test A.D. |
|---|
| 11888 | | testST(SysTime(Date(1, 1, 1)), 0, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 11889 | | testST(SysTime(Date(1, 1, 1)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11890 | | testST(SysTime(Date(1, 1, 1)), 7, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(7))); |
|---|
| 11891 | | testST(SysTime(Date(1, 1, 1)), 12, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(12))); |
|---|
| 11892 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11893 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(7))); |
|---|
| 11894 | | testST(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(12))); |
|---|
| 11895 | | |
|---|
| 11896 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 0, SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0))); |
|---|
| 11897 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11898 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(7))); |
|---|
| 11899 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(12))); |
|---|
| 11900 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11901 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(7))); |
|---|
| 11902 | | testST(SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(12))); |
|---|
| 11903 | | |
|---|
| 11904 | | testST(SysTime(Date(1, 7, 2)), 12, SysTime(DateTime(1, 7, 2, 0, 0, 0), FracSec.from!"hnsecs"(12))); |
|---|
| 11905 | | testST(SysTime(Date(5007, 7, 2)), 5, SysTime(DateTime(5007, 7, 2, 0, 0, 0), FracSec.from!"hnsecs"(5))); |
|---|
| 11906 | | |
|---|
| 11907 | | testST(SysTime(DateTime(1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(6))); |
|---|
| 11908 | | testST(SysTime(DateTime(1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| 11909 | | testST(SysTime(DateTime(1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| 11910 | | testST(SysTime(DateTime(1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(5))); |
|---|
| 11911 | | testST(SysTime(DateTime(1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| 11912 | | testST(SysTime(DateTime(1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(23))); |
|---|
| 11913 | | |
|---|
| 11914 | | testST(SysTime(DateTime(999, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(999, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(6))); |
|---|
| 11915 | | testST(SysTime(DateTime(999, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(999, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| 11916 | | testST(SysTime(DateTime(999, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(999, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| 11917 | | testST(SysTime(DateTime(999, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(999, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(5))); |
|---|
| 11918 | | testST(SysTime(DateTime(999, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(999, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| 11919 | | testST(SysTime(DateTime(999, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(999, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(23))); |
|---|
| 11920 | | |
|---|
| 11921 | | //Test B.C. |
|---|
| 11922 | | testST(SysTime(Date(0, 1, 1)), 0, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 11923 | | testST(SysTime(Date(0, 1, 1)), 1, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11924 | | testST(SysTime(Date(0, 1, 1)), 7, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(7))); |
|---|
| 11925 | | testST(SysTime(Date(0, 1, 1)), 12, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(12))); |
|---|
| 11926 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 0, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 11927 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11928 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(7))); |
|---|
| 11929 | | testST(SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(12))); |
|---|
| 11930 | | |
|---|
| 11931 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 0, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0))); |
|---|
| 11932 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 1, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11933 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 7, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(7))); |
|---|
| 11934 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59)), 12, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(12))); |
|---|
| 11935 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 1, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1))); |
|---|
| 11936 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 7, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(7))); |
|---|
| 11937 | | testST(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1)), 12, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(12))); |
|---|
| 11938 | | |
|---|
| 11939 | | testST(SysTime(Date(0, 7, 2)), 7, SysTime(DateTime(0, 7, 2, 0, 0, 0), FracSec.from!"hnsecs"(7))); |
|---|
| 11940 | | testST(SysTime(Date(-1202, 7, 2)), 1, SysTime(DateTime(-1202, 7, 2, 0, 0, 0), FracSec.from!"hnsecs"(1))); |
|---|
| 11941 | | |
|---|
| 11942 | | testST(SysTime(DateTime(0, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(7)), 6, SysTime(DateTime(0, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(6))); |
|---|
| 11943 | | testST(SysTime(DateTime(0, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(70)), 1, SysTime(DateTime(0, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| 11944 | | testST(SysTime(DateTime(0, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(700)), 1, SysTime(DateTime(0, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| 11945 | | testST(SysTime(DateTime(0, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(7000)), 5, SysTime(DateTime(0, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(5))); |
|---|
| 11946 | | testST(SysTime(DateTime(0, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(70_000)), 1, SysTime(DateTime(0, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| 11947 | | testST(SysTime(DateTime(0, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(700_000)), 23, SysTime(DateTime(0, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(23))); |
|---|
| 11948 | | |
|---|
| 11949 | | testST(SysTime(DateTime(-1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(9)), 6, SysTime(DateTime(-1, 1, 7, 12, 22, 17), FracSec.from!"hnsecs"(6))); |
|---|
| 11950 | | testST(SysTime(DateTime(-1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(90)), 1, SysTime(DateTime(-1, 1, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| 11951 | | testST(SysTime(DateTime(-1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(900)), 1, SysTime(DateTime(-1, 2, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| 11952 | | testST(SysTime(DateTime(-1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(9000)), 5, SysTime(DateTime(-1, 2, 27, 12, 22, 17), FracSec.from!"hnsecs"(5))); |
|---|
| 11953 | | testST(SysTime(DateTime(-1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(90_000)), 1, SysTime(DateTime(-1, 12, 1, 12, 22, 17), FracSec.from!"hnsecs"(1))); |
|---|
| 11954 | | testST(SysTime(DateTime(-1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(900_000)), 23, SysTime(DateTime(-1, 12, 31, 12, 22, 17), FracSec.from!"hnsecs"(23))); |
|---|
| 11955 | | |
|---|
| 11956 | | testST(SysTime(0, UTC()), 12, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(12), UTC())); |
|---|
| 11957 | | |
|---|
| 11958 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11959 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11960 | | static assert(!__traits(compiles, cst.fracSec = FracSec.from!"msecs"(7))); |
|---|
| 11961 | | //static assert(!__traits(compiles, ist.fracSec = FracSec.from!"msecs"(7))); |
|---|
| 11962 | | } |
|---|
| 11963 | | } |
|---|
| 11964 | | |
|---|
| 11965 | | |
|---|
| 11966 | | /++ |
|---|
| 11967 | | The total hnsecs from midnight, January 1st, 1 A.D. UTC. This is the internal |
|---|
| 11968 | | representation of SysTime. |
|---|
| 11969 | | +/ |
|---|
| 11970 | | @property long stdTime() const pure nothrow |
|---|
| 11971 | | { |
|---|
| 11972 | | return _stdTime; |
|---|
| 11973 | | } |
|---|
| 11974 | | |
|---|
| 11975 | | unittest |
|---|
| 11976 | | { |
|---|
| 11977 | | version(testStdDateTime) |
|---|
| 11978 | | { |
|---|
| 11979 | | assertPred!"=="(SysTime(0).stdTime, 0); |
|---|
| 11980 | | assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 33), FracSec.from!"hnsecs"(502), UTC()).stdTime, 330000502L); |
|---|
| 11981 | | assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), UTC()).stdTime, 621355968000000000L); |
|---|
| 11982 | | |
|---|
| 11983 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11984 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 11985 | | static assert(__traits(compiles, cst.stdTime)); |
|---|
| 11986 | | //static assert(__traits(compiles, ist.stdTime)); |
|---|
| 11987 | | } |
|---|
| 11988 | | } |
|---|
| 11989 | | |
|---|
| 11990 | | |
|---|
| 11991 | | /++ |
|---|
| 11992 | | The total hnsecs from midnight, January 1st, 1 A.D. UTC. This is the internal |
|---|
| 11993 | | representation of SysTime. |
|---|
| 11994 | | |
|---|
| 11995 | | Params |
|---|
| 11996 | | stdTime = The number of hnsecs since January 1st, 1 A.D. UTC. |
|---|
| 11997 | | +/ |
|---|
| 11998 | | @property void stdTime(long stdTime) pure nothrow |
|---|
| 11999 | | { |
|---|
| 12000 | | _stdTime = stdTime; |
|---|
| 12001 | | } |
|---|
| 12002 | | |
|---|
| 12003 | | unittest |
|---|
| 12004 | | { |
|---|
| 12005 | | version(testStdDateTime) |
|---|
| 12006 | | { |
|---|
| 12007 | | { |
|---|
| 12008 | | auto st = SysTime(0, UTC()); |
|---|
| 12009 | | st.stdTime = 330000502L; |
|---|
| 12010 | | assertPred!"=="(st, SysTime(DateTime(1, 1, 1, 0, 0, 33), FracSec.from!"hnsecs"(502), UTC())); |
|---|
| 12011 | | } |
|---|
| 12012 | | |
|---|
| 12013 | | { |
|---|
| 12014 | | auto st = SysTime(0, UTC()); |
|---|
| 12015 | | st.stdTime = 621355968000000000L; |
|---|
| 12016 | | assertPred!"=="(st, SysTime(DateTime(1970, 1, 1, 0, 0, 0), UTC())); |
|---|
| 12017 | | } |
|---|
| 12018 | | |
|---|
| 12019 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 12020 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 12021 | | static assert(!__traits(compiles, cst.stdTime = 27)); |
|---|
| 12022 | | //static assert(!__traits(compiles, ist.stdTime = 27)); |
|---|
| 12023 | | } |
|---|
| 12024 | | } |
|---|
| 12025 | | |
|---|
| 12026 | | |
|---|
| 12027 | | /++ |
|---|
| 12028 | | The current time zone of this SysTime. Its internal time is always kept |
|---|
| 12029 | | in UTC, so there are no conversion issues between time zones due to DST. |
|---|
| 12030 | | Functions which return all or part of the time - such as hours - adjust |
|---|
| 12031 | | the time to this SysTime's time zone before returning. |
|---|
| 12032 | | +/ |
|---|
| 12033 | | @property immutable(TimeZone) timezone() const pure nothrow |
|---|
| 12034 | | { |
|---|
| 12035 | | return _timezone.get; |
|---|
| 12036 | | } |
|---|
| 12037 | | |
|---|
| 12038 | | |
|---|
| 12039 | | /++ |
|---|
| 12040 | | The current time zone of this SysTime. It's internal time is always kept |
|---|
| 12041 | | in UTC, so there are no conversion issues between time zones due to DST. |
|---|
| 12042 | | Functions which return all or part of the time - such as hours - adjust |
|---|
| 12043 | | the time to this SysTime's time zone before returning. |
|---|
| 12044 | | +/ |
|---|
| 12045 | | @property void timezone(immutable TimeZone timezone) pure nothrow |
|---|
| 12046 | | { |
|---|
| 12047 | | _timezone = timezone; |
|---|
| 12048 | | } |
|---|
| 12049 | | |
|---|
| 12050 | | |
|---|
| 12051 | | /++ |
|---|
| 12052 | | Returns whether DST is in effect for this SysTime. |
|---|
| 12053 | | +/ |
|---|
| 12054 | | @property bool dstInEffect() const nothrow |
|---|
| 12055 | | { |
|---|
| 12056 | | return _timezone.dstInEffect(_stdTime); |
|---|
| 12057 | | //This function's unit testing is done in the time zone classes. |
|---|
| 12058 | | } |
|---|
| 12059 | | |
|---|
| 12060 | | |
|---|
| 12061 | | /++ |
|---|
| 12062 | | Returns a SysTime with the same std time as this one, but with LocalTime |
|---|
| 12063 | | as its time zone. |
|---|
| 12064 | | +/ |
|---|
| 12065 | | SysTime toLocalTime() const nothrow |
|---|
| 12066 | | { |
|---|
| 12067 | | return SysTime(_stdTime, LocalTime()); |
|---|
| 12068 | | } |
|---|
| 12069 | | |
|---|
| 12070 | | unittest |
|---|
| 12071 | | { |
|---|
| 12072 | | version(testStdDateTime) |
|---|
| 12073 | | { |
|---|
| 12074 | | { |
|---|
| 12075 | | auto sysTime = SysTime(DateTime(1982, 1, 4, 8, 59, 7), FracSec.from!"hnsecs"(27)); |
|---|
| 12076 | | assertPred!"=="(sysTime, sysTime.toLocalTime()); |
|---|
| 12077 | | assertPred!"=="(sysTime._stdTime, sysTime.toLocalTime()._stdTime); |
|---|
| 12078 | | assert(sysTime.toLocalTime().timezone is LocalTime()); |
|---|
| 12079 | | assert(sysTime.toLocalTime().timezone is sysTime.timezone); |
|---|
| 12080 | | assert(sysTime.toLocalTime().timezone !is UTC()); |
|---|
| 12081 | | } |
|---|
| 12082 | | |
|---|
| 12083 | | { |
|---|
| 12084 | | immutable stz = new SimpleTimeZone(-3 * 60); |
|---|
| 12085 | | auto sysTime = SysTime(DateTime(1982, 1, 4, 8, 59, 7), FracSec.from!"hnsecs"(27), stz); |
|---|
| 12086 | | assertPred!"=="(sysTime, sysTime.toLocalTime()); |
|---|
| 12087 | | assertPred!"=="(sysTime._stdTime, sysTime.toLocalTime()._stdTime); |
|---|
| 12088 | | assert(sysTime.toLocalTime().timezone is LocalTime()); |
|---|
| 12089 | | assert(sysTime.toLocalTime().timezone !is UTC()); |
|---|
| 12090 | | assert(sysTime.toLocalTime().timezone !is stz); |
|---|
| 12091 | | } |
|---|
| 12092 | | } |
|---|
| 12093 | | } |
|---|
| 12094 | | |
|---|
| 12095 | | |
|---|
| 12096 | | /++ |
|---|
| 12097 | | Returns a SysTime with the same std time as this one, but with UTC as |
|---|
| 12098 | | its time zone. |
|---|
| 12099 | | +/ |
|---|
| 12100 | | SysTime toUTC() const pure nothrow |
|---|
| 12101 | | { |
|---|
| 12102 | | return SysTime(_stdTime, UTC()); |
|---|
| 12103 | | } |
|---|
| 12104 | | |
|---|
| 12105 | | unittest |
|---|
| 12106 | | { |
|---|
| 12107 | | version(testStdDateTime) |
|---|
| 12108 | | { |
|---|
| 12109 | | auto sysTime = SysTime(DateTime(1982, 1, 4, 8, 59, 7), FracSec.from!"hnsecs"(27)); |
|---|
| 12110 | | assertPred!"=="(sysTime, sysTime.toUTC()); |
|---|
| 12111 | | assertPred!"=="(sysTime._stdTime, sysTime.toUTC()._stdTime); |
|---|
| 12112 | | assert(sysTime.toUTC().timezone is UTC()); |
|---|
| 12113 | | assert(sysTime.toUTC().timezone !is LocalTime()); |
|---|
| 12114 | | assert(sysTime.toUTC().timezone !is sysTime.timezone); |
|---|
| 12115 | | } |
|---|
| 12116 | | } |
|---|
| 12117 | | |
|---|
| 12118 | | |
|---|
| 12119 | | /++ |
|---|
| 12120 | | Returns a SysTime with the same std time as this one, but with given |
|---|
| 12121 | | time zone as its time zone. |
|---|
| 12122 | | +/ |
|---|
| 12123 | | SysTime toOtherTZ(immutable TimeZone tz) const pure nothrow |
|---|
| 12124 | | { |
|---|
| 12125 | | return SysTime(_stdTime, tz); |
|---|
| 12126 | | } |
|---|
| 12127 | | |
|---|
| 12128 | | unittest |
|---|
| 12129 | | { |
|---|
| 12130 | | version(testStdDateTime) |
|---|
| 12131 | | { |
|---|
| 12132 | | immutable stz = new SimpleTimeZone(11 * 60); |
|---|
| 12133 | | auto sysTime = SysTime(DateTime(1982, 1, 4, 8, 59, 7), FracSec.from!"hnsecs"(27)); |
|---|
| 12134 | | assertPred!"=="(sysTime, sysTime.toOtherTZ(stz)); |
|---|
| 12135 | | assertPred!"=="(sysTime._stdTime, sysTime.toOtherTZ(stz)._stdTime); |
|---|
| 12136 | | assert(sysTime.toOtherTZ(stz).timezone is stz); |
|---|
| 12137 | | assert(sysTime.toOtherTZ(stz).timezone !is LocalTime()); |
|---|
| 12138 | | assert(sysTime.toOtherTZ(stz).timezone !is UTC()); |
|---|
| 12139 | | } |
|---|
| 12140 | | } |
|---|
| 12141 | | |
|---|
| 12142 | | |
|---|
| 12143 | | /++ |
|---|
| 12144 | | Returns a time_t which represents this SysTime. |
|---|
| 12145 | | |
|---|
| 12146 | | If time_t is 32 bits, rather than 64, and the result can't fit in a 32-bit |
|---|
| 12147 | | value, then the closest value that can be held in 32 bits will be used |
|---|
| 12148 | | (so time_t.max if it goes over or time_t.min if it goes under). |
|---|
| 12149 | | +/ |
|---|
| 12150 | | time_t toUnixTime() const pure nothrow |
|---|
| 12151 | | { |
|---|
| 12152 | | return stdTimeToUnixTime(_stdTime); |
|---|
| 12153 | | } |
|---|
| 12154 | | |
|---|
| 12155 | | unittest |
|---|
| 12156 | | { |
|---|
| 12157 | | version(testStdDateTime) |
|---|
| 12158 | | { |
|---|
| 12159 | | assertPred!"=="(SysTime(DateTime(1970, 1, 1), UTC()).toUnixTime, 0); |
|---|
| 12160 | | assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1), UTC()).toUnixTime, 0); |
|---|
| 12161 | | assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), FracSec.from!"usecs"(1), UTC()).toUnixTime, 0); |
|---|
| 12162 | | assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), FracSec.from!"msecs"(1), UTC()).toUnixTime, 0); |
|---|
| 12163 | | assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 1), UTC()).toUnixTime, 1); |
|---|
| 12164 | | assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).toUnixTime, 0); |
|---|
| 12165 | | assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"usecs"(999_999), UTC()).toUnixTime, 0); |
|---|
| 12166 | | assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"msecs"(999), UTC()).toUnixTime, 0); |
|---|
| 12167 | | assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), UTC()).toUnixTime, -1); |
|---|
| 12168 | | } |
|---|
| 12169 | | } |
|---|
| 12170 | | |
|---|
| 12171 | | |
|---|
| 12172 | | /++ |
|---|
| 12173 | | Returns a timeval which represents this SysTime. |
|---|
| 12174 | | |
|---|
| 12175 | | If time_t is 32 bits, rather than 64, and the result can't fit in a 32-bit |
|---|
| 12176 | | value, then the closest value that can be held in 32 bits will be used |
|---|
| 12177 | | for tv_sec. (so time_t.max if it goes over or time_t.min if it goes under). |
|---|
| 12178 | | +/ |
|---|
| 12179 | | timeval toTimeVal() const pure nothrow |
|---|
| 12180 | | { |
|---|
| 12181 | | immutable tv_sec = toUnixTime(); |
|---|
| 12182 | | |
|---|
| 12183 | | immutable fracHNSecs = removeUnitsFromHNSecs!"seconds"(_stdTime - 621355968000000000L); |
|---|
| 12184 | | immutable tv_usec = cast(int)convert!("hnsecs", "usecs")(fracHNSecs); |
|---|
| 12185 | | |
|---|
| 12186 | | return timeval(tv_sec, tv_usec); |
|---|
| 12187 | | } |
|---|
| 12188 | | |
|---|
| 12189 | | unittest |
|---|
| 12190 | | { |
|---|
| 12191 | | version(testStdDateTime) |
|---|
| 12192 | | { |
|---|
| 12193 | | assert(SysTime(DateTime(1970, 1, 1), UTC()).toTimeVal() == timeval(0, 0)); |
|---|
| 12194 | | assert(SysTime(DateTime(1970, 1, 1), FracSec.from!"hnsecs"(9), UTC()).toTimeVal() == timeval(0, 0)); |
|---|
| 12195 | | assert(SysTime(DateTime(1970, 1, 1), FracSec.from!"hnsecs"(10), UTC()).toTimeVal() == timeval(0, 1)); |
|---|
| 12196 | | assert(SysTime(DateTime(1970, 1, 1), FracSec.from!"usecs"(7), UTC()).toTimeVal() == timeval(0, 7)); |
|---|
| 12197 | | |
|---|
| 12198 | | assert(SysTime(DateTime(1970, 1, 1, 0, 0, 1), UTC()).toTimeVal() == timeval(1, 0)); |
|---|
| 12199 | | assert(SysTime(DateTime(1970, 1, 1, 0, 0, 1), FracSec.from!"hnsecs"(9), UTC()).toTimeVal() == timeval(1, 0)); |
|---|
| 12200 | | assert(SysTime(DateTime(1970, 1, 1, 0, 0, 1), FracSec.from!"hnsecs"(10), UTC()).toTimeVal() == timeval(1, 1)); |
|---|
| 12201 | | assert(SysTime(DateTime(1970, 1, 1, 0, 0, 1), FracSec.from!"usecs"(7), UTC()).toTimeVal() == timeval(1, 7)); |
|---|
| 12202 | | |
|---|
| 12203 | | assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).toTimeVal() == |
|---|
| 12204 | | timeval(0, 0)); |
|---|
| 12205 | | assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_990), UTC()).toTimeVal() == |
|---|
| 12206 | | timeval(0, -1)); |
|---|
| 12207 | | |
|---|
| 12208 | | assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"usecs"(999_999), UTC()).toTimeVal() == |
|---|
| 12209 | | timeval(0, -1)); |
|---|
| 12210 | | assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"usecs"(999), UTC()).toTimeVal() == |
|---|
| 12211 | | timeval(0, -999_001)); |
|---|
| 12212 | | assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"msecs"(999), UTC()).toTimeVal() == |
|---|
| 12213 | | timeval(0, -1000)); |
|---|
| 12214 | | assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), UTC()).toTimeVal() == timeval(-1, 0)); |
|---|
| 12215 | | assert(SysTime(DateTime(1969, 12, 31, 23, 59, 58), FracSec.from!"usecs"(17), UTC()).toTimeVal() == |
|---|
| 12216 | | timeval(-1, -999_983)); |
|---|
| 12217 | | } |
|---|
| 12218 | | } |
|---|
| 12219 | | |
|---|
| 12220 | | |
|---|
| 12221 | | /++ |
|---|
| 12222 | | Returns a tm which represents this SysTime. |
|---|
| 12223 | | +/ |
|---|
| 12224 | | tm toTM() const nothrow |
|---|
| 12225 | | { |
|---|
| 12226 | | try |
|---|
| 12227 | | { |
|---|
| 12228 | | auto dateTime = cast(DateTime)this; |
|---|
| 12229 | | tm timeInfo; |
|---|
| 12230 | | |
|---|
| 12231 | | timeInfo.tm_sec = dateTime.second; |
|---|
| 12232 | | timeInfo.tm_min = dateTime.minute; |
|---|
| 12233 | | timeInfo.tm_hour = dateTime.hour; |
|---|
| 12234 | | timeInfo.tm_mday = dateTime.day; |
|---|
| 12235 | | timeInfo.tm_mon = dateTime.month - 1; |
|---|
| 12236 | | timeInfo.tm_year = dateTime.year - 1900; |
|---|
| 12237 | | timeInfo.tm_wday = dateTime.dayOfWeek; |
|---|
| 12238 | | timeInfo.tm_yday = dateTime.dayOfYear - 1; |
|---|
| 12239 | | timeInfo.tm_isdst = _timezone.dstInEffect(_stdTime); |
|---|
| 12240 | | |
|---|
| 12241 | | version(Posix) |
|---|
| 12242 | | { |
|---|
| 12243 | | char[] zone = (timeInfo.tm_isdst ? _timezone.dstName : _timezone.stdName).dup; |
|---|
| 12244 | | zone ~= "\0"; |
|---|
| 12245 | | |
|---|
| 12246 | | timeInfo.tm_gmtoff = cast(int)convert!("hnsecs", "seconds")(adjTime - _stdTime); |
|---|
| 12247 | | timeInfo.tm_zone = zone.ptr; |
|---|
| 12248 | | } |
|---|
| 12249 | | |
|---|
| 12250 | | return timeInfo; |
|---|
| 12251 | | } |
|---|
| 12252 | | catch(Exception e) |
|---|
| 12253 | | assert(0, "Either DateTime's constructor threw."); |
|---|
| 12254 | | } |
|---|
| 12255 | | |
|---|
| 12256 | | unittest |
|---|
| 12257 | | { |
|---|
| 12258 | | version(testStdDateTime) |
|---|
| 12259 | | { |
|---|
| 12260 | | version(Posix) |
|---|
| 12261 | | { |
|---|
| 12262 | | scope(exit) clearTZEnvVar(); |
|---|
| 12263 | | setTZEnvVar("America/Los_Angeles"); |
|---|
| 12264 | | } |
|---|
| 12265 | | |
|---|
| 12266 | | { |
|---|
| 12267 | | auto timeInfo = SysTime(DateTime(1970, 1, 1)).toTM(); |
|---|
| 12268 | | |
|---|
| 12269 | | assertPred!"=="(timeInfo.tm_sec, 0); |
|---|
| 12270 | | assertPred!"=="(timeInfo.tm_min, 0); |
|---|
| 12271 | | assertPred!"=="(timeInfo.tm_hour, 0); |
|---|
| 12272 | | assertPred!"=="(timeInfo.tm_mday, 1); |
|---|
| 12273 | | assertPred!"=="(timeInfo.tm_mon, 0); |
|---|
| 12274 | | assertPred!"=="(timeInfo.tm_year, 70); |
|---|
| 12275 | | assertPred!"=="(timeInfo.tm_wday, 4); |
|---|
| 12276 | | assertPred!"=="(timeInfo.tm_yday, 0); |
|---|
| 12277 | | |
|---|
| 12278 | | version(Posix) |
|---|
| 12279 | | assertPred!"=="(timeInfo.tm_isdst, 0); |
|---|
| 12280 | | else version(Windows) |
|---|
| 12281 | | assert(timeInfo.tm_isdst == 0 || timeInfo.tm_isdst == 1); |
|---|
| 12282 | | |
|---|
| 12283 | | version(Posix) |
|---|
| 12284 | | { |
|---|
| 12285 | | assertPred!"=="(timeInfo.tm_gmtoff, -8 * 60 * 60); |
|---|
| 12286 | | assertPred!"=="(to!string(timeInfo.tm_zone), "PST"); |
|---|
| 12287 | | } |
|---|
| 12288 | | } |
|---|
| 12289 | | |
|---|
| 12290 | | { |
|---|
| 12291 | | auto timeInfo = SysTime(DateTime(2010, 7, 4, 12, 15, 7), FracSec.from!"hnsecs"(15)).toTM(); |
|---|
| 12292 | | |
|---|
| 12293 | | assertPred!"=="(timeInfo.tm_sec, 7); |
|---|
| 12294 | | assertPred!"=="(timeInfo.tm_min, 15); |
|---|
| 12295 | | assertPred!"=="(timeInfo.tm_hour, 12); |
|---|
| 12296 | | assertPred!"=="(timeInfo.tm_mday, 4); |
|---|
| 12297 | | assertPred!"=="(timeInfo.tm_mon, 6); |
|---|
| 12298 | | assertPred!"=="(timeInfo.tm_year, 110); |
|---|
| 12299 | | assertPred!"=="(timeInfo.tm_wday, 0); |
|---|
| 12300 | | assertPred!"=="(timeInfo.tm_yday, 184); |
|---|
| 12301 | | |
|---|
| 12302 | | version(Posix) |
|---|
| 12303 | | assertPred!"=="(timeInfo.tm_isdst, 1); |
|---|
| 12304 | | else version(Windows) |
|---|
| 12305 | | assert(timeInfo.tm_isdst == 0 || timeInfo.tm_isdst == 1); |
|---|
| 12306 | | |
|---|
| 12307 | | version(Posix) |
|---|
| 12308 | | { |
|---|
| 12309 | | assertPred!"=="(timeInfo.tm_gmtoff, -7 * 60 * 60); |
|---|
| 12310 | | assertPred!"=="(to!string(timeInfo.tm_zone), "PDT"); |
|---|
| 12311 | | } |
|---|
| 12312 | | } |
|---|
| 12313 | | } |
|---|
| 12314 | | } |
|---|
| 12315 | | |
|---|
| 12316 | | |
|---|
| 12317 | | /++ |
|---|
| 12318 | | Adds the given number of years or months to this SysTime. A negative |
|---|
| 12319 | | number will subtract. |
|---|
| 12320 | | |
|---|
| 12321 | | Note that if day overflow is allowed, and the date with the adjusted |
|---|
| 12322 | | year/month overflows the number of days in the new month, then the month |
|---|
| 12323 | | will be incremented by one, and the days set to the number of days overflowed. |
|---|
| 12324 | | (e.g. if the day were 31 and the new month were June, then the month would |
|---|
| 12325 | | be incremented to July, and the new day would be 1). If day overflow is not |
|---|
| 12326 | | allowed, then the day will be set to the last valid day in the month |
|---|
| 12327 | | (e.g. June 31st would become June 30th). |
|---|
| 12328 | | |
|---|
| 12329 | | Params: |
|---|
| 12330 | | units = The type of units to add ("years" or "months"). |
|---|
| 12331 | | value = The number of months or years to add to this SysTime. |
|---|
| 12332 | | allowOverflow = Whether the days should be allowed to overflow, causing |
|---|
| 12333 | | the month to increment. |
|---|
| 12334 | | |
|---|
| 12335 | | Examples: |
|---|
| 12336 | | -------------------- |
|---|
| 12337 | | auto st1 = SysTime(DateTime(2010, 1, 1, 12, 30, 33)); |
|---|
| 12338 | | st1.add!"months"(11); |
|---|
| 12339 | | assert(st1 == SysTime(DateTime(2010, 12, 1, 12, 30, 33))); |
|---|
| 12340 | | |
|---|
| 12341 | | auto st2 = SysTime(DateTime(2010, 1, 1, 12, 30, 33)); |
|---|
| 12342 | | st2.add!"months"(-11); |
|---|
| 12343 | | assert(st2 == SysTime(DateTime(2009, 2, 1, 12, 30, 33))); |
|---|
| 12344 | | |
|---|
| 12345 | | auto st3 = SysTime(DateTime(2000, 2, 29, 12, 30, 33)); |
|---|
| 12346 | | st3.add!"years"(1); |
|---|
| 12347 | | assert(st3 == SysTime(DateTime(2001, 3, 1, 12, 30, 33))); |
|---|
| 12348 | | |
|---|
| 12349 | | auto st4 = SysTime(DateTime(2000, 2, 29, 12, 30, 33)); |
|---|
| 12350 | | st4.add!"years"(1, AllowDayOverflow.no); |
|---|
| 12351 | | assert(st4 == SysTime(DateTime(2001, 2, 28, 12, 30, 33))); |
|---|
| 12352 | | -------------------- |
|---|
| 12353 | | +/ |
|---|
| 12354 | | ref SysTime add(string units)(long years, AllowDayOverflow allowOverflow = AllowDayOverflow.yes) nothrow |
|---|
| 12355 | | if(units == "years" || |
|---|
| 12356 | | units == "months") |
|---|
| 12357 | | { |
|---|
| 12358 | | auto hnsecs = adjTime; |
|---|
| 12359 | | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| 12360 | | |
|---|
| 12361 | | if(hnsecs < 0) |
|---|
| 12362 | | { |
|---|
| 12363 | | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| 12364 | | --days; |
|---|
| 12365 | | } |
|---|
| 12366 | | |
|---|
| 12367 | | auto date = Date(cast(int)days); |
|---|
| 12368 | | date.add!units(years, allowOverflow); |
|---|
| 12369 | | days = date.dayOfGregorianCal - 1; |
|---|
| 12370 | | |
|---|
| 12371 | | if(days < 0) |
|---|
| 12372 | | { |
|---|
| 12373 | | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| 12374 | | ++days; |
|---|
| 12375 | | } |
|---|
| 12376 | | |
|---|
| 12377 | | immutable newDaysHNSecs = convert!("days", "hnsecs")(days); |
|---|
| 12378 | | |
|---|
| 12379 | | adjTime = newDaysHNSecs + hnsecs; |
|---|
| 12380 | | |
|---|
| 12381 | | return this; |
|---|
| 12382 | | } |
|---|
| 12383 | | |
|---|
| 12384 | | //Test add!"years"() with AllowDayOverlow.yes |
|---|
| 12385 | | unittest |
|---|
| 12386 | | { |
|---|
| 12387 | | version(testStdDateTime) |
|---|
| 12388 | | { |
|---|
| 12389 | | //Test A.D. |
|---|
| 12390 | | { |
|---|
| 12391 | | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| 12392 | | sysTime.add!"years"(7); |
|---|
| 12393 | | assertPred!"=="(sysTime, SysTime(Date(2006, 7, 6))); |
|---|
| 12394 | | sysTime.add!"years"(-9); |
|---|
| 12395 | | assertPred!"=="(sysTime, SysTime(Date(1997, 7, 6))); |
|---|
| 12396 | | } |
|---|
| 12397 | | |
|---|
| 12398 | | { |
|---|
| 12399 | | auto sysTime = SysTime(Date(1999, 2, 28)); |
|---|
| 12400 | | sysTime.add!"years"(1); |
|---|
| 12401 | | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 28))); |
|---|
| 12402 | | } |
|---|
| 12403 | | |
|---|
| 12404 | | { |
|---|
| 12405 | | auto sysTime = SysTime(Date(2000, 2, 29)); |
|---|
| 12406 | | sysTime.add!"years"(-1); |
|---|
| 12407 | | assertPred!"=="(sysTime, SysTime(Date(1999, 3, 1))); |
|---|
| 12408 | | } |
|---|
| 12409 | | |
|---|
| 12410 | | { |
|---|
| 12411 | | auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)); |
|---|
| 12412 | | sysTime.add!"years"(7); |
|---|
| 12413 | | assertPred!"=="(sysTime, SysTime(DateTime(2006, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| 12414 | | sysTime.add!"years"(-9); |
|---|
| 12415 | | assertPred!"=="(sysTime, SysTime(DateTime(1997, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| 12416 | | } |
|---|
| 12417 | | |
|---|
| 12418 | | { |
|---|
| 12419 | | auto sysTime = SysTime(DateTime(1999, 2, 28, 0, 7, 2), FracSec.from!"usecs"(1207)); |
|---|
| 12420 | | sysTime.add!"years"(1); |
|---|
| 12421 | | assertPred!"=="(sysTime, SysTime(DateTime(2000, 2, 28, 0, 7, 2), FracSec.from!"usecs"(1207))); |
|---|
| 12422 | | } |
|---|
| 12423 | | |
|---|
| 12424 | | { |
|---|
| 12425 | | auto sysTime = SysTime(DateTime(2000, 2, 29, 0, 7, 2), FracSec.from!"usecs"(1207)); |
|---|
| 12426 | | sysTime.add!"years"(-1); |
|---|
| 12427 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 3, 1, 0, 7, 2), FracSec.from!"usecs"(1207))); |
|---|
| 12428 | | } |
|---|
| 12429 | | |
|---|
| 12430 | | //Test B.C. |
|---|
| 12431 | | { |
|---|
| 12432 | | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| 12433 | | sysTime.add!"years"(-7); |
|---|
| 12434 | | assertPred!"=="(sysTime, SysTime(Date(-2006, 7, 6))); |
|---|
| 12435 | | sysTime.add!"years"(9); |
|---|
| 12436 | | assertPred!"=="(sysTime, SysTime(Date(-1997, 7, 6))); |
|---|
| 12437 | | } |
|---|
| 12438 | | |
|---|
| 12439 | | { |
|---|
| 12440 | | auto sysTime = SysTime(Date(-1999, 2, 28)); |
|---|
| 12441 | | sysTime.add!"years"(-1); |
|---|
| 12442 | | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 28))); |
|---|
| 12443 | | } |
|---|
| 12444 | | |
|---|
| 12445 | | { |
|---|
| 12446 | | auto sysTime = SysTime(Date(-2000, 2, 29)); |
|---|
| 12447 | | sysTime.add!"years"(1); |
|---|
| 12448 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 3, 1))); |
|---|
| 12449 | | } |
|---|
| 12450 | | |
|---|
| 12451 | | { |
|---|
| 12452 | | auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)); |
|---|
| 12453 | | sysTime.add!"years"(-7); |
|---|
| 12454 | | assertPred!"=="(sysTime, SysTime(DateTime(-2006, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| 12455 | | sysTime.add!"years"(9); |
|---|
| 12456 | | assertPred!"=="(sysTime, SysTime(DateTime(-1997, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| 12457 | | } |
|---|
| 12458 | | |
|---|
| 12459 | | { |
|---|
| 12460 | | auto sysTime = SysTime(DateTime(-1999, 2, 28, 3, 3, 3), FracSec.from!"hnsecs"(3)); |
|---|
| 12461 | | sysTime.add!"years"(-1); |
|---|
| 12462 | | assertPred!"=="(sysTime, SysTime(DateTime(-2000, 2, 28, 3, 3, 3), FracSec.from!"hnsecs"(3))); |
|---|
| 12463 | | } |
|---|
| 12464 | | |
|---|
| 12465 | | { |
|---|
| 12466 | | auto sysTime = SysTime(DateTime(-2000, 2, 29, 3, 3, 3), FracSec.from!"hnsecs"(3)); |
|---|
| 12467 | | sysTime.add!"years"(1); |
|---|
| 12468 | | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 3, 1, 3, 3, 3), FracSec.from!"hnsecs"(3))); |
|---|
| 12469 | | } |
|---|
| 12470 | | |
|---|
| 12471 | | //Test Both |
|---|
| 12472 | | { |
|---|
| 12473 | | auto sysTime = SysTime(Date(4, 7, 6)); |
|---|
| 12474 | | sysTime.add!"years"(-5); |
|---|
| 12475 | | assertPred!"=="(sysTime, SysTime(Date(-1, 7, 6))); |
|---|
| 12476 | | sysTime.add!"years"(5); |
|---|
| 12477 | | assertPred!"=="(sysTime, SysTime(Date(4, 7, 6))); |
|---|
| 12478 | | } |
|---|
| 12479 | | |
|---|
| 12480 | | { |
|---|
| 12481 | | auto sysTime = SysTime(Date(-4, 7, 6)); |
|---|
| 12482 | | sysTime.add!"years"(5); |
|---|
| 12483 | | assertPred!"=="(sysTime, SysTime(Date(1, 7, 6))); |
|---|
| 12484 | | sysTime.add!"years"(-5); |
|---|
| 12485 | | assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6))); |
|---|
| 12486 | | } |
|---|
| 12487 | | |
|---|
| 12488 | | { |
|---|
| 12489 | | auto sysTime = SysTime(Date(4, 7, 6)); |
|---|
| 12490 | | sysTime.add!"years"(-8); |
|---|
| 12491 | | assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6))); |
|---|
| 12492 | | sysTime.add!"years"(8); |
|---|
| 12493 | | assertPred!"=="(sysTime, SysTime(Date(4, 7, 6))); |
|---|
| 12494 | | } |
|---|
| 12495 | | |
|---|
| 12496 | | { |
|---|
| 12497 | | auto sysTime = SysTime(Date(-4, 7, 6)); |
|---|
| 12498 | | sysTime.add!"years"(8); |
|---|
| 12499 | | assertPred!"=="(sysTime, SysTime(Date(4, 7, 6))); |
|---|
| 12500 | | sysTime.add!"years"(-8); |
|---|
| 12501 | | assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6))); |
|---|
| 12502 | | } |
|---|
| 12503 | | |
|---|
| 12504 | | { |
|---|
| 12505 | | auto sysTime = SysTime(Date(-4, 2, 29)); |
|---|
| 12506 | | sysTime.add!"years"(5); |
|---|
| 12507 | | assertPred!"=="(sysTime, SysTime(Date(1, 3, 1))); |
|---|
| 12508 | | } |
|---|
| 12509 | | |
|---|
| 12510 | | { |
|---|
| 12511 | | auto sysTime = SysTime(Date(4, 2, 29)); |
|---|
| 12512 | | sysTime.add!"years"(-5); |
|---|
| 12513 | | assertPred!"=="(sysTime, SysTime(Date(-1, 3, 1))); |
|---|
| 12514 | | } |
|---|
| 12515 | | |
|---|
| 12516 | | { |
|---|
| 12517 | | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| 12518 | | sysTime.add!"years"(-1); |
|---|
| 12519 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 12520 | | sysTime.add!"years"(1); |
|---|
| 12521 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 12522 | | } |
|---|
| 12523 | | |
|---|
| 12524 | | { |
|---|
| 12525 | | auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| 12526 | | sysTime.add!"years"(-1); |
|---|
| 12527 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 12528 | | sysTime.add!"years"(1); |
|---|
| 12529 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 12530 | | } |
|---|
| 12531 | | |
|---|
| 12532 | | { |
|---|
| 12533 | | auto sysTime = SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| 12534 | | sysTime.add!"years"(1); |
|---|
| 12535 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 12536 | | sysTime.add!"years"(-1); |
|---|
| 12537 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 12538 | | } |
|---|
| 12539 | | |
|---|
| 12540 | | { |
|---|
| 12541 | | auto sysTime = SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| 12542 | | sysTime.add!"years"(1); |
|---|
| 12543 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 12544 | | sysTime.add!"years"(-1); |
|---|
| 12545 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 12546 | | } |
|---|
| 12547 | | |
|---|
| 12548 | | { |
|---|
| 12549 | | auto sysTime = SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)); |
|---|
| 12550 | | sysTime.add!"years"(-5); |
|---|
| 12551 | | assertPred!"=="(sysTime, SysTime(DateTime(-1, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| 12552 | | sysTime.add!"years"(5); |
|---|
| 12553 | | assertPred!"=="(sysTime, SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| 12554 | | } |
|---|
| 12555 | | |
|---|
| 12556 | | { |
|---|
| 12557 | | auto sysTime = SysTime(DateTime(-4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)); |
|---|
| 12558 | | sysTime.add!"years"(5); |
|---|
| 12559 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| 12560 | | sysTime.add!"years"(-5); |
|---|
| 12561 | | assertPred!"=="(sysTime, SysTime(DateTime(-4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| 12562 | | } |
|---|
| 12563 | | |
|---|
| 12564 | | { |
|---|
| 12565 | | auto sysTime = SysTime(DateTime(-4, 2, 29, 5, 5, 5), FracSec.from!"msecs"(555)); |
|---|
| 12566 | | sysTime.add!"years"(5); |
|---|
| 12567 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 3, 1, 5, 5, 5), FracSec.from!"msecs"(555))); |
|---|
| 12568 | | } |
|---|
| 12569 | | |
|---|
| 12570 | | { |
|---|
| 12571 | | auto sysTime = SysTime(DateTime(4, 2, 29, 5, 5, 5), FracSec.from!"msecs"(555)); |
|---|
| 12572 | | sysTime.add!"years"(-5); |
|---|
| 12573 | | assertPred!"=="(sysTime, SysTime(DateTime(-1, 3, 1, 5, 5, 5), FracSec.from!"msecs"(555))); |
|---|
| 12574 | | } |
|---|
| 12575 | | |
|---|
| 12576 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 12577 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 12578 | | static assert(!__traits(compiles, cst.add!"years"(4))); |
|---|
| 12579 | | //static assert(!__traits(compiles, ist.add!"years"(4))); |
|---|
| 12580 | | |
|---|
| 12581 | | //Verify Examples. |
|---|
| 12582 | | auto st1 = SysTime(DateTime(2010, 1, 1, 12, 30, 33)); |
|---|
| 12583 | | st1.add!"months"(11); |
|---|
| 12584 | | assert(st1 == SysTime(DateTime(2010, 12, 1, 12, 30, 33))); |
|---|
| 12585 | | |
|---|
| 12586 | | auto st2 = SysTime(DateTime(2010, 1, 1, 12, 30, 33)); |
|---|
| 12587 | | st2.add!"months"(-11); |
|---|
| 12588 | | assert(st2 == SysTime(DateTime(2009, 2, 1, 12, 30, 33))); |
|---|
| 12589 | | |
|---|
| 12590 | | auto st3 = SysTime(DateTime(2000, 2, 29, 12, 30, 33)); |
|---|
| 12591 | | st3.add!"years"(1); |
|---|
| 12592 | | assert(st3 == SysTime(DateTime(2001, 3, 1, 12, 30, 33))); |
|---|
| 12593 | | |
|---|
| 12594 | | auto st4 = SysTime(DateTime(2000, 2, 29, 12, 30, 33)); |
|---|
| 12595 | | st4.add!"years"(1, AllowDayOverflow.no); |
|---|
| 12596 | | assert(st4 == SysTime(DateTime(2001, 2, 28, 12, 30, 33))); |
|---|
| 12597 | | } |
|---|
| 12598 | | } |
|---|
| 12599 | | |
|---|
| 12600 | | //Test add!"years"() with AllowDayOverlow.no |
|---|
| 12601 | | unittest |
|---|
| 12602 | | { |
|---|
| 12603 | | version(testStdDateTime) |
|---|
| 12604 | | { |
|---|
| 12605 | | //Test A.D. |
|---|
| 12606 | | { |
|---|
| 12607 | | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| 12608 | | sysTime.add!"years"(7, AllowDayOverflow.no); |
|---|
| 12609 | | assertPred!"=="(sysTime, SysTime(Date(2006, 7, 6))); |
|---|
| 12610 | | sysTime.add!"years"(-9, AllowDayOverflow.no); |
|---|
| 12611 | | assertPred!"=="(sysTime, SysTime(Date(1997, 7, 6))); |
|---|
| 12612 | | } |
|---|
| 12613 | | |
|---|
| 12614 | | { |
|---|
| 12615 | | auto sysTime = SysTime(Date(1999, 2, 28)); |
|---|
| 12616 | | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| 12617 | | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 28))); |
|---|
| 12618 | | } |
|---|
| 12619 | | |
|---|
| 12620 | | { |
|---|
| 12621 | | auto sysTime = SysTime(Date(2000, 2, 29)); |
|---|
| 12622 | | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| 12623 | | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28))); |
|---|
| 12624 | | } |
|---|
| 12625 | | |
|---|
| 12626 | | { |
|---|
| 12627 | | auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)); |
|---|
| 12628 | | sysTime.add!"years"(7, AllowDayOverflow.no); |
|---|
| 12629 | | assertPred!"=="(sysTime, SysTime(DateTime(2006, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| 12630 | | sysTime.add!"years"(-9, AllowDayOverflow.no); |
|---|
| 12631 | | assertPred!"=="(sysTime, SysTime(DateTime(1997, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| 12632 | | } |
|---|
| 12633 | | |
|---|
| 12634 | | { |
|---|
| 12635 | | auto sysTime = SysTime(DateTime(1999, 2, 28, 0, 7, 2), FracSec.from!"usecs"(1207)); |
|---|
| 12636 | | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| 12637 | | assertPred!"=="(sysTime, SysTime(DateTime(2000, 2, 28, 0, 7, 2), FracSec.from!"usecs"(1207))); |
|---|
| 12638 | | } |
|---|
| 12639 | | |
|---|
| 12640 | | { |
|---|
| 12641 | | auto sysTime = SysTime(DateTime(2000, 2, 29, 0, 7, 2), FracSec.from!"usecs"(1207)); |
|---|
| 12642 | | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| 12643 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 2, 28, 0, 7, 2), FracSec.from!"usecs"(1207))); |
|---|
| 12644 | | } |
|---|
| 12645 | | |
|---|
| 12646 | | //Test B.C. |
|---|
| 12647 | | { |
|---|
| 12648 | | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| 12649 | | sysTime.add!"years"(-7, AllowDayOverflow.no); |
|---|
| 12650 | | assertPred!"=="(sysTime, SysTime(Date(-2006, 7, 6))); |
|---|
| 12651 | | sysTime.add!"years"(9, AllowDayOverflow.no); |
|---|
| 12652 | | assertPred!"=="(sysTime, SysTime(Date(-1997, 7, 6))); |
|---|
| 12653 | | } |
|---|
| 12654 | | |
|---|
| 12655 | | { |
|---|
| 12656 | | auto sysTime = SysTime(Date(-1999, 2, 28)); |
|---|
| 12657 | | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| 12658 | | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 28))); |
|---|
| 12659 | | } |
|---|
| 12660 | | |
|---|
| 12661 | | { |
|---|
| 12662 | | auto sysTime = SysTime(Date(-2000, 2, 29)); |
|---|
| 12663 | | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| 12664 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 28))); |
|---|
| 12665 | | } |
|---|
| 12666 | | |
|---|
| 12667 | | { |
|---|
| 12668 | | auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)); |
|---|
| 12669 | | sysTime.add!"years"(-7, AllowDayOverflow.no); |
|---|
| 12670 | | assertPred!"=="(sysTime, SysTime(DateTime(-2006, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| 12671 | | sysTime.add!"years"(9, AllowDayOverflow.no); |
|---|
| 12672 | | assertPred!"=="(sysTime, SysTime(DateTime(-1997, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234))); |
|---|
| 12673 | | } |
|---|
| 12674 | | |
|---|
| 12675 | | { |
|---|
| 12676 | | auto sysTime = SysTime(DateTime(-1999, 2, 28, 3, 3, 3), FracSec.from!"hnsecs"(3)); |
|---|
| 12677 | | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| 12678 | | assertPred!"=="(sysTime, SysTime(DateTime(-2000, 2, 28, 3, 3, 3), FracSec.from!"hnsecs"(3))); |
|---|
| 12679 | | } |
|---|
| 12680 | | |
|---|
| 12681 | | { |
|---|
| 12682 | | auto sysTime = SysTime(DateTime(-2000, 2, 29, 3, 3, 3), FracSec.from!"hnsecs"(3)); |
|---|
| 12683 | | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| 12684 | | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 2, 28, 3, 3, 3), FracSec.from!"hnsecs"(3))); |
|---|
| 12685 | | } |
|---|
| 12686 | | |
|---|
| 12687 | | //Test Both |
|---|
| 12688 | | { |
|---|
| 12689 | | auto sysTime = SysTime(Date(4, 7, 6)); |
|---|
| 12690 | | sysTime.add!"years"(-5, AllowDayOverflow.no); |
|---|
| 12691 | | assertPred!"=="(sysTime, SysTime(Date(-1, 7, 6))); |
|---|
| 12692 | | sysTime.add!"years"(5, AllowDayOverflow.no); |
|---|
| 12693 | | assertPred!"=="(sysTime, SysTime(Date(4, 7, 6))); |
|---|
| 12694 | | } |
|---|
| 12695 | | |
|---|
| 12696 | | { |
|---|
| 12697 | | auto sysTime = SysTime(Date(-4, 7, 6)); |
|---|
| 12698 | | sysTime.add!"years"(5, AllowDayOverflow.no); |
|---|
| 12699 | | assertPred!"=="(sysTime, SysTime(Date(1, 7, 6))); |
|---|
| 12700 | | sysTime.add!"years"(-5, AllowDayOverflow.no); |
|---|
| 12701 | | assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6))); |
|---|
| 12702 | | } |
|---|
| 12703 | | |
|---|
| 12704 | | { |
|---|
| 12705 | | auto sysTime = SysTime(Date(4, 7, 6)); |
|---|
| 12706 | | sysTime.add!"years"(-8, AllowDayOverflow.no); |
|---|
| 12707 | | assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6))); |
|---|
| 12708 | | sysTime.add!"years"(8, AllowDayOverflow.no); |
|---|
| 12709 | | assertPred!"=="(sysTime, SysTime(Date(4, 7, 6))); |
|---|
| 12710 | | } |
|---|
| 12711 | | |
|---|
| 12712 | | { |
|---|
| 12713 | | auto sysTime = SysTime(Date(-4, 7, 6)); |
|---|
| 12714 | | sysTime.add!"years"(8, AllowDayOverflow.no); |
|---|
| 12715 | | assertPred!"=="(sysTime, SysTime(Date(4, 7, 6))); |
|---|
| 12716 | | sysTime.add!"years"(-8, AllowDayOverflow.no); |
|---|
| 12717 | | assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6))); |
|---|
| 12718 | | } |
|---|
| 12719 | | |
|---|
| 12720 | | { |
|---|
| 12721 | | auto sysTime = SysTime(Date(-4, 2, 29)); |
|---|
| 12722 | | sysTime.add!"years"(5, AllowDayOverflow.no); |
|---|
| 12723 | | assertPred!"=="(sysTime, SysTime(Date(1, 2, 28))); |
|---|
| 12724 | | } |
|---|
| 12725 | | |
|---|
| 12726 | | { |
|---|
| 12727 | | auto sysTime = SysTime(Date(4, 2, 29)); |
|---|
| 12728 | | sysTime.add!"years"(-5, AllowDayOverflow.no); |
|---|
| 12729 | | assertPred!"=="(sysTime, SysTime(Date(-1, 2, 28))); |
|---|
| 12730 | | } |
|---|
| 12731 | | |
|---|
| 12732 | | { |
|---|
| 12733 | | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| 12734 | | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| 12735 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 12736 | | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| 12737 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 12738 | | } |
|---|
| 12739 | | |
|---|
| 12740 | | { |
|---|
| 12741 | | auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| 12742 | | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| 12743 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 12744 | | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| 12745 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 12746 | | } |
|---|
| 12747 | | |
|---|
| 12748 | | { |
|---|
| 12749 | | auto sysTime = SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| 12750 | | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| 12751 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 12752 | | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| 12753 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 12754 | | } |
|---|
| 12755 | | |
|---|
| 12756 | | { |
|---|
| 12757 | | auto sysTime = SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| 12758 | | sysTime.add!"years"(1, AllowDayOverflow.no); |
|---|
| 12759 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 12760 | | sysTime.add!"years"(-1, AllowDayOverflow.no); |
|---|
| 12761 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 12762 | | } |
|---|
| 12763 | | |
|---|
| 12764 | | { |
|---|
| 12765 | | auto sysTime = SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)); |
|---|
| 12766 | | sysTime.add!"years"(-5); |
|---|
| 12767 | | assertPred!"=="(sysTime, SysTime(DateTime(-1, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| 12768 | | sysTime.add!"years"(5); |
|---|
| 12769 | | assertPred!"=="(sysTime, SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| 12770 | | } |
|---|
| 12771 | | |
|---|
| 12772 | | { |
|---|
| 12773 | | auto sysTime = SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)); |
|---|
| 12774 | | sysTime.add!"years"(-5, AllowDayOverflow.no); |
|---|
| 12775 | | assertPred!"=="(sysTime, SysTime(DateTime(-1, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| 12776 | | sysTime.add!"years"(5, AllowDayOverflow.no); |
|---|
| 12777 | | assertPred!"=="(sysTime, SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| 12778 | | } |
|---|
| 12779 | | |
|---|
| 12780 | | { |
|---|
| 12781 | | auto sysTime = SysTime(DateTime(-4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)); |
|---|
| 12782 | | sysTime.add!"years"(5, AllowDayOverflow.no); |
|---|
| 12783 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| 12784 | | sysTime.add!"years"(-5, AllowDayOverflow.no); |
|---|
| 12785 | | assertPred!"=="(sysTime, SysTime(DateTime(-4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329))); |
|---|
| 12786 | | } |
|---|
| 12787 | | |
|---|
| 12788 | | { |
|---|
| 12789 | | auto sysTime = SysTime(DateTime(-4, 2, 29, 5, 5, 5), FracSec.from!"msecs"(555)); |
|---|
| 12790 | | sysTime.add!"years"(5, AllowDayOverflow.no); |
|---|
| 12791 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 2, 28, 5, 5, 5), FracSec.from!"msecs"(555))); |
|---|
| 12792 | | } |
|---|
| 12793 | | |
|---|
| 12794 | | { |
|---|
| 12795 | | auto sysTime = SysTime(DateTime(4, 2, 29, 5, 5, 5), FracSec.from!"msecs"(555)); |
|---|
| 12796 | | sysTime.add!"years"(-5, AllowDayOverflow.no); |
|---|
| 12797 | | assertPred!"=="(sysTime, SysTime(DateTime(-1, 2, 28, 5, 5, 5), FracSec.from!"msecs"(555))); |
|---|
| 12798 | | } |
|---|
| 12799 | | } |
|---|
| 12800 | | } |
|---|
| 12801 | | |
|---|
| 12802 | | //Test add!"months"() with AllowDayOverlow.yes |
|---|
| 12803 | | unittest |
|---|
| 12804 | | { |
|---|
| 12805 | | version(testStdDateTime) |
|---|
| 12806 | | { |
|---|
| 12807 | | //Test A.D. |
|---|
| 12808 | | { |
|---|
| 12809 | | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| 12810 | | sysTime.add!"months"(3); |
|---|
| 12811 | | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6))); |
|---|
| 12812 | | sysTime.add!"months"(-4); |
|---|
| 12813 | | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| 12814 | | } |
|---|
| 12815 | | |
|---|
| 12816 | | { |
|---|
| 12817 | | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| 12818 | | sysTime.add!"months"(6); |
|---|
| 12819 | | assertPred!"=="(sysTime, SysTime(Date(2000, 1, 6))); |
|---|
| 12820 | | sysTime.add!"months"(-6); |
|---|
| 12821 | | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6))); |
|---|
| 12822 | | } |
|---|
| 12823 | | |
|---|
| 12824 | | { |
|---|
| 12825 | | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| 12826 | | sysTime.add!"months"(27); |
|---|
| 12827 | | assertPred!"=="(sysTime, SysTime(Date(2001, 10, 6))); |
|---|
| 12828 | | sysTime.add!"months"(-28); |
|---|
| 12829 | | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| 12830 | | } |
|---|
| 12831 | | |
|---|
| 12832 | | { |
|---|
| 12833 | | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| 12834 | | sysTime.add!"months"(1); |
|---|
| 12835 | | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 1))); |
|---|
| 12836 | | } |
|---|
| 12837 | | |
|---|
| 12838 | | { |
|---|
| 12839 | | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| 12840 | | sysTime.add!"months"(-1); |
|---|
| 12841 | | assertPred!"=="(sysTime, SysTime(Date(1999, 5, 1))); |
|---|
| 12842 | | } |
|---|
| 12843 | | |
|---|
| 12844 | | { |
|---|
| 12845 | | auto sysTime = SysTime(Date(1999, 2, 28)); |
|---|
| 12846 | | sysTime.add!"months"(12); |
|---|
| 12847 | | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 28))); |
|---|
| 12848 | | } |
|---|
| 12849 | | |
|---|
| 12850 | | { |
|---|
| 12851 | | auto sysTime = SysTime(Date(2000, 2, 29)); |
|---|
| 12852 | | sysTime.add!"months"(12); |
|---|
| 12853 | | assertPred!"=="(sysTime, SysTime(Date(2001, 3, 1))); |
|---|
| 12854 | | } |
|---|
| 12855 | | |
|---|
| 12856 | | { |
|---|
| 12857 | | auto sysTime = SysTime(Date(1999, 7, 31)); |
|---|
| 12858 | | sysTime.add!"months"(1); |
|---|
| 12859 | | assertPred!"=="(sysTime, SysTime(Date(1999, 8, 31))); |
|---|
| 12860 | | sysTime.add!"months"(1); |
|---|
| 12861 | | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 1))); |
|---|
| 12862 | | } |
|---|
| 12863 | | |
|---|
| 12864 | | { |
|---|
| 12865 | | auto sysTime = SysTime(Date(1998, 8, 31)); |
|---|
| 12866 | | sysTime.add!"months"(13); |
|---|
| 12867 | | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 1))); |
|---|
| 12868 | | sysTime.add!"months"(-13); |
|---|
| 12869 | | assertPred!"=="(sysTime, SysTime(Date(1998, 9, 1))); |
|---|
| 12870 | | } |
|---|
| 12871 | | |
|---|
| 12872 | | { |
|---|
| 12873 | | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| 12874 | | sysTime.add!"months"(13); |
|---|
| 12875 | | assertPred!"=="(sysTime, SysTime(Date(1999, 1, 31))); |
|---|
| 12876 | | sysTime.add!"months"(-13); |
|---|
| 12877 | | assertPred!"=="(sysTime, SysTime(Date(1997, 12, 31))); |
|---|
| 12878 | | } |
|---|
| 12879 | | |
|---|
| 12880 | | { |
|---|
| 12881 | | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| 12882 | | sysTime.add!"months"(14); |
|---|
| 12883 | | assertPred!"=="(sysTime, SysTime(Date(1999, 3, 3))); |
|---|
| 12884 | | sysTime.add!"months"(-14); |
|---|
| 12885 | | assertPred!"=="(sysTime, SysTime(Date(1998, 1, 3))); |
|---|
| 12886 | | } |
|---|
| 12887 | | |
|---|
| 12888 | | { |
|---|
| 12889 | | auto sysTime = SysTime(Date(1998, 12, 31)); |
|---|
| 12890 | | sysTime.add!"months"(14); |
|---|
| 12891 | | assertPred!"=="(sysTime, SysTime(Date(2000, 3, 2))); |
|---|
| 12892 | | sysTime.add!"months"(-14); |
|---|
| 12893 | | assertPred!"=="(sysTime, SysTime(Date(1999, 1, 2))); |
|---|
| 12894 | | } |
|---|
| 12895 | | |
|---|
| 12896 | | { |
|---|
| 12897 | | auto sysTime = SysTime(Date(1999, 12, 31)); |
|---|
| 12898 | | sysTime.add!"months"(14); |
|---|
| 12899 | | assertPred!"=="(sysTime, SysTime(Date(2001, 3, 3))); |
|---|
| 12900 | | sysTime.add!"months"(-14); |
|---|
| 12901 | | assertPred!"=="(sysTime, SysTime(Date(2000, 1, 3))); |
|---|
| 12902 | | } |
|---|
| 12903 | | |
|---|
| 12904 | | { |
|---|
| 12905 | | auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007)); |
|---|
| 12906 | | sysTime.add!"months"(3); |
|---|
| 12907 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| 12908 | | sysTime.add!"months"(-4); |
|---|
| 12909 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| 12910 | | } |
|---|
| 12911 | | |
|---|
| 12912 | | { |
|---|
| 12913 | | auto sysTime = SysTime(DateTime(1998, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 12914 | | sysTime.add!"months"(14); |
|---|
| 12915 | | assertPred!"=="(sysTime, SysTime(DateTime(2000, 3, 2, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 12916 | | sysTime.add!"months"(-14); |
|---|
| 12917 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 1, 2, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 12918 | | } |
|---|
| 12919 | | |
|---|
| 12920 | | { |
|---|
| 12921 | | auto sysTime = SysTime(DateTime(1999, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 12922 | | sysTime.add!"months"(14); |
|---|
| 12923 | | assertPred!"=="(sysTime, SysTime(DateTime(2001, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 12924 | | sysTime.add!"months"(-14); |
|---|
| 12925 | | assertPred!"=="(sysTime, SysTime(DateTime(2000, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 12926 | | } |
|---|
| 12927 | | |
|---|
| 12928 | | //Test B.C. |
|---|
| 12929 | | { |
|---|
| 12930 | | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| 12931 | | sysTime.add!"months"(3); |
|---|
| 12932 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 6))); |
|---|
| 12933 | | sysTime.add!"months"(-4); |
|---|
| 12934 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 6))); |
|---|
| 12935 | | } |
|---|
| 12936 | | |
|---|
| 12937 | | { |
|---|
| 12938 | | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| 12939 | | sysTime.add!"months"(6); |
|---|
| 12940 | | assertPred!"=="(sysTime, SysTime(Date(-1998, 1, 6))); |
|---|
| 12941 | | sysTime.add!"months"(-6); |
|---|
| 12942 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6))); |
|---|
| 12943 | | } |
|---|
| 12944 | | |
|---|
| 12945 | | { |
|---|
| 12946 | | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| 12947 | | sysTime.add!"months"(-27); |
|---|
| 12948 | | assertPred!"=="(sysTime, SysTime(Date(-2001, 4, 6))); |
|---|
| 12949 | | sysTime.add!"months"(28); |
|---|
| 12950 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 6))); |
|---|
| 12951 | | } |
|---|
| 12952 | | |
|---|
| 12953 | | { |
|---|
| 12954 | | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| 12955 | | sysTime.add!"months"(1); |
|---|
| 12956 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 1))); |
|---|
| 12957 | | } |
|---|
| 12958 | | |
|---|
| 12959 | | { |
|---|
| 12960 | | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| 12961 | | sysTime.add!"months"(-1); |
|---|
| 12962 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 5, 1))); |
|---|
| 12963 | | } |
|---|
| 12964 | | |
|---|
| 12965 | | { |
|---|
| 12966 | | auto sysTime = SysTime(Date(-1999, 2, 28)); |
|---|
| 12967 | | sysTime.add!"months"(-12); |
|---|
| 12968 | | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 28))); |
|---|
| 12969 | | } |
|---|
| 12970 | | |
|---|
| 12971 | | { |
|---|
| 12972 | | auto sysTime = SysTime(Date(-2000, 2, 29)); |
|---|
| 12973 | | sysTime.add!"months"(-12); |
|---|
| 12974 | | assertPred!"=="(sysTime, SysTime(Date(-2001, 3, 1))); |
|---|
| 12975 | | } |
|---|
| 12976 | | |
|---|
| 12977 | | { |
|---|
| 12978 | | auto sysTime = SysTime(Date(-1999, 7, 31)); |
|---|
| 12979 | | sysTime.add!"months"(1); |
|---|
| 12980 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 31))); |
|---|
| 12981 | | sysTime.add!"months"(1); |
|---|
| 12982 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 1))); |
|---|
| 12983 | | } |
|---|
| 12984 | | |
|---|
| 12985 | | { |
|---|
| 12986 | | auto sysTime = SysTime(Date(-1998, 8, 31)); |
|---|
| 12987 | | sysTime.add!"months"(13); |
|---|
| 12988 | | assertPred!"=="(sysTime, SysTime(Date(-1997, 10, 1))); |
|---|
| 12989 | | sysTime.add!"months"(-13); |
|---|
| 12990 | | assertPred!"=="(sysTime, SysTime(Date(-1998, 9, 1))); |
|---|
| 12991 | | } |
|---|
| 12992 | | |
|---|
| 12993 | | { |
|---|
| 12994 | | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| 12995 | | sysTime.add!"months"(13); |
|---|
| 12996 | | assertPred!"=="(sysTime, SysTime(Date(-1995, 1, 31))); |
|---|
| 12997 | | sysTime.add!"months"(-13); |
|---|
| 12998 | | assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 31))); |
|---|
| 12999 | | } |
|---|
| 13000 | | |
|---|
| 13001 | | { |
|---|
| 13002 | | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| 13003 | | sysTime.add!"months"(14); |
|---|
| 13004 | | assertPred!"=="(sysTime, SysTime(Date(-1995, 3, 3))); |
|---|
| 13005 | | sysTime.add!"months"(-14); |
|---|
| 13006 | | assertPred!"=="(sysTime, SysTime(Date(-1996, 1, 3))); |
|---|
| 13007 | | } |
|---|
| 13008 | | |
|---|
| 13009 | | { |
|---|
| 13010 | | auto sysTime = SysTime(Date(-2002, 12, 31)); |
|---|
| 13011 | | sysTime.add!"months"(14); |
|---|
| 13012 | | assertPred!"=="(sysTime, SysTime(Date(-2000, 3, 2))); |
|---|
| 13013 | | sysTime.add!"months"(-14); |
|---|
| 13014 | | assertPred!"=="(sysTime, SysTime(Date(-2001, 1, 2))); |
|---|
| 13015 | | } |
|---|
| 13016 | | |
|---|
| 13017 | | { |
|---|
| 13018 | | auto sysTime = SysTime(Date(-2001, 12, 31)); |
|---|
| 13019 | | sysTime.add!"months"(14); |
|---|
| 13020 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 3, 3))); |
|---|
| 13021 | | sysTime.add!"months"(-14); |
|---|
| 13022 | | assertPred!"=="(sysTime, SysTime(Date(-2000, 1, 3))); |
|---|
| 13023 | | } |
|---|
| 13024 | | |
|---|
| 13025 | | { |
|---|
| 13026 | | auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007)); |
|---|
| 13027 | | sysTime.add!"months"(3); |
|---|
| 13028 | | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| 13029 | | sysTime.add!"months"(-4); |
|---|
| 13030 | | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| 13031 | | } |
|---|
| 13032 | | |
|---|
| 13033 | | { |
|---|
| 13034 | | auto sysTime = SysTime(DateTime(-2002, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 13035 | | sysTime.add!"months"(14); |
|---|
| 13036 | | assertPred!"=="(sysTime, SysTime(DateTime(-2000, 3, 2, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13037 | | sysTime.add!"months"(-14); |
|---|
| 13038 | | assertPred!"=="(sysTime, SysTime(DateTime(-2001, 1, 2, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13039 | | } |
|---|
| 13040 | | |
|---|
| 13041 | | { |
|---|
| 13042 | | auto sysTime = SysTime(DateTime(-2001, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 13043 | | sysTime.add!"months"(14); |
|---|
| 13044 | | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13045 | | sysTime.add!"months"(-14); |
|---|
| 13046 | | assertPred!"=="(sysTime, SysTime(DateTime(-2000, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13047 | | } |
|---|
| 13048 | | |
|---|
| 13049 | | //Test Both |
|---|
| 13050 | | { |
|---|
| 13051 | | auto sysTime = SysTime(Date(1, 1, 1)); |
|---|
| 13052 | | sysTime.add!"months"(-1); |
|---|
| 13053 | | assertPred!"=="(sysTime, SysTime(Date(0, 12, 1))); |
|---|
| 13054 | | sysTime.add!"months"(1); |
|---|
| 13055 | | assertPred!"=="(sysTime, SysTime(Date(1, 1, 1))); |
|---|
| 13056 | | } |
|---|
| 13057 | | |
|---|
| 13058 | | { |
|---|
| 13059 | | auto sysTime = SysTime(Date(4, 1, 1)); |
|---|
| 13060 | | sysTime.add!"months"(-48); |
|---|
| 13061 | | assertPred!"=="(sysTime, SysTime(Date(0, 1, 1))); |
|---|
| 13062 | | sysTime.add!"months"(48); |
|---|
| 13063 | | assertPred!"=="(sysTime, SysTime(Date(4, 1, 1))); |
|---|
| 13064 | | } |
|---|
| 13065 | | |
|---|
| 13066 | | { |
|---|
| 13067 | | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| 13068 | | sysTime.add!"months"(-49); |
|---|
| 13069 | | assertPred!"=="(sysTime, SysTime(Date(0, 3, 2))); |
|---|
| 13070 | | sysTime.add!"months"(49); |
|---|
| 13071 | | assertPred!"=="(sysTime, SysTime(Date(4, 4, 2))); |
|---|
| 13072 | | } |
|---|
| 13073 | | |
|---|
| 13074 | | { |
|---|
| 13075 | | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| 13076 | | sysTime.add!"months"(-85); |
|---|
| 13077 | | assertPred!"=="(sysTime, SysTime(Date(-3, 3, 3))); |
|---|
| 13078 | | sysTime.add!"months"(85); |
|---|
| 13079 | | assertPred!"=="(sysTime, SysTime(Date(4, 4, 3))); |
|---|
| 13080 | | } |
|---|
| 13081 | | |
|---|
| 13082 | | { |
|---|
| 13083 | | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| 13084 | | sysTime.add!"months"(-1); |
|---|
| 13085 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 13086 | | sysTime.add!"months"(1); |
|---|
| 13087 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 13088 | | } |
|---|
| 13089 | | |
|---|
| 13090 | | { |
|---|
| 13091 | | auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| 13092 | | sysTime.add!"months"(-1); |
|---|
| 13093 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 13094 | | sysTime.add!"months"(1); |
|---|
| 13095 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 13096 | | } |
|---|
| 13097 | | |
|---|
| 13098 | | { |
|---|
| 13099 | | auto sysTime = SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| 13100 | | sysTime.add!"months"(1); |
|---|
| 13101 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 13102 | | sysTime.add!"months"(-1); |
|---|
| 13103 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 13104 | | } |
|---|
| 13105 | | |
|---|
| 13106 | | { |
|---|
| 13107 | | auto sysTime = SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| 13108 | | sysTime.add!"months"(1); |
|---|
| 13109 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 13110 | | sysTime.add!"months"(-1); |
|---|
| 13111 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 13112 | | } |
|---|
| 13113 | | |
|---|
| 13114 | | { |
|---|
| 13115 | | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)); |
|---|
| 13116 | | sysTime.add!"months"(-1); |
|---|
| 13117 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| 13118 | | sysTime.add!"months"(1); |
|---|
| 13119 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| 13120 | | } |
|---|
| 13121 | | |
|---|
| 13122 | | { |
|---|
| 13123 | | auto sysTime = SysTime(DateTime(4, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| 13124 | | sysTime.add!"months"(-85); |
|---|
| 13125 | | assertPred!"=="(sysTime, SysTime(DateTime(-3, 3, 3, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 13126 | | sysTime.add!"months"(85); |
|---|
| 13127 | | assertPred!"=="(sysTime, SysTime(DateTime(4, 4, 3, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 13128 | | } |
|---|
| 13129 | | |
|---|
| 13130 | | { |
|---|
| 13131 | | auto sysTime = SysTime(DateTime(-3, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| 13132 | | sysTime.add!"months"(85); |
|---|
| 13133 | | assertPred!"=="(sysTime, SysTime(DateTime(4, 5, 1, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 13134 | | sysTime.add!"months"(-85); |
|---|
| 13135 | | assertPred!"=="(sysTime, SysTime(DateTime(-3, 4, 1, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 13136 | | } |
|---|
| 13137 | | |
|---|
| 13138 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 13139 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 13140 | | static assert(!__traits(compiles, cst.add!"months"(4))); |
|---|
| 13141 | | //static assert(!__traits(compiles, ist.add!"months"(4))); |
|---|
| 13142 | | |
|---|
| 13143 | | //Verify Examples. |
|---|
| 13144 | | auto st1 = SysTime(DateTime(2010, 1, 1, 12, 30 ,33)); |
|---|
| 13145 | | st1.add!"months"(1); |
|---|
| 13146 | | assert(st1 == SysTime(DateTime(2010, 2, 1, 12, 30 ,33))); |
|---|
| 13147 | | |
|---|
| 13148 | | auto st2 = SysTime(DateTime(2010, 1, 1, 12, 30 ,33)); |
|---|
| 13149 | | st2.add!"months"(-1); |
|---|
| 13150 | | assert(st2 == SysTime(DateTime(2009, 12, 1, 12, 30 ,33))); |
|---|
| 13151 | | |
|---|
| 13152 | | auto st3 = SysTime(DateTime(1999, 1, 29, 12, 30 ,33)); |
|---|
| 13153 | | st3.add!"months"(1); |
|---|
| 13154 | | assert(st3 == SysTime(DateTime(1999, 3, 1, 12, 30 ,33))); |
|---|
| 13155 | | |
|---|
| 13156 | | auto st4 = SysTime(DateTime(1999, 1, 29, 12, 30 ,33)); |
|---|
| 13157 | | st4.add!"months"(1, AllowDayOverflow.no); |
|---|
| 13158 | | assert(st4 == SysTime(DateTime(1999, 2, 28, 12, 30 ,33))); |
|---|
| 13159 | | } |
|---|
| 13160 | | } |
|---|
| 13161 | | |
|---|
| 13162 | | //Test add!"months"() with AllowDayOverlow.no |
|---|
| 13163 | | unittest |
|---|
| 13164 | | { |
|---|
| 13165 | | version(testStdDateTime) |
|---|
| 13166 | | { |
|---|
| 13167 | | //Test A.D. |
|---|
| 13168 | | { |
|---|
| 13169 | | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| 13170 | | sysTime.add!"months"(3, AllowDayOverflow.no); |
|---|
| 13171 | | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6))); |
|---|
| 13172 | | sysTime.add!"months"(-4, AllowDayOverflow.no); |
|---|
| 13173 | | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| 13174 | | } |
|---|
| 13175 | | |
|---|
| 13176 | | { |
|---|
| 13177 | | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| 13178 | | sysTime.add!"months"(6, AllowDayOverflow.no); |
|---|
| 13179 | | assertPred!"=="(sysTime, SysTime(Date(2000, 1, 6))); |
|---|
| 13180 | | sysTime.add!"months"(-6, AllowDayOverflow.no); |
|---|
| 13181 | | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6))); |
|---|
| 13182 | | } |
|---|
| 13183 | | |
|---|
| 13184 | | { |
|---|
| 13185 | | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| 13186 | | sysTime.add!"months"(27, AllowDayOverflow.no); |
|---|
| 13187 | | assertPred!"=="(sysTime, SysTime(Date(2001, 10, 6))); |
|---|
| 13188 | | sysTime.add!"months"(-28, AllowDayOverflow.no); |
|---|
| 13189 | | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| 13190 | | } |
|---|
| 13191 | | |
|---|
| 13192 | | { |
|---|
| 13193 | | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| 13194 | | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| 13195 | | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 30))); |
|---|
| 13196 | | } |
|---|
| 13197 | | |
|---|
| 13198 | | { |
|---|
| 13199 | | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| 13200 | | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| 13201 | | assertPred!"=="(sysTime, SysTime(Date(1999, 4, 30))); |
|---|
| 13202 | | } |
|---|
| 13203 | | |
|---|
| 13204 | | { |
|---|
| 13205 | | auto sysTime = SysTime(Date(1999, 2, 28)); |
|---|
| 13206 | | sysTime.add!"months"(12, AllowDayOverflow.no); |
|---|
| 13207 | | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 28))); |
|---|
| 13208 | | } |
|---|
| 13209 | | |
|---|
| 13210 | | { |
|---|
| 13211 | | auto sysTime = SysTime(Date(2000, 2, 29)); |
|---|
| 13212 | | sysTime.add!"months"(12, AllowDayOverflow.no); |
|---|
| 13213 | | assertPred!"=="(sysTime, SysTime(Date(2001, 2, 28))); |
|---|
| 13214 | | } |
|---|
| 13215 | | |
|---|
| 13216 | | { |
|---|
| 13217 | | auto sysTime = SysTime(Date(1999, 7, 31)); |
|---|
| 13218 | | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| 13219 | | assertPred!"=="(sysTime, SysTime(Date(1999, 8, 31))); |
|---|
| 13220 | | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| 13221 | | assertPred!"=="(sysTime, SysTime(Date(1999, 9, 30))); |
|---|
| 13222 | | } |
|---|
| 13223 | | |
|---|
| 13224 | | { |
|---|
| 13225 | | auto sysTime = SysTime(Date(1998, 8, 31)); |
|---|
| 13226 | | sysTime.add!"months"(13, AllowDayOverflow.no); |
|---|
| 13227 | | assertPred!"=="(sysTime, SysTime(Date(1999, 9, 30))); |
|---|
| 13228 | | sysTime.add!"months"(-13, AllowDayOverflow.no); |
|---|
| 13229 | | assertPred!"=="(sysTime, SysTime(Date(1998, 8, 30))); |
|---|
| 13230 | | } |
|---|
| 13231 | | |
|---|
| 13232 | | { |
|---|
| 13233 | | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| 13234 | | sysTime.add!"months"(13, AllowDayOverflow.no); |
|---|
| 13235 | | assertPred!"=="(sysTime, SysTime(Date(1999, 1, 31))); |
|---|
| 13236 | | sysTime.add!"months"(-13, AllowDayOverflow.no); |
|---|
| 13237 | | assertPred!"=="(sysTime, SysTime(Date(1997, 12, 31))); |
|---|
| 13238 | | } |
|---|
| 13239 | | |
|---|
| 13240 | | { |
|---|
| 13241 | | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| 13242 | | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| 13243 | | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28))); |
|---|
| 13244 | | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| 13245 | | assertPred!"=="(sysTime, SysTime(Date(1997, 12, 28))); |
|---|
| 13246 | | } |
|---|
| 13247 | | |
|---|
| 13248 | | { |
|---|
| 13249 | | auto sysTime = SysTime(Date(1998, 12, 31)); |
|---|
| 13250 | | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| 13251 | | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 29))); |
|---|
| 13252 | | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| 13253 | | assertPred!"=="(sysTime, SysTime(Date(1998, 12, 29))); |
|---|
| 13254 | | } |
|---|
| 13255 | | |
|---|
| 13256 | | { |
|---|
| 13257 | | auto sysTime = SysTime(Date(1999, 12, 31)); |
|---|
| 13258 | | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| 13259 | | assertPred!"=="(sysTime, SysTime(Date(2001, 2, 28))); |
|---|
| 13260 | | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| 13261 | | assertPred!"=="(sysTime, SysTime(Date(1999, 12, 28))); |
|---|
| 13262 | | } |
|---|
| 13263 | | |
|---|
| 13264 | | { |
|---|
| 13265 | | auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007)); |
|---|
| 13266 | | sysTime.add!"months"(3, AllowDayOverflow.no); |
|---|
| 13267 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| 13268 | | sysTime.add!"months"(-4, AllowDayOverflow.no); |
|---|
| 13269 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| 13270 | | } |
|---|
| 13271 | | |
|---|
| 13272 | | { |
|---|
| 13273 | | auto sysTime = SysTime(DateTime(1998, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 13274 | | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| 13275 | | assertPred!"=="(sysTime, SysTime(DateTime(2000, 2, 29, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13276 | | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| 13277 | | assertPred!"=="(sysTime, SysTime(DateTime(1998, 12, 29, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13278 | | } |
|---|
| 13279 | | |
|---|
| 13280 | | { |
|---|
| 13281 | | auto sysTime = SysTime(DateTime(1999, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 13282 | | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| 13283 | | assertPred!"=="(sysTime, SysTime(DateTime(2001, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13284 | | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| 13285 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13286 | | } |
|---|
| 13287 | | |
|---|
| 13288 | | //Test B.C. |
|---|
| 13289 | | { |
|---|
| 13290 | | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| 13291 | | sysTime.add!"months"(3, AllowDayOverflow.no); |
|---|
| 13292 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 6))); |
|---|
| 13293 | | sysTime.add!"months"(-4, AllowDayOverflow.no); |
|---|
| 13294 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 6))); |
|---|
| 13295 | | } |
|---|
| 13296 | | |
|---|
| 13297 | | { |
|---|
| 13298 | | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| 13299 | | sysTime.add!"months"(6, AllowDayOverflow.no); |
|---|
| 13300 | | assertPred!"=="(sysTime, SysTime(Date(-1998, 1, 6))); |
|---|
| 13301 | | sysTime.add!"months"(-6, AllowDayOverflow.no); |
|---|
| 13302 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6))); |
|---|
| 13303 | | } |
|---|
| 13304 | | |
|---|
| 13305 | | { |
|---|
| 13306 | | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| 13307 | | sysTime.add!"months"(-27, AllowDayOverflow.no); |
|---|
| 13308 | | assertPred!"=="(sysTime, SysTime(Date(-2001, 4, 6))); |
|---|
| 13309 | | sysTime.add!"months"(28, AllowDayOverflow.no); |
|---|
| 13310 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 6))); |
|---|
| 13311 | | } |
|---|
| 13312 | | |
|---|
| 13313 | | { |
|---|
| 13314 | | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| 13315 | | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| 13316 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 30))); |
|---|
| 13317 | | } |
|---|
| 13318 | | |
|---|
| 13319 | | { |
|---|
| 13320 | | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| 13321 | | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| 13322 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 4, 30))); |
|---|
| 13323 | | } |
|---|
| 13324 | | |
|---|
| 13325 | | { |
|---|
| 13326 | | auto sysTime = SysTime(Date(-1999, 2, 28)); |
|---|
| 13327 | | sysTime.add!"months"(-12, AllowDayOverflow.no); |
|---|
| 13328 | | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 28))); |
|---|
| 13329 | | } |
|---|
| 13330 | | |
|---|
| 13331 | | { |
|---|
| 13332 | | auto sysTime = SysTime(Date(-2000, 2, 29)); |
|---|
| 13333 | | sysTime.add!"months"(-12, AllowDayOverflow.no); |
|---|
| 13334 | | assertPred!"=="(sysTime, SysTime(Date(-2001, 2, 28))); |
|---|
| 13335 | | } |
|---|
| 13336 | | |
|---|
| 13337 | | { |
|---|
| 13338 | | auto sysTime = SysTime(Date(-1999, 7, 31)); |
|---|
| 13339 | | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| 13340 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 31))); |
|---|
| 13341 | | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| 13342 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 9, 30))); |
|---|
| 13343 | | } |
|---|
| 13344 | | |
|---|
| 13345 | | { |
|---|
| 13346 | | auto sysTime = SysTime(Date(-1998, 8, 31)); |
|---|
| 13347 | | sysTime.add!"months"(13, AllowDayOverflow.no); |
|---|
| 13348 | | assertPred!"=="(sysTime, SysTime(Date(-1997, 9, 30))); |
|---|
| 13349 | | sysTime.add!"months"(-13, AllowDayOverflow.no); |
|---|
| 13350 | | assertPred!"=="(sysTime, SysTime(Date(-1998, 8, 30))); |
|---|
| 13351 | | } |
|---|
| 13352 | | |
|---|
| 13353 | | { |
|---|
| 13354 | | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| 13355 | | sysTime.add!"months"(13, AllowDayOverflow.no); |
|---|
| 13356 | | assertPred!"=="(sysTime, SysTime(Date(-1995, 1, 31))); |
|---|
| 13357 | | sysTime.add!"months"(-13, AllowDayOverflow.no); |
|---|
| 13358 | | assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 31))); |
|---|
| 13359 | | } |
|---|
| 13360 | | |
|---|
| 13361 | | { |
|---|
| 13362 | | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| 13363 | | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| 13364 | | assertPred!"=="(sysTime, SysTime(Date(-1995, 2, 28))); |
|---|
| 13365 | | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| 13366 | | assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 28))); |
|---|
| 13367 | | } |
|---|
| 13368 | | |
|---|
| 13369 | | { |
|---|
| 13370 | | auto sysTime = SysTime(Date(-2002, 12, 31)); |
|---|
| 13371 | | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| 13372 | | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 29))); |
|---|
| 13373 | | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| 13374 | | assertPred!"=="(sysTime, SysTime(Date(-2002, 12, 29))); |
|---|
| 13375 | | } |
|---|
| 13376 | | |
|---|
| 13377 | | { |
|---|
| 13378 | | auto sysTime = SysTime(Date(-2001, 12, 31)); |
|---|
| 13379 | | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| 13380 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 28))); |
|---|
| 13381 | | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| 13382 | | assertPred!"=="(sysTime, SysTime(Date(-2001, 12, 28))); |
|---|
| 13383 | | } |
|---|
| 13384 | | |
|---|
| 13385 | | { |
|---|
| 13386 | | auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007)); |
|---|
| 13387 | | sysTime.add!"months"(3, AllowDayOverflow.no); |
|---|
| 13388 | | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| 13389 | | sysTime.add!"months"(-4, AllowDayOverflow.no); |
|---|
| 13390 | | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| 13391 | | } |
|---|
| 13392 | | |
|---|
| 13393 | | { |
|---|
| 13394 | | auto sysTime = SysTime(DateTime(-2002, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 13395 | | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| 13396 | | assertPred!"=="(sysTime, SysTime(DateTime(-2000, 2, 29, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13397 | | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| 13398 | | assertPred!"=="(sysTime, SysTime(DateTime(-2002, 12, 29, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13399 | | } |
|---|
| 13400 | | |
|---|
| 13401 | | { |
|---|
| 13402 | | auto sysTime = SysTime(DateTime(-2001, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 13403 | | sysTime.add!"months"(14, AllowDayOverflow.no); |
|---|
| 13404 | | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13405 | | sysTime.add!"months"(-14, AllowDayOverflow.no); |
|---|
| 13406 | | assertPred!"=="(sysTime, SysTime(DateTime(-2001, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13407 | | } |
|---|
| 13408 | | |
|---|
| 13409 | | //Test Both |
|---|
| 13410 | | { |
|---|
| 13411 | | auto sysTime = SysTime(Date(1, 1, 1)); |
|---|
| 13412 | | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| 13413 | | assertPred!"=="(sysTime, SysTime(Date(0, 12, 1))); |
|---|
| 13414 | | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| 13415 | | assertPred!"=="(sysTime, SysTime(Date(1, 1, 1))); |
|---|
| 13416 | | } |
|---|
| 13417 | | |
|---|
| 13418 | | { |
|---|
| 13419 | | auto sysTime = SysTime(Date(4, 1, 1)); |
|---|
| 13420 | | sysTime.add!"months"(-48, AllowDayOverflow.no); |
|---|
| 13421 | | assertPred!"=="(sysTime, SysTime(Date(0, 1, 1))); |
|---|
| 13422 | | sysTime.add!"months"(48, AllowDayOverflow.no); |
|---|
| 13423 | | assertPred!"=="(sysTime, SysTime(Date(4, 1, 1))); |
|---|
| 13424 | | } |
|---|
| 13425 | | |
|---|
| 13426 | | { |
|---|
| 13427 | | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| 13428 | | sysTime.add!"months"(-49, AllowDayOverflow.no); |
|---|
| 13429 | | assertPred!"=="(sysTime, SysTime(Date(0, 2, 29))); |
|---|
| 13430 | | sysTime.add!"months"(49, AllowDayOverflow.no); |
|---|
| 13431 | | assertPred!"=="(sysTime, SysTime(Date(4, 3, 29))); |
|---|
| 13432 | | } |
|---|
| 13433 | | |
|---|
| 13434 | | { |
|---|
| 13435 | | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| 13436 | | sysTime.add!"months"(-85, AllowDayOverflow.no); |
|---|
| 13437 | | assertPred!"=="(sysTime, SysTime(Date(-3, 2, 28))); |
|---|
| 13438 | | sysTime.add!"months"(85, AllowDayOverflow.no); |
|---|
| 13439 | | assertPred!"=="(sysTime, SysTime(Date(4, 3, 28))); |
|---|
| 13440 | | } |
|---|
| 13441 | | |
|---|
| 13442 | | { |
|---|
| 13443 | | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| 13444 | | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| 13445 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 13446 | | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| 13447 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 13448 | | } |
|---|
| 13449 | | |
|---|
| 13450 | | { |
|---|
| 13451 | | auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| 13452 | | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| 13453 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 13454 | | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| 13455 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 13456 | | } |
|---|
| 13457 | | |
|---|
| 13458 | | { |
|---|
| 13459 | | auto sysTime = SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| 13460 | | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| 13461 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 13462 | | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| 13463 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 13464 | | } |
|---|
| 13465 | | |
|---|
| 13466 | | { |
|---|
| 13467 | | auto sysTime = SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| 13468 | | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| 13469 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 13470 | | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| 13471 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 13472 | | } |
|---|
| 13473 | | |
|---|
| 13474 | | { |
|---|
| 13475 | | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)); |
|---|
| 13476 | | sysTime.add!"months"(-1, AllowDayOverflow.no); |
|---|
| 13477 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| 13478 | | sysTime.add!"months"(1, AllowDayOverflow.no); |
|---|
| 13479 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| 13480 | | } |
|---|
| 13481 | | |
|---|
| 13482 | | { |
|---|
| 13483 | | auto sysTime = SysTime(DateTime(4, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| 13484 | | sysTime.add!"months"(-85, AllowDayOverflow.no); |
|---|
| 13485 | | assertPred!"=="(sysTime, SysTime(DateTime(-3, 2, 28, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 13486 | | sysTime.add!"months"(85, AllowDayOverflow.no); |
|---|
| 13487 | | assertPred!"=="(sysTime, SysTime(DateTime(4, 3, 28, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 13488 | | } |
|---|
| 13489 | | |
|---|
| 13490 | | { |
|---|
| 13491 | | auto sysTime = SysTime(DateTime(-3, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| 13492 | | sysTime.add!"months"(85, AllowDayOverflow.no); |
|---|
| 13493 | | assertPred!"=="(sysTime, SysTime(DateTime(4, 4, 30, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 13494 | | sysTime.add!"months"(-85, AllowDayOverflow.no); |
|---|
| 13495 | | assertPred!"=="(sysTime, SysTime(DateTime(-3, 3, 30, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 13496 | | } |
|---|
| 13497 | | } |
|---|
| 13498 | | } |
|---|
| 13499 | | |
|---|
| 13500 | | |
|---|
| 13501 | | /++ |
|---|
| 13502 | | Adds the given number of years to this SysTime. A negative number will |
|---|
| 13503 | | subtract. |
|---|
| 13504 | | |
|---|
| 13505 | | For years, because they are the largest unit in SysTime, there is no |
|---|
| 13506 | | difference between adding or rolling. |
|---|
| 13507 | | |
|---|
| 13508 | | Params: |
|---|
| 13509 | | years = The number of years to add to this SysTime. |
|---|
| 13510 | | allowOverflow = Whether the days should be allowed to overflow, |
|---|
| 13511 | | causing the month to increment. |
|---|
| 13512 | | +/ |
|---|
| 13513 | | /+ref SysTime+/ void roll(string units)(long years, AllowDayOverflow allowOverflow = AllowDayOverflow.yes) nothrow |
|---|
| 13514 | | if(units == "years") |
|---|
| 13515 | | { |
|---|
| 13516 | | add!"years"(years, allowOverflow); |
|---|
| 13517 | | } |
|---|
| 13518 | | |
|---|
| 13519 | | unittest |
|---|
| 13520 | | { |
|---|
| 13521 | | version(testStdDateTime) |
|---|
| 13522 | | { |
|---|
| 13523 | | auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 13524 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 13525 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 13526 | | static assert(__traits(compiles, st.roll!"years"(4))); |
|---|
| 13527 | | static assert(!__traits(compiles, cst.roll!"years"(4))); |
|---|
| 13528 | | //static assert(!__traits(compiles, ist.roll!"years"(4))); |
|---|
| 13529 | | } |
|---|
| 13530 | | } |
|---|
| 13531 | | |
|---|
| 13532 | | |
|---|
| 13533 | | /++ |
|---|
| 13534 | | Adds the given number of months to this SysTime. A negative number will |
|---|
| 13535 | | subtract. |
|---|
| 13536 | | |
|---|
| 13537 | | The difference between rolling and adding is that rolling does not affect |
|---|
| 13538 | | larger units. So, if you roll the SysTime 12 months, you get the exact |
|---|
| 13539 | | same SysTime. However, the days can still be affected due to the differing |
|---|
| 13540 | | number of days in each month. |
|---|
| 13541 | | |
|---|
| 13542 | | Params: |
|---|
| 13543 | | months = The number of months to add to this SysTime. |
|---|
| 13544 | | allowOverflow = Whether the days should be allowed to overflow, |
|---|
| 13545 | | causing the month to increment. |
|---|
| 13546 | | |
|---|
| 13547 | | Examples: |
|---|
| 13548 | | -------------------- |
|---|
| 13549 | | auto st1 = SysTime(DateTime(2010, 1, 1, 12, 33, 33)); |
|---|
| 13550 | | st1.roll!"months"(1); |
|---|
| 13551 | | assert(st1 == SysTime(DateTime(2010, 2, 1, 12, 33, 33))); |
|---|
| 13552 | | |
|---|
| 13553 | | auto st2 = SysTime(DateTime(2010, 1, 1, 12, 33, 33)); |
|---|
| 13554 | | st2.roll!"months"(-1); |
|---|
| 13555 | | assert(st2 == SysTime(DateTime(2010, 12, 1, 12, 33, 33))); |
|---|
| 13556 | | |
|---|
| 13557 | | auto st3 = SysTime(DateTime(1999, 1, 29, 12, 33, 33)); |
|---|
| 13558 | | st3.roll!"months"(1); |
|---|
| 13559 | | assert(st3 == SysTime(DateTime(1999, 3, 1, 12, 33, 33))); |
|---|
| 13560 | | |
|---|
| 13561 | | auto st4 = SysTime(DateTime(1999, 1, 29, 12, 33, 33)); |
|---|
| 13562 | | st4.roll!"months"(1, AllowDayOverflow.no); |
|---|
| 13563 | | assert(st4 == SysTime(DateTime(1999, 2, 28, 12, 33, 33))); |
|---|
| 13564 | | -------------------- |
|---|
| 13565 | | +/ |
|---|
| 13566 | | /+ref SysTime+/ void roll(string units)(long months, AllowDayOverflow allowOverflow = AllowDayOverflow.yes) nothrow |
|---|
| 13567 | | if(units == "months") |
|---|
| 13568 | | { |
|---|
| 13569 | | auto hnsecs = adjTime; |
|---|
| 13570 | | auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|
| 13571 | | |
|---|
| 13572 | | if(hnsecs < 0) |
|---|
| 13573 | | { |
|---|
| 13574 | | hnsecs += convert!("hours", "hnsecs")(24); |
|---|
| 13575 | | --days; |
|---|
| 13576 | | } |
|---|
| 13577 | | |
|---|
| 13578 | | auto date = Date(cast(int)days); |
|---|
| 13579 | | date.roll!"months"(months, allowOverflow); |
|---|
| 13580 | | days = date.dayOfGregorianCal - 1; |
|---|
| 13581 | | |
|---|
| 13582 | | if(days < 0) |
|---|
| 13583 | | { |
|---|
| 13584 | | hnsecs -= convert!("hours", "hnsecs")(24); |
|---|
| 13585 | | ++days; |
|---|
| 13586 | | } |
|---|
| 13587 | | |
|---|
| 13588 | | immutable newDaysHNSecs = convert!("days", "hnsecs")(days); |
|---|
| 13589 | | |
|---|
| 13590 | | adjTime = newDaysHNSecs + hnsecs; |
|---|
| 13591 | | } |
|---|
| 13592 | | |
|---|
| 13593 | | //Test roll!"months"() with AllowDayOverlow.yes |
|---|
| 13594 | | unittest |
|---|
| 13595 | | { |
|---|
| 13596 | | version(testStdDateTime) |
|---|
| 13597 | | { |
|---|
| 13598 | | //Test A.D. |
|---|
| 13599 | | { |
|---|
| 13600 | | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| 13601 | | sysTime.roll!"months"(3); |
|---|
| 13602 | | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6))); |
|---|
| 13603 | | sysTime.roll!"months"(-4); |
|---|
| 13604 | | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| 13605 | | } |
|---|
| 13606 | | |
|---|
| 13607 | | { |
|---|
| 13608 | | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| 13609 | | sysTime.roll!"months"(6); |
|---|
| 13610 | | assertPred!"=="(sysTime, SysTime(Date(1999, 1, 6))); |
|---|
| 13611 | | sysTime.roll!"months"(-6); |
|---|
| 13612 | | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6))); |
|---|
| 13613 | | } |
|---|
| 13614 | | |
|---|
| 13615 | | { |
|---|
| 13616 | | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| 13617 | | sysTime.roll!"months"(27); |
|---|
| 13618 | | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6))); |
|---|
| 13619 | | sysTime.roll!"months"(-28); |
|---|
| 13620 | | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| 13621 | | } |
|---|
| 13622 | | |
|---|
| 13623 | | { |
|---|
| 13624 | | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| 13625 | | sysTime.roll!"months"(1); |
|---|
| 13626 | | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 1))); |
|---|
| 13627 | | } |
|---|
| 13628 | | |
|---|
| 13629 | | { |
|---|
| 13630 | | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| 13631 | | sysTime.roll!"months"(-1); |
|---|
| 13632 | | assertPred!"=="(sysTime, SysTime(Date(1999, 5, 1))); |
|---|
| 13633 | | } |
|---|
| 13634 | | |
|---|
| 13635 | | { |
|---|
| 13636 | | auto sysTime = SysTime(Date(1999, 2, 28)); |
|---|
| 13637 | | sysTime.roll!"months"(12); |
|---|
| 13638 | | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28))); |
|---|
| 13639 | | } |
|---|
| 13640 | | |
|---|
| 13641 | | { |
|---|
| 13642 | | auto sysTime = SysTime(Date(2000, 2, 29)); |
|---|
| 13643 | | sysTime.roll!"months"(12); |
|---|
| 13644 | | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 29))); |
|---|
| 13645 | | } |
|---|
| 13646 | | |
|---|
| 13647 | | { |
|---|
| 13648 | | auto sysTime = SysTime(Date(1999, 7, 31)); |
|---|
| 13649 | | sysTime.roll!"months"(1); |
|---|
| 13650 | | assertPred!"=="(sysTime, SysTime(Date(1999, 8, 31))); |
|---|
| 13651 | | sysTime.roll!"months"(1); |
|---|
| 13652 | | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 1))); |
|---|
| 13653 | | } |
|---|
| 13654 | | |
|---|
| 13655 | | { |
|---|
| 13656 | | auto sysTime = SysTime(Date(1998, 8, 31)); |
|---|
| 13657 | | sysTime.roll!"months"(13); |
|---|
| 13658 | | assertPred!"=="(sysTime, SysTime(Date(1998, 10, 1))); |
|---|
| 13659 | | sysTime.roll!"months"(-13); |
|---|
| 13660 | | assertPred!"=="(sysTime, SysTime(Date(1998, 9, 1))); |
|---|
| 13661 | | } |
|---|
| 13662 | | |
|---|
| 13663 | | { |
|---|
| 13664 | | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| 13665 | | sysTime.roll!"months"(13); |
|---|
| 13666 | | assertPred!"=="(sysTime, SysTime(Date(1997, 1, 31))); |
|---|
| 13667 | | sysTime.roll!"months"(-13); |
|---|
| 13668 | | assertPred!"=="(sysTime, SysTime(Date(1997, 12, 31))); |
|---|
| 13669 | | } |
|---|
| 13670 | | |
|---|
| 13671 | | { |
|---|
| 13672 | | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| 13673 | | sysTime.roll!"months"(14); |
|---|
| 13674 | | assertPred!"=="(sysTime, SysTime(Date(1997, 3, 3))); |
|---|
| 13675 | | sysTime.roll!"months"(-14); |
|---|
| 13676 | | assertPred!"=="(sysTime, SysTime(Date(1997, 1, 3))); |
|---|
| 13677 | | } |
|---|
| 13678 | | |
|---|
| 13679 | | { |
|---|
| 13680 | | auto sysTime = SysTime(Date(1998, 12, 31)); |
|---|
| 13681 | | sysTime.roll!"months"(14); |
|---|
| 13682 | | assertPred!"=="(sysTime, SysTime(Date(1998, 3, 3))); |
|---|
| 13683 | | sysTime.roll!"months"(-14); |
|---|
| 13684 | | assertPred!"=="(sysTime, SysTime(Date(1998, 1, 3))); |
|---|
| 13685 | | } |
|---|
| 13686 | | |
|---|
| 13687 | | { |
|---|
| 13688 | | auto sysTime = SysTime(Date(1999, 12, 31)); |
|---|
| 13689 | | sysTime.roll!"months"(14); |
|---|
| 13690 | | assertPred!"=="(sysTime, SysTime(Date(1999, 3, 3))); |
|---|
| 13691 | | sysTime.roll!"months"(-14); |
|---|
| 13692 | | assertPred!"=="(sysTime, SysTime(Date(1999, 1, 3))); |
|---|
| 13693 | | } |
|---|
| 13694 | | |
|---|
| 13695 | | { |
|---|
| 13696 | | auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007)); |
|---|
| 13697 | | sysTime.roll!"months"(3); |
|---|
| 13698 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| 13699 | | sysTime.roll!"months"(-4); |
|---|
| 13700 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| 13701 | | } |
|---|
| 13702 | | |
|---|
| 13703 | | { |
|---|
| 13704 | | auto sysTime = SysTime(DateTime(1998, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 13705 | | sysTime.roll!"months"(14); |
|---|
| 13706 | | assertPred!"=="(sysTime, SysTime(DateTime(1998, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13707 | | sysTime.roll!"months"(-14); |
|---|
| 13708 | | assertPred!"=="(sysTime, SysTime(DateTime(1998, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13709 | | } |
|---|
| 13710 | | |
|---|
| 13711 | | { |
|---|
| 13712 | | auto sysTime = SysTime(DateTime(1999, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 13713 | | sysTime.roll!"months"(14); |
|---|
| 13714 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13715 | | sysTime.roll!"months"(-14); |
|---|
| 13716 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13717 | | } |
|---|
| 13718 | | |
|---|
| 13719 | | //Test B.C. |
|---|
| 13720 | | { |
|---|
| 13721 | | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| 13722 | | sysTime.roll!"months"(3); |
|---|
| 13723 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 6))); |
|---|
| 13724 | | sysTime.roll!"months"(-4); |
|---|
| 13725 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 6))); |
|---|
| 13726 | | } |
|---|
| 13727 | | |
|---|
| 13728 | | { |
|---|
| 13729 | | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| 13730 | | sysTime.roll!"months"(6); |
|---|
| 13731 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 1, 6))); |
|---|
| 13732 | | sysTime.roll!"months"(-6); |
|---|
| 13733 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6))); |
|---|
| 13734 | | } |
|---|
| 13735 | | |
|---|
| 13736 | | { |
|---|
| 13737 | | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| 13738 | | sysTime.roll!"months"(-27); |
|---|
| 13739 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 4, 6))); |
|---|
| 13740 | | sysTime.roll!"months"(28); |
|---|
| 13741 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 6))); |
|---|
| 13742 | | } |
|---|
| 13743 | | |
|---|
| 13744 | | { |
|---|
| 13745 | | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| 13746 | | sysTime.roll!"months"(1); |
|---|
| 13747 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 1))); |
|---|
| 13748 | | } |
|---|
| 13749 | | |
|---|
| 13750 | | { |
|---|
| 13751 | | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| 13752 | | sysTime.roll!"months"(-1); |
|---|
| 13753 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 5, 1))); |
|---|
| 13754 | | } |
|---|
| 13755 | | |
|---|
| 13756 | | { |
|---|
| 13757 | | auto sysTime = SysTime(Date(-1999, 2, 28)); |
|---|
| 13758 | | sysTime.roll!"months"(-12); |
|---|
| 13759 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 28))); |
|---|
| 13760 | | } |
|---|
| 13761 | | |
|---|
| 13762 | | { |
|---|
| 13763 | | auto sysTime = SysTime(Date(-2000, 2, 29)); |
|---|
| 13764 | | sysTime.roll!"months"(-12); |
|---|
| 13765 | | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 29))); |
|---|
| 13766 | | } |
|---|
| 13767 | | |
|---|
| 13768 | | { |
|---|
| 13769 | | auto sysTime = SysTime(Date(-1999, 7, 31)); |
|---|
| 13770 | | sysTime.roll!"months"(1); |
|---|
| 13771 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 31))); |
|---|
| 13772 | | sysTime.roll!"months"(1); |
|---|
| 13773 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 1))); |
|---|
| 13774 | | } |
|---|
| 13775 | | |
|---|
| 13776 | | { |
|---|
| 13777 | | auto sysTime = SysTime(Date(-1998, 8, 31)); |
|---|
| 13778 | | sysTime.roll!"months"(13); |
|---|
| 13779 | | assertPred!"=="(sysTime, SysTime(Date(-1998, 10, 1))); |
|---|
| 13780 | | sysTime.roll!"months"(-13); |
|---|
| 13781 | | assertPred!"=="(sysTime, SysTime(Date(-1998, 9, 1))); |
|---|
| 13782 | | } |
|---|
| 13783 | | |
|---|
| 13784 | | { |
|---|
| 13785 | | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| 13786 | | sysTime.roll!"months"(13); |
|---|
| 13787 | | assertPred!"=="(sysTime, SysTime(Date(-1997, 1, 31))); |
|---|
| 13788 | | sysTime.roll!"months"(-13); |
|---|
| 13789 | | assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 31))); |
|---|
| 13790 | | } |
|---|
| 13791 | | |
|---|
| 13792 | | { |
|---|
| 13793 | | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| 13794 | | sysTime.roll!"months"(14); |
|---|
| 13795 | | assertPred!"=="(sysTime, SysTime(Date(-1997, 3, 3))); |
|---|
| 13796 | | sysTime.roll!"months"(-14); |
|---|
| 13797 | | assertPred!"=="(sysTime, SysTime(Date(-1997, 1, 3))); |
|---|
| 13798 | | } |
|---|
| 13799 | | |
|---|
| 13800 | | { |
|---|
| 13801 | | auto sysTime = SysTime(Date(-2002, 12, 31)); |
|---|
| 13802 | | sysTime.roll!"months"(14); |
|---|
| 13803 | | assertPred!"=="(sysTime, SysTime(Date(-2002, 3, 3))); |
|---|
| 13804 | | sysTime.roll!"months"(-14); |
|---|
| 13805 | | assertPred!"=="(sysTime, SysTime(Date(-2002, 1, 3))); |
|---|
| 13806 | | } |
|---|
| 13807 | | |
|---|
| 13808 | | { |
|---|
| 13809 | | auto sysTime = SysTime(Date(-2001, 12, 31)); |
|---|
| 13810 | | sysTime.roll!"months"(14); |
|---|
| 13811 | | assertPred!"=="(sysTime, SysTime(Date(-2001, 3, 3))); |
|---|
| 13812 | | sysTime.roll!"months"(-14); |
|---|
| 13813 | | assertPred!"=="(sysTime, SysTime(Date(-2001, 1, 3))); |
|---|
| 13814 | | } |
|---|
| 13815 | | |
|---|
| 13816 | | { |
|---|
| 13817 | | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| 13818 | | sysTime.roll!"months"(-1); |
|---|
| 13819 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 13820 | | sysTime.roll!"months"(1); |
|---|
| 13821 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 13822 | | } |
|---|
| 13823 | | |
|---|
| 13824 | | { |
|---|
| 13825 | | auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| 13826 | | sysTime.roll!"months"(-1); |
|---|
| 13827 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 13828 | | sysTime.roll!"months"(1); |
|---|
| 13829 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 13830 | | } |
|---|
| 13831 | | |
|---|
| 13832 | | { |
|---|
| 13833 | | auto sysTime = SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| 13834 | | sysTime.roll!"months"(1); |
|---|
| 13835 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 13836 | | sysTime.roll!"months"(-1); |
|---|
| 13837 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 13838 | | } |
|---|
| 13839 | | |
|---|
| 13840 | | { |
|---|
| 13841 | | auto sysTime = SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| 13842 | | sysTime.roll!"months"(1); |
|---|
| 13843 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 13844 | | sysTime.roll!"months"(-1); |
|---|
| 13845 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 13846 | | } |
|---|
| 13847 | | |
|---|
| 13848 | | { |
|---|
| 13849 | | auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 2, 7), FracSec.from!"hnsecs"(5007)); |
|---|
| 13850 | | sysTime.roll!"months"(3); |
|---|
| 13851 | | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 10, 6, 12, 2, 7), FracSec.from!"hnsecs"(5007))); |
|---|
| 13852 | | sysTime.roll!"months"(-4); |
|---|
| 13853 | | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 6, 6, 12, 2, 7), FracSec.from!"hnsecs"(5007))); |
|---|
| 13854 | | } |
|---|
| 13855 | | |
|---|
| 13856 | | { |
|---|
| 13857 | | auto sysTime = SysTime(DateTime(-2002, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 13858 | | sysTime.roll!"months"(14); |
|---|
| 13859 | | assertPred!"=="(sysTime, SysTime(DateTime(-2002, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13860 | | sysTime.roll!"months"(-14); |
|---|
| 13861 | | assertPred!"=="(sysTime, SysTime(DateTime(-2002, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13862 | | } |
|---|
| 13863 | | |
|---|
| 13864 | | { |
|---|
| 13865 | | auto sysTime = SysTime(DateTime(-2001, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 13866 | | sysTime.roll!"months"(14); |
|---|
| 13867 | | assertPred!"=="(sysTime, SysTime(DateTime(-2001, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13868 | | sysTime.roll!"months"(-14); |
|---|
| 13869 | | assertPred!"=="(sysTime, SysTime(DateTime(-2001, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 13870 | | } |
|---|
| 13871 | | |
|---|
| 13872 | | //Test Both |
|---|
| 13873 | | { |
|---|
| 13874 | | auto sysTime = SysTime(Date(1, 1, 1)); |
|---|
| 13875 | | sysTime.roll!"months"(-1); |
|---|
| 13876 | | assertPred!"=="(sysTime, SysTime(Date(1, 12, 1))); |
|---|
| 13877 | | sysTime.roll!"months"(1); |
|---|
| 13878 | | assertPred!"=="(sysTime, SysTime(Date(1, 1, 1))); |
|---|
| 13879 | | } |
|---|
| 13880 | | |
|---|
| 13881 | | { |
|---|
| 13882 | | auto sysTime = SysTime(Date(4, 1, 1)); |
|---|
| 13883 | | sysTime.roll!"months"(-48); |
|---|
| 13884 | | assertPred!"=="(sysTime, SysTime(Date(4, 1, 1))); |
|---|
| 13885 | | sysTime.roll!"months"(48); |
|---|
| 13886 | | assertPred!"=="(sysTime, SysTime(Date(4, 1, 1))); |
|---|
| 13887 | | } |
|---|
| 13888 | | |
|---|
| 13889 | | { |
|---|
| 13890 | | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| 13891 | | sysTime.roll!"months"(-49); |
|---|
| 13892 | | assertPred!"=="(sysTime, SysTime(Date(4, 3, 2))); |
|---|
| 13893 | | sysTime.roll!"months"(49); |
|---|
| 13894 | | assertPred!"=="(sysTime, SysTime(Date(4, 4, 2))); |
|---|
| 13895 | | } |
|---|
| 13896 | | |
|---|
| 13897 | | { |
|---|
| 13898 | | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| 13899 | | sysTime.roll!"months"(-85); |
|---|
| 13900 | | assertPred!"=="(sysTime, SysTime(Date(4, 3, 2))); |
|---|
| 13901 | | sysTime.roll!"months"(85); |
|---|
| 13902 | | assertPred!"=="(sysTime, SysTime(Date(4, 4, 2))); |
|---|
| 13903 | | } |
|---|
| 13904 | | |
|---|
| 13905 | | { |
|---|
| 13906 | | auto sysTime = SysTime(Date(-1, 1, 1)); |
|---|
| 13907 | | sysTime.roll!"months"(-1); |
|---|
| 13908 | | assertPred!"=="(sysTime, SysTime(Date(-1, 12, 1))); |
|---|
| 13909 | | sysTime.roll!"months"(1); |
|---|
| 13910 | | assertPred!"=="(sysTime, SysTime(Date(-1, 1, 1))); |
|---|
| 13911 | | } |
|---|
| 13912 | | |
|---|
| 13913 | | { |
|---|
| 13914 | | auto sysTime = SysTime(Date(-4, 1, 1)); |
|---|
| 13915 | | sysTime.roll!"months"(-48); |
|---|
| 13916 | | assertPred!"=="(sysTime, SysTime(Date(-4, 1, 1))); |
|---|
| 13917 | | sysTime.roll!"months"(48); |
|---|
| 13918 | | assertPred!"=="(sysTime, SysTime(Date(-4, 1, 1))); |
|---|
| 13919 | | } |
|---|
| 13920 | | |
|---|
| 13921 | | { |
|---|
| 13922 | | auto sysTime = SysTime(Date(-4, 3, 31)); |
|---|
| 13923 | | sysTime.roll!"months"(-49); |
|---|
| 13924 | | assertPred!"=="(sysTime, SysTime(Date(-4, 3, 2))); |
|---|
| 13925 | | sysTime.roll!"months"(49); |
|---|
| 13926 | | assertPred!"=="(sysTime, SysTime(Date(-4, 4, 2))); |
|---|
| 13927 | | } |
|---|
| 13928 | | |
|---|
| 13929 | | { |
|---|
| 13930 | | auto sysTime = SysTime(Date(-4, 3, 31)); |
|---|
| 13931 | | sysTime.roll!"months"(-85); |
|---|
| 13932 | | assertPred!"=="(sysTime, SysTime(Date(-4, 3, 2))); |
|---|
| 13933 | | sysTime.roll!"months"(85); |
|---|
| 13934 | | assertPred!"=="(sysTime, SysTime(Date(-4, 4, 2))); |
|---|
| 13935 | | } |
|---|
| 13936 | | |
|---|
| 13937 | | { |
|---|
| 13938 | | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)); |
|---|
| 13939 | | sysTime.roll!"months"(-1); |
|---|
| 13940 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| 13941 | | sysTime.roll!"months"(1); |
|---|
| 13942 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| 13943 | | } |
|---|
| 13944 | | |
|---|
| 13945 | | { |
|---|
| 13946 | | auto sysTime = SysTime(DateTime(4, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| 13947 | | sysTime.roll!"months"(-85); |
|---|
| 13948 | | assertPred!"=="(sysTime, SysTime(DateTime(4, 3, 2, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 13949 | | sysTime.roll!"months"(85); |
|---|
| 13950 | | assertPred!"=="(sysTime, SysTime(DateTime(4, 4, 2, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 13951 | | } |
|---|
| 13952 | | |
|---|
| 13953 | | { |
|---|
| 13954 | | auto sysTime = SysTime(DateTime(-3, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| 13955 | | sysTime.roll!"months"(85); |
|---|
| 13956 | | assertPred!"=="(sysTime, SysTime(DateTime(-3, 5, 1, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 13957 | | sysTime.roll!"months"(-85); |
|---|
| 13958 | | assertPred!"=="(sysTime, SysTime(DateTime(-3, 4, 1, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 13959 | | } |
|---|
| 13960 | | |
|---|
| 13961 | | const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 13962 | | //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33)); |
|---|
| 13963 | | static assert(!__traits(compiles, cst.roll!"months"(4))); |
|---|
| 13964 | | //static assert(!__traits(compiles, ist.roll!"months"(4))); |
|---|
| 13965 | | |
|---|
| 13966 | | //Verify Examples. |
|---|
| 13967 | | auto st1 = SysTime(DateTime(2010, 1, 1, 12, 33, 33)); |
|---|
| 13968 | | st1.roll!"months"(1); |
|---|
| 13969 | | assert(st1 == SysTime(DateTime(2010, 2, 1, 12, 33, 33))); |
|---|
| 13970 | | |
|---|
| 13971 | | auto st2 = SysTime(DateTime(2010, 1, 1, 12, 33, 33)); |
|---|
| 13972 | | st2.roll!"months"(-1); |
|---|
| 13973 | | assert(st2 == SysTime(DateTime(2010, 12, 1, 12, 33, 33))); |
|---|
| 13974 | | |
|---|
| 13975 | | auto st3 = SysTime(DateTime(1999, 1, 29, 12, 33, 33)); |
|---|
| 13976 | | st3.roll!"months"(1); |
|---|
| 13977 | | assert(st3 == SysTime(DateTime(1999, 3, 1, 12, 33, 33))); |
|---|
| 13978 | | |
|---|
| 13979 | | auto st4 = SysTime(DateTime(1999, 1, 29, 12, 33, 33)); |
|---|
| 13980 | | st4.roll!"months"(1, AllowDayOverflow.no); |
|---|
| 13981 | | assert(st4 == SysTime(DateTime(1999, 2, 28, 12, 33, 33))); |
|---|
| 13982 | | } |
|---|
| 13983 | | } |
|---|
| 13984 | | |
|---|
| 13985 | | //Test roll!"months"() with AllowDayOverlow.no |
|---|
| 13986 | | unittest |
|---|
| 13987 | | { |
|---|
| 13988 | | version(testStdDateTime) |
|---|
| 13989 | | { |
|---|
| 13990 | | //Test A.D. |
|---|
| 13991 | | { |
|---|
| 13992 | | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| 13993 | | sysTime.roll!"months"(3, AllowDayOverflow.no); |
|---|
| 13994 | | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6))); |
|---|
| 13995 | | sysTime.roll!"months"(-4, AllowDayOverflow.no); |
|---|
| 13996 | | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| 13997 | | } |
|---|
| 13998 | | |
|---|
| 13999 | | { |
|---|
| 14000 | | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| 14001 | | sysTime.roll!"months"(6, AllowDayOverflow.no); |
|---|
| 14002 | | assertPred!"=="(sysTime, SysTime(Date(1999, 1, 6))); |
|---|
| 14003 | | sysTime.roll!"months"(-6, AllowDayOverflow.no); |
|---|
| 14004 | | assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6))); |
|---|
| 14005 | | } |
|---|
| 14006 | | |
|---|
| 14007 | | { |
|---|
| 14008 | | auto sysTime = SysTime(Date(1999, 7, 6)); |
|---|
| 14009 | | sysTime.roll!"months"(27, AllowDayOverflow.no); |
|---|
| 14010 | | assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6))); |
|---|
| 14011 | | sysTime.roll!"months"(-28, AllowDayOverflow.no); |
|---|
| 14012 | | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6))); |
|---|
| 14013 | | } |
|---|
| 14014 | | |
|---|
| 14015 | | { |
|---|
| 14016 | | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| 14017 | | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| 14018 | | assertPred!"=="(sysTime, SysTime(Date(1999, 6, 30))); |
|---|
| 14019 | | } |
|---|
| 14020 | | |
|---|
| 14021 | | { |
|---|
| 14022 | | auto sysTime = SysTime(Date(1999, 5, 31)); |
|---|
| 14023 | | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| 14024 | | assertPred!"=="(sysTime, SysTime(Date(1999, 4, 30))); |
|---|
| 14025 | | } |
|---|
| 14026 | | |
|---|
| 14027 | | { |
|---|
| 14028 | | auto sysTime = SysTime(Date(1999, 2, 28)); |
|---|
| 14029 | | sysTime.roll!"months"(12, AllowDayOverflow.no); |
|---|
| 14030 | | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28))); |
|---|
| 14031 | | } |
|---|
| 14032 | | |
|---|
| 14033 | | { |
|---|
| 14034 | | auto sysTime = SysTime(Date(2000, 2, 29)); |
|---|
| 14035 | | sysTime.roll!"months"(12, AllowDayOverflow.no); |
|---|
| 14036 | | assertPred!"=="(sysTime, SysTime(Date(2000, 2, 29))); |
|---|
| 14037 | | } |
|---|
| 14038 | | |
|---|
| 14039 | | { |
|---|
| 14040 | | auto sysTime = SysTime(Date(1999, 7, 31)); |
|---|
| 14041 | | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| 14042 | | assertPred!"=="(sysTime, SysTime(Date(1999, 8, 31))); |
|---|
| 14043 | | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| 14044 | | assertPred!"=="(sysTime, SysTime(Date(1999, 9, 30))); |
|---|
| 14045 | | } |
|---|
| 14046 | | |
|---|
| 14047 | | { |
|---|
| 14048 | | auto sysTime = SysTime(Date(1998, 8, 31)); |
|---|
| 14049 | | sysTime.roll!"months"(13, AllowDayOverflow.no); |
|---|
| 14050 | | assertPred!"=="(sysTime, SysTime(Date(1998, 9, 30))); |
|---|
| 14051 | | sysTime.roll!"months"(-13, AllowDayOverflow.no); |
|---|
| 14052 | | assertPred!"=="(sysTime, SysTime(Date(1998, 8, 30))); |
|---|
| 14053 | | } |
|---|
| 14054 | | |
|---|
| 14055 | | { |
|---|
| 14056 | | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| 14057 | | sysTime.roll!"months"(13, AllowDayOverflow.no); |
|---|
| 14058 | | assertPred!"=="(sysTime, SysTime(Date(1997, 1, 31))); |
|---|
| 14059 | | sysTime.roll!"months"(-13, AllowDayOverflow.no); |
|---|
| 14060 | | assertPred!"=="(sysTime, SysTime(Date(1997, 12, 31))); |
|---|
| 14061 | | } |
|---|
| 14062 | | |
|---|
| 14063 | | { |
|---|
| 14064 | | auto sysTime = SysTime(Date(1997, 12, 31)); |
|---|
| 14065 | | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| 14066 | | assertPred!"=="(sysTime, SysTime(Date(1997, 2, 28))); |
|---|
| 14067 | | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| 14068 | | assertPred!"=="(sysTime, SysTime(Date(1997, 12, 28))); |
|---|
| 14069 | | } |
|---|
| 14070 | | |
|---|
| 14071 | | { |
|---|
| 14072 | | auto sysTime = SysTime(Date(1998, 12, 31)); |
|---|
| 14073 | | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| 14074 | | assertPred!"=="(sysTime, SysTime(Date(1998, 2, 28))); |
|---|
| 14075 | | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| 14076 | | assertPred!"=="(sysTime, SysTime(Date(1998, 12, 28))); |
|---|
| 14077 | | } |
|---|
| 14078 | | |
|---|
| 14079 | | { |
|---|
| 14080 | | auto sysTime = SysTime(Date(1999, 12, 31)); |
|---|
| 14081 | | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| 14082 | | assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28))); |
|---|
| 14083 | | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| 14084 | | assertPred!"=="(sysTime, SysTime(Date(1999, 12, 28))); |
|---|
| 14085 | | } |
|---|
| 14086 | | |
|---|
| 14087 | | { |
|---|
| 14088 | | auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007)); |
|---|
| 14089 | | sysTime.roll!"months"(3, AllowDayOverflow.no); |
|---|
| 14090 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| 14091 | | sysTime.roll!"months"(-4, AllowDayOverflow.no); |
|---|
| 14092 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| 14093 | | } |
|---|
| 14094 | | |
|---|
| 14095 | | { |
|---|
| 14096 | | auto sysTime = SysTime(DateTime(1998, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 14097 | | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| 14098 | | assertPred!"=="(sysTime, SysTime(DateTime(1998, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 14099 | | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| 14100 | | assertPred!"=="(sysTime, SysTime(DateTime(1998, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 14101 | | } |
|---|
| 14102 | | |
|---|
| 14103 | | { |
|---|
| 14104 | | auto sysTime = SysTime(DateTime(1999, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 14105 | | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| 14106 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 14107 | | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| 14108 | | assertPred!"=="(sysTime, SysTime(DateTime(1999, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 14109 | | } |
|---|
| 14110 | | |
|---|
| 14111 | | //Test B.C. |
|---|
| 14112 | | { |
|---|
| 14113 | | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| 14114 | | sysTime.roll!"months"(3, AllowDayOverflow.no); |
|---|
| 14115 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 6))); |
|---|
| 14116 | | sysTime.roll!"months"(-4, AllowDayOverflow.no); |
|---|
| 14117 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 6))); |
|---|
| 14118 | | } |
|---|
| 14119 | | |
|---|
| 14120 | | { |
|---|
| 14121 | | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| 14122 | | sysTime.roll!"months"(6, AllowDayOverflow.no); |
|---|
| 14123 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 1, 6))); |
|---|
| 14124 | | sysTime.roll!"months"(-6, AllowDayOverflow.no); |
|---|
| 14125 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6))); |
|---|
| 14126 | | } |
|---|
| 14127 | | |
|---|
| 14128 | | { |
|---|
| 14129 | | auto sysTime = SysTime(Date(-1999, 7, 6)); |
|---|
| 14130 | | sysTime.roll!"months"(-27, AllowDayOverflow.no); |
|---|
| 14131 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 4, 6))); |
|---|
| 14132 | | sysTime.roll!"months"(28, AllowDayOverflow.no); |
|---|
| 14133 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 6))); |
|---|
| 14134 | | } |
|---|
| 14135 | | |
|---|
| 14136 | | { |
|---|
| 14137 | | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| 14138 | | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| 14139 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 30))); |
|---|
| 14140 | | } |
|---|
| 14141 | | |
|---|
| 14142 | | { |
|---|
| 14143 | | auto sysTime = SysTime(Date(-1999, 5, 31)); |
|---|
| 14144 | | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| 14145 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 4, 30))); |
|---|
| 14146 | | } |
|---|
| 14147 | | |
|---|
| 14148 | | { |
|---|
| 14149 | | auto sysTime = SysTime(Date(-1999, 2, 28)); |
|---|
| 14150 | | sysTime.roll!"months"(-12, AllowDayOverflow.no); |
|---|
| 14151 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 28))); |
|---|
| 14152 | | } |
|---|
| 14153 | | |
|---|
| 14154 | | { |
|---|
| 14155 | | auto sysTime = SysTime(Date(-2000, 2, 29)); |
|---|
| 14156 | | sysTime.roll!"months"(-12, AllowDayOverflow.no); |
|---|
| 14157 | | assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 29))); |
|---|
| 14158 | | } |
|---|
| 14159 | | |
|---|
| 14160 | | { |
|---|
| 14161 | | auto sysTime = SysTime(Date(-1999, 7, 31)); |
|---|
| 14162 | | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| 14163 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 31))); |
|---|
| 14164 | | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| 14165 | | assertPred!"=="(sysTime, SysTime(Date(-1999, 9, 30))); |
|---|
| 14166 | | } |
|---|
| 14167 | | |
|---|
| 14168 | | { |
|---|
| 14169 | | auto sysTime = SysTime(Date(-1998, 8, 31)); |
|---|
| 14170 | | sysTime.roll!"months"(13, AllowDayOverflow.no); |
|---|
| 14171 | | assertPred!"=="(sysTime, SysTime(Date(-1998, 9, 30))); |
|---|
| 14172 | | sysTime.roll!"months"(-13, AllowDayOverflow.no); |
|---|
| 14173 | | assertPred!"=="(sysTime, SysTime(Date(-1998, 8, 30))); |
|---|
| 14174 | | } |
|---|
| 14175 | | |
|---|
| 14176 | | { |
|---|
| 14177 | | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| 14178 | | sysTime.roll!"months"(13, AllowDayOverflow.no); |
|---|
| 14179 | | assertPred!"=="(sysTime, SysTime(Date(-1997, 1, 31))); |
|---|
| 14180 | | sysTime.roll!"months"(-13, AllowDayOverflow.no); |
|---|
| 14181 | | assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 31))); |
|---|
| 14182 | | } |
|---|
| 14183 | | |
|---|
| 14184 | | { |
|---|
| 14185 | | auto sysTime = SysTime(Date(-1997, 12, 31)); |
|---|
| 14186 | | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| 14187 | | assertPred!"=="(sysTime, SysTime(Date(-1997, 2, 28))); |
|---|
| 14188 | | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| 14189 | | assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 28))); |
|---|
| 14190 | | } |
|---|
| 14191 | | |
|---|
| 14192 | | { |
|---|
| 14193 | | auto sysTime = SysTime(Date(-2002, 12, 31)); |
|---|
| 14194 | | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| 14195 | | assertPred!"=="(sysTime, SysTime(Date(-2002, 2, 28))); |
|---|
| 14196 | | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| 14197 | | assertPred!"=="(sysTime, SysTime(Date(-2002, 12, 28))); |
|---|
| 14198 | | } |
|---|
| 14199 | | |
|---|
| 14200 | | { |
|---|
| 14201 | | auto sysTime = SysTime(Date(-2001, 12, 31)); |
|---|
| 14202 | | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| 14203 | | assertPred!"=="(sysTime, SysTime(Date(-2001, 2, 28))); |
|---|
| 14204 | | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| 14205 | | assertPred!"=="(sysTime, SysTime(Date(-2001, 12, 28))); |
|---|
| 14206 | | } |
|---|
| 14207 | | |
|---|
| 14208 | | { |
|---|
| 14209 | | auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007)); |
|---|
| 14210 | | sysTime.roll!"months"(3, AllowDayOverflow.no); |
|---|
| 14211 | | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| 14212 | | sysTime.roll!"months"(-4, AllowDayOverflow.no); |
|---|
| 14213 | | assertPred!"=="(sysTime, SysTime(DateTime(-1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007))); |
|---|
| 14214 | | } |
|---|
| 14215 | | |
|---|
| 14216 | | { |
|---|
| 14217 | | auto sysTime = SysTime(DateTime(-2002, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 14218 | | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| 14219 | | assertPred!"=="(sysTime, SysTime(DateTime(-2002, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 14220 | | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| 14221 | | assertPred!"=="(sysTime, SysTime(DateTime(-2002, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 14222 | | } |
|---|
| 14223 | | |
|---|
| 14224 | | { |
|---|
| 14225 | | auto sysTime = SysTime(DateTime(-2001, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202)); |
|---|
| 14226 | | sysTime.roll!"months"(14, AllowDayOverflow.no); |
|---|
| 14227 | | assertPred!"=="(sysTime, SysTime(DateTime(-2001, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 14228 | | sysTime.roll!"months"(-14, AllowDayOverflow.no); |
|---|
| 14229 | | assertPred!"=="(sysTime, SysTime(DateTime(-2001, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202))); |
|---|
| 14230 | | } |
|---|
| 14231 | | |
|---|
| 14232 | | //Test Both |
|---|
| 14233 | | { |
|---|
| 14234 | | auto sysTime = SysTime(Date(1, 1, 1)); |
|---|
| 14235 | | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| 14236 | | assertPred!"=="(sysTime, SysTime(Date(1, 12, 1))); |
|---|
| 14237 | | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| 14238 | | assertPred!"=="(sysTime, SysTime(Date(1, 1, 1))); |
|---|
| 14239 | | } |
|---|
| 14240 | | |
|---|
| 14241 | | { |
|---|
| 14242 | | auto sysTime = SysTime(Date(4, 1, 1)); |
|---|
| 14243 | | sysTime.roll!"months"(-48, AllowDayOverflow.no); |
|---|
| 14244 | | assertPred!"=="(sysTime, SysTime(Date(4, 1, 1))); |
|---|
| 14245 | | sysTime.roll!"months"(48, AllowDayOverflow.no); |
|---|
| 14246 | | assertPred!"=="(sysTime, SysTime(Date(4, 1, 1))); |
|---|
| 14247 | | } |
|---|
| 14248 | | |
|---|
| 14249 | | { |
|---|
| 14250 | | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| 14251 | | sysTime.roll!"months"(-49, AllowDayOverflow.no); |
|---|
| 14252 | | assertPred!"=="(sysTime, SysTime(Date(4, 2, 29))); |
|---|
| 14253 | | sysTime.roll!"months"(49, AllowDayOverflow.no); |
|---|
| 14254 | | assertPred!"=="(sysTime, SysTime(Date(4, 3, 29))); |
|---|
| 14255 | | } |
|---|
| 14256 | | |
|---|
| 14257 | | { |
|---|
| 14258 | | auto sysTime = SysTime(Date(4, 3, 31)); |
|---|
| 14259 | | sysTime.roll!"months"(-85, AllowDayOverflow.no); |
|---|
| 14260 | | assertPred!"=="(sysTime, SysTime(Date(4, 2, 29))); |
|---|
| 14261 | | sysTime.roll!"months"(85, AllowDayOverflow.no); |
|---|
| 14262 | | assertPred!"=="(sysTime, SysTime(Date(4, 3, 29))); |
|---|
| 14263 | | } |
|---|
| 14264 | | |
|---|
| 14265 | | { |
|---|
| 14266 | | auto sysTime = SysTime(Date(-1, 1, 1)); |
|---|
| 14267 | | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| 14268 | | assertPred!"=="(sysTime, SysTime(Date(-1, 12, 1))); |
|---|
| 14269 | | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| 14270 | | assertPred!"=="(sysTime, SysTime(Date(-1, 1, 1))); |
|---|
| 14271 | | } |
|---|
| 14272 | | |
|---|
| 14273 | | { |
|---|
| 14274 | | auto sysTime = SysTime(Date(-4, 1, 1)); |
|---|
| 14275 | | sysTime.roll!"months"(-48, AllowDayOverflow.no); |
|---|
| 14276 | | assertPred!"=="(sysTime, SysTime(Date(-4, 1, 1))); |
|---|
| 14277 | | sysTime.roll!"months"(48, AllowDayOverflow.no); |
|---|
| 14278 | | assertPred!"=="(sysTime, SysTime(Date(-4, 1, 1))); |
|---|
| 14279 | | } |
|---|
| 14280 | | |
|---|
| 14281 | | { |
|---|
| 14282 | | auto sysTime = SysTime(Date(-4, 3, 31)); |
|---|
| 14283 | | sysTime.roll!"months"(-49, AllowDayOverflow.no); |
|---|
| 14284 | | assertPred!"=="(sysTime, SysTime(Date(-4, 2, 29))); |
|---|
| 14285 | | sysTime.roll!"months"(49, AllowDayOverflow.no); |
|---|
| 14286 | | assertPred!"=="(sysTime, SysTime(Date(-4, 3, 29))); |
|---|
| 14287 | | } |
|---|
| 14288 | | |
|---|
| 14289 | | { |
|---|
| 14290 | | auto sysTime = SysTime(Date(-4, 3, 31)); |
|---|
| 14291 | | sysTime.roll!"months"(-85, AllowDayOverflow.no); |
|---|
| 14292 | | assertPred!"=="(sysTime, SysTime(Date(-4, 2, 29))); |
|---|
| 14293 | | sysTime.roll!"months"(85, AllowDayOverflow.no); |
|---|
| 14294 | | assertPred!"=="(sysTime, SysTime(Date(-4, 3, 29))); |
|---|
| 14295 | | } |
|---|
| 14296 | | |
|---|
| 14297 | | { |
|---|
| 14298 | | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| 14299 | | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| 14300 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 14301 | | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| 14302 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 14303 | | } |
|---|
| 14304 | | |
|---|
| 14305 | | { |
|---|
| 14306 | | auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| 14307 | | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| 14308 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 14309 | | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| 14310 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 14311 | | } |
|---|
| 14312 | | |
|---|
| 14313 | | { |
|---|
| 14314 | | auto sysTime = SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)); |
|---|
| 14315 | | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| 14316 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 14317 | | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| 14318 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0))); |
|---|
| 14319 | | } |
|---|
| 14320 | | |
|---|
| 14321 | | { |
|---|
| 14322 | | auto sysTime = SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)); |
|---|
| 14323 | | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| 14324 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 14325 | | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| 14326 | | assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999))); |
|---|
| 14327 | | } |
|---|
| 14328 | | |
|---|
| 14329 | | { |
|---|
| 14330 | | auto sysTime = SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)); |
|---|
| 14331 | | sysTime.roll!"months"(-1, AllowDayOverflow.no); |
|---|
| 14332 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| 14333 | | sysTime.roll!"months"(1, AllowDayOverflow.no); |
|---|
| 14334 | | assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17))); |
|---|
| 14335 | | } |
|---|
| 14336 | | |
|---|
| 14337 | | { |
|---|
| 14338 | | auto sysTime = SysTime(DateTime(4, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| 14339 | | sysTime.roll!"months"(-85, AllowDayOverflow.no); |
|---|
| 14340 | | assertPred!"=="(sysTime, SysTime(DateTime(4, 2, 29, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 14341 | | sysTime.roll!"months"(85, AllowDayOverflow.no); |
|---|
| 14342 | | assertPred!"=="(sysTime, SysTime(DateTime(4, 3, 29, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 14343 | | } |
|---|
| 14344 | | |
|---|
| 14345 | | { |
|---|
| 14346 | | auto sysTime = SysTime(DateTime(-3, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9)); |
|---|
| 14347 | | sysTime.roll!"months"(85, AllowDayOverflow.no); |
|---|
| 14348 | | assertPred!"=="(sysTime, SysTime(DateTime(-3, 4, 30, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 14349 | | sysTime.roll!"months"(-85, AllowDayOverflow.no); |
|---|
| 14350 | | assertPred!"=="(sysTime, SysTime(DateTime(-3, 3, 30, 12, 11, 10), FracSec.from!"msecs"(9))); |
|---|
| 14351 | | } |
|---|
| 14352 | | } |
|---|
| 14353 | | } |
|---|
| 14354 | | |
|---|
| 14355 | | |
|---|
| 14356 | | /++ |
|---|
| 14357 | | Adds the given number of days to this SysTime. A negative number will |
|---|
| 14358 | | subtract. |
|---|
| 14359 | | |
|---|
| 14360 | | The difference between rolling and adding is that rolling does not affect |
|---|
| 14361 | | larger units. So, if you roll the SysTime one year's worth of days, then |
|---|
| 14362 | | you get the exact same SysTime. |
|---|
| 14363 | | |
|---|
| 14364 | | Note that TimeOfDay has no $(D add!"days"()) function because you can add |
|---|
| 14365 | | days to a SysTime by adding a duration to it. |
|---|
| 14366 | | |
|---|
| 14367 | | Params: |
|---|
| 14368 | | days = The number of days to add to this SysTime. |
|---|
| 14369 | | |
|---|
| 14370 | | Examples: |
|---|
| 14371 | | -------------------- |
|---|
| 14372 | | auto st = SysTime(DateTime(2010, 1, 1, 11, 23, 12)); |
|---|
| 14373 | | st.roll!"days"(1); |
|---|
| 14374 | | assert(st == SysTime(DateTime(2010, 1, 2, 11, 23, 12))); |
|---|
| 14375 | | st.roll!"days"(365); |
|---|
| 14376 | | assert(st == SysTime(DateTime(2010, 1, 26, 11, 23, 12))); |
|---|
| 14377 | | st.roll!"days"(-32); |
|---|
| 14378 | | assert(st == SysTime(DateTime(2010, 1, 25, 11, 23, 12))); |
|---|
| 14379 | | -------------------- |
|---|
| 14380 | | +/ |
|---|
| 14381 | | /+ref SysTime+/ void roll(string units)(long days) nothrow |
|---|
| 14382 | | if(units == "days") |
|---|
| 14383 | | { |
|---|
| 14384 | | auto hnsecs = adjTime; |
|---|
| 14385 | | auto gdays = splitUnitsFromHNSecs!"days"(hnsecs) + 1; |
|---|