/d/phobos2/std/datetime.d
D | 8509 lines | 6008 code | 1083 blank | 1418 comment | 252 complexity | 5de7024b9dda482701bc9e52fc10a811 MD5 | raw file
Possible License(s): GPL-2.0, AGPL-1.0
- //Written in the D programming language
- /++
- Module containing Date/Time functionality.
- This module provides:
- $(UL
- $(LI Types to represent points in time: $(D SysTime), $(D Date),
- $(D TimeOfDay), and $(D DateTime).)
- $(LI Types to represent intervals of time.)
- $(LI Types to represent ranges over intervals of time.)
- $(LI Types to represent time zones (used by $(D SysTime)).)
- $(LI A platform-independent, high precision stopwatch type:
- $(D StopWatch))
- $(LI Benchmarking functions.)
- $(LI Various helper functions.)
- )
- Closely related to std.datetime is <a href="core_time.html">$(D core.time)</a>,
- and some of the time types used in std.datetime come from there - such as
- $(CXREF time, Duration), $(CXREF time, TickDuration), and
- $(CXREF time, FracSec). So, you may want to look at its documentation as
- well. However, core.time is publically imported into std.datetime, so you
- don't have to import it separately.
- Three of the main concepts used in this module are time points, time
- durations, and time intervals.
- A time point is a specific point in time. e.g. January 5th, 2010
- or 5:00.
- A time duration is a length of time with units. e.g. 5 days or 231 seconds.
- A time interval indicates a period of time associated with a fixed point in
- time. So, it is either two time points associated with each other,
- indicating the time starting at the first point up to, but not including,
- the second point - e.g. [January 5th, 2010 - March 10th, 2010$(RPAREN) - or
- it is a time point and a time duration associated with one another. e.g.
- January 5th, 2010 and 5 days, indicating [January 5th, 2010 -
- January 10th, 2010$(RPAREN).
- Various arithmetic operations are supported between time points and
- durations (e.g. the difference between two time points is a time duration),
- and ranges can be gotten from time intervals, so range-based operations may
- be done on a series of time points.
- The types that the typical user is most likely to be interested in are
- $(D Date) (if they want dates but don't care about time), $(D DateTime)
- (if they want dates and times but don't care about time zones), $(D SysTime)
- (if they want the date and time from the OS and/or do care about time
- zones), and StopWatch (a platform-independent, high precision stop watch).
- $(D Date) and $(D DateTime) are optimized for calendar-based operations,
- while $(D SysTime) is designed for dealing with time from the OS. Check out
- their specific documentation for more details.
- To get the current time, use $(D Clock.currTime). It will return the current
- time as a $(D SysTime). If you want to print it, $(D toString) is
- sufficient, but if you use $(D toISOString), $(D toISOExtString), or
- $(D toSimpleString), you can use the corresponding $(D fromISOString),
- $(D fromISOExtString), or $(D fromISOExtString) to create a
- $(D SysTime) from the string.
- --------------------
- auto currentTime = Clock.currTime();
- auto timeString = currentTime.toISOExtString();
- auto restoredTime = SysTime.fromISOExtString(timeString);
- --------------------
- Various functions take a string (or strings) to represent a unit of time
- (e.g. $(D convert!("days", "hours")(numDays))). The valid strings to use
- with such functions are $(D "years"), $(D "months"), $(D "weeks"),
- $(D "days"), $(D "hours"), $(D "minutes"), $(D "seconds"),
- $(D "msecs") (milliseconds), $(D "usecs") (microseconds),
- $(D "hnsecs") (hecto-nanoseconds - i.e. 100 ns), or some subset thereof.
- There are a few functions in core.time which take $(D "nsecs"), but because
- nothing in std.datetime has precision greater than hnsecs, and very little
- in core.time does, no functions in std.datetime accept $(D "nsecs"). If
- you need help remembering which units are abbreviated and which aren't,
- notice that all units seconds and greater use their full names, and all
- sub-second units are abbreviated (since they'd be rather long if they
- weren't).
- If you're looking for the definitions of $(D Duration), $(D TickDuration),
- or $(D FracSec), they're in core.time.
- Note:
- $(D DateTimeException) is an alias for core.time's $(D TimeException),
- so you don't need to worry about core.time functions and std.datetime
- functions throwing different exception types (except in the rare case
- that they throw something other than $(D TimeException) or
- $(D DateTimeException)).
- See_Also:
- $(WEB en.wikipedia.org/wiki/ISO_8601, ISO 8601)
- $(WEB en.wikipedia.org/wiki/Tz_database, Wikipedia entry on TZ Database)
- $(WEB en.wikipedia.org/wiki/List_of_tz_database_time_zones,
- List of Time Zones)
- Copyright: Copyright 2010 - 2011
- License: $(WEB www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
- Authors: Jonathan M Davis and Kato Shoichi
- Source: $(PHOBOSSRC std/_datetime.d)
- +/
- module std.datetime;
- public import core.time;
- import core.exception;
- import core.stdc.time;
- import std.array;
- import std.algorithm;
- import std.ascii;
- import std.conv;
- import std.exception;
- import std.file;
- import std.functional;
- import std.math;
- import std.metastrings;
- import std.path;
- import std.range;
- import std.stdio;
- import std.string;
- import std.system;
- import std.traits;
- import std.typecons;
- version(Windows)
- {
- import core.sys.windows.windows;
- import std.c.windows.winsock;
- //For system call to access the registry.
- pragma(lib, "advapi32.lib");
- }
- else version(Posix)
- {
- import core.sys.posix.arpa.inet;
- import core.sys.posix.stdlib;
- import core.sys.posix.time;
- import core.sys.posix.sys.time;
- //We need to disable many tests because building all of Phobos
- //with all of std.datetime's unit tests enables currently causes
- //dmd to run out of memory.
- //Regardless of that, however, it's also useful to be able to
- //easily turn the tests on and off.
- version = testStdDateTime;
- }
- version(unittest)
- {
- import std.c.string;
- import std.stdio;
- }
- //I'd just alias it to indexOf, but
- //http://d.puremagic.com/issues/show_bug.cgi?id=6013 would mean that that would
- //pollute the global namespace. So, for now, I've created an alias which is
- //highly unlikely to conflict with anything that anyone else is doing.
- private alias std.string.indexOf stds_indexOf;
- //Verify module example.
- version(testStdDateTime) unittest
- {
- auto currentTime = Clock.currTime();
- auto timeString = currentTime.toISOExtString();
- auto restoredTime = SysTime.fromISOExtString(timeString);
- }
- //Verify Examples for core.time.Duration which couldn't be in core.time.
- unittest
- {
- assert(std.datetime.Date(2010, 9, 7) + dur!"days"(5) ==
- std.datetime.Date(2010, 9, 12));
- assert(std.datetime.Date(2010, 9, 7) - std.datetime.Date(2010, 10, 3) ==
- dur!"days"(-26));
- }
- //Note: There various functions which void as their return type and ref of the
- // struct type which they're in as a commented out return type. Ideally,
- // they would return the ref, but there are several dmd bugs which prevent
- // that, relating to both ref and invariants. So, I've left the ref return
- // types commented out with the idea that those functions can be made to
- // return a ref to this once those bugs have been fixed.
- //==============================================================================
- // Section with public enums and constants.
- //==============================================================================
- /++
- Represents the 12 months of the Gregorian year (January is 1).
- +/
- enum Month : ubyte { jan = 1, ///
- feb, ///
- mar, ///
- apr, ///
- may, ///
- jun, ///
- jul, ///
- aug, ///
- sep, ///
- oct, ///
- nov, ///
- dec ///
- }
- /++
- Represents the 7 days of the Gregorian week (Sunday is 0).
- +/
- enum DayOfWeek : ubyte { sun = 0, ///
- mon, ///
- tue, ///
- wed, ///
- thu, ///
- fri, ///
- sat ///
- }
- /++
- In some date calculations, adding months or years can cause the date to fall
- on a day of the month which is not valid (e.g. February 29th 2001 or
- June 31st 2000). If overflow is allowed (as is the default), then the month
- will be incremented accordingly (so, February 29th 2001 would become
- March 1st 2001, and June 31st 2000 would become July 1st 2000). If overflow
- is not allowed, then the day will be adjusted to the last valid day in that
- month (so, February 29th 2001 would become February 28th 2001 and
- June 31st 2000 would become June 30th 2000).
- AllowDayOverflow only applies to calculations involving months or years.
- +/
- enum AllowDayOverflow
- {
- /// No, don't allow day overflow.
- no,
- /// Yes, allow day overflow.
- yes
- }
- /++
- Indicates a direction in time. One example of its use is $(D Interval)'s
- $(D expand) function which uses it to indicate whether the interval should
- be expanded backwards (into the past), forwards (into the future), or both.
- +/
- enum Direction
- {
- /// Backward.
- bwd,
- /// Forward.
- fwd,
- /// Both backward and forward.
- both
- }
- /++
- Used to indicate whether $(D popFront) should be called immediately upon
- creating a range. The idea is that for some functions used to generate a
- range for an interval, $(D front) is not necessarily a time point which
- would ever be generated by the range, and if you want the first time point
- in the range to match what the function generates, then you use
- $(D PopFirst.yes) to indicate that the range should have $(D popFront)
- called on it before the range is returned so that $(D front) is a time point
- which the function would generate.
- For instance, if the function used to generate a range of time points
- generated successive Easters (i.e. you're iterating over all of the Easters
- within the interval), the initial date probably isn't an Easter. By using
- $(D PopFirst.yes), you would be telling the function which returned the
- range that you wanted $(D popFront) to be called so that front would then be
- an Easter - the next one generated by the function (which if you were
- iterating forward, would be the Easter following the original $(D front),
- while if you were iterating backward, it would be the Easter prior to the
- original $(D front)). If $(D PopFirst.no) were used, then $(D front) would
- remain the original time point and it would not necessarily be a time point
- which would be generated by the range-generating function (which in many
- cases is exactly what you
- want - e.g. if you were iterating over every day starting at the beginning
- of the interval).
- +/
- enum PopFirst
- {
- /// No, don't call popFront() before returning the range.
- no,
- /// Yes, call popFront() before returning the range.
- yes
- }
- /++
- Used by StopWatch to indicate whether it should start immediately upon
- construction.
- +/
- enum AutoStart
- {
- /// No, don't start the StopWatch when it is constructed.
- no,
- /// Yes, do start the StopWatch when it is constructed.
- yes
- }
- /++
- Array of the strings representing time units, starting with the smallest
- unit and going to the largest. It does not include $(D "nsecs").
- Includes $(D "hnsecs") (hecto-nanoseconds (100 ns)),
- $(D "usecs") (microseconds), $(D "msecs") (milliseconds), $(D "seconds"),
- $(D "minutes"), $(D "hours"), $(D "days"), $(D "weeks"), $(D "months"), and
- $(D "years")
- +/
- immutable string[] timeStrings = ["hnsecs", "usecs", "msecs", "seconds", "minutes",
- "hours", "days", "weeks", "months", "years"];
- //==============================================================================
- // Section with other types.
- //==============================================================================
- /++
- Exception type used by std.datetime. It's an alias to TimeException, which
- is what core.time uses. So, you can catch either and not worry about which
- module it came from.
- +/
- alias TimeException DateTimeException;
- /++
- Effectively a namespace to make it clear that the methods it contains are
- getting the time from the system clock. It cannot be instantiated.
- +/
- final class Clock
- {
- public:
- /++
- Returns the current time in the given time zone.
- Throws:
- $(D ErrnoException) (on Posix) or $(D Exception) (on Windows)
- if it fails to get the time of day.
- +/
- static SysTime currTime(immutable TimeZone tz = LocalTime())
- {
- return SysTime(currStdTime, tz);
- }
- version(testStdDateTime) unittest
- {
- assert(currTime(UTC()).timezone is UTC());
- //I have no idea why, but for some reason, Windows/Wine likes to get
- //time_t wrong when getting it with core.stdc.time.time. On one box
- //I have (which has its local time set to UTC), it always gives time_t
- //in the real local time (America/Los_Angeles), and after the most recent
- //DST switch, every Windows box that I've tried it in is reporting
- //time_t as being 1 hour off of where it's supposed to be. So, I really
- //don't know what the deal is, but given what I'm seeing, I don't trust
- //core.stdc.time.time on Windows, so I'm just going to disable this test
- //on Windows.
- version(Posix)
- {
- immutable unixTimeD = currTime().toUnixTime();
- immutable unixTimeC = core.stdc.time.time(null);
- immutable diff = unixTimeC - unixTimeD;
- _assertPred!">="(diff, -2);
- _assertPred!"<="(diff, 2);
- }
- }
- /++
- Returns the number of hnsecs since midnight, January 1st, 1 A.D. for the
- current time.
- Throws:
- $(D DateTimeException) if it fails to get the time.
- +/
- @trusted
- static @property long currStdTime()
- {
- version(Windows)
- {
- //FILETIME represents hnsecs from midnight, January 1st, 1601.
- enum hnsecsFrom1601 = 504_911_232_000_000_000L;
- FILETIME fileTime;
- GetSystemTimeAsFileTime(&fileTime);
- ulong tempHNSecs = fileTime.dwHighDateTime;
- tempHNSecs <<= 32;
- tempHNSecs |= fileTime.dwLowDateTime;
- return cast(long)tempHNSecs + hnsecsFrom1601;
- }
- else version(Posix)
- {
- enum hnsecsToUnixEpoch = 621_355_968_000_000_000L;
- static if(is(typeof(clock_gettime)))
- {
- timespec ts;
- if(clock_gettime(CLOCK_REALTIME, &ts) != 0)
- throw new TimeException("Failed in clock_gettime().");
- return convert!("seconds", "hnsecs")(ts.tv_sec) +
- ts.tv_nsec / 100 +
- hnsecsToUnixEpoch;
- }
- else
- {
- timeval tv;
- if(gettimeofday(&tv, null) != 0)
- throw new TimeException("Failed in gettimeofday().");
- return convert!("seconds", "hnsecs")(tv.tv_sec) +
- convert!("usecs", "hnsecs")(tv.tv_usec) +
- hnsecsToUnixEpoch;
- }
- }
- }
- /++
- The current system tick. The number of ticks per second varies from
- system to system. currSystemTick uses a monotonic clock, so it's
- intended for precision timing by comparing relative time values, not
- for getting the current system time.
- Warning:
- On some systems, the monotonic clock may stop counting when
- the computer goes to sleep or hibernates. So, the monotonic
- clock could be off if that occurs. This is known to happen
- on Mac OS X. It has not been tested whether it occurs on
- either Windows or Linux.
- Throws:
- $(D DateTimeException) if it fails to get the time.
- +/
- @safe
- static @property TickDuration currSystemTick()
- {
- return TickDuration.currSystemTick();
- }
- version(testStdDateTime) unittest
- {
- assert(Clock.currSystemTick.length > 0);
- }
- /++
- The current number of system ticks since the application started.
- The number of ticks per second varies from system to system.
- This uses a monotonic clock.
- Warning:
- On some systems, the monotonic clock may stop counting when
- the computer goes to sleep or hibernates. So, the monotonic
- clock could be off if that occurs. This is known to happen
- on Mac OS X. It has not been tested whether it occurs on
- either Windows or on Linux.
- Throws:
- $(D DateTimeException) if it fails to get the time.
- +/
- @safe
- static @property TickDuration currAppTick()
- {
- return currSystemTick - TickDuration.appOrigin;
- }
- version(testStdDateTime) unittest
- {
- auto a = Clock.currSystemTick;
- auto b = Clock.currAppTick;
- assert(a.length);
- assert(b.length);
- assert(a > b);
- }
- private:
- @disable this() {}
- }
- //==============================================================================
- // Section with time points.
- //==============================================================================
- /++
- $(D SysTime) is the type used when you want to get the current time from the
- system or if you're doing anything that involves time zones. Unlike
- $(D DateTime), the time zone is an integral part of $(D SysTime) (though if
- all you care about is local time, you can pretty much ignore time zones, and
- it will work, since it defaults to using the local time zone). It holds its
- internal time in std time (hnsecs since midnight, January 1st, 1 A.D. UTC),
- so it interfaces well with the system time. However, that means that, unlike
- $(D DateTime), it is not optimized for calendar-based operations, and
- getting individual units from it such as years or days is going to involve
- conversions and be less efficient.
- Basically, if you care about calendar-based operations and don't
- necessarily care about time zones, then $(D DateTime) would be the type to
- use. However, if what you care about is the system time, then $(D SysTime)
- would be the type to use.
- $(D Clock.currTime) will return the current time as a $(D SysTime). If you
- want to convert a $(D SysTime) to a $(D Date) or $(D DateTime), simply cast
- it. And if you ever want to convert a $(D Date) or $(D DateTime) to a
- $(D SysTime), use $(D SysTime)'s constructor, and you can pass in the
- intended time zone with it (or don't pass in a $(D TimeZone), and the local
- time zone will be used). Be aware, however, that converting from a
- $(D DateTime) to a $(D SysTime) will not necessarily be 100% accurate due to
- DST (one hour of the year doesn't exist and another occurs twice). So, if
- you don't want to risk any conversion errors, keep your times as
- $(D SysTime)s. Aside from DST though, there shouldn't be any conversion
- problems.
- If you care about using time zones other than local time or UTC, you can use
- $(D PosixTimeZone) on Posix systems (or on Windows, if you provide the TZ
- Database files), and you can use $(D WindowsTimeZone) on Windows systems.
- The time in $(D SysTime) is kept internally in hnsecs from midnight,
- January 1st, 1 A.D. UTC. So, you never get conversion errors when changing
- the time zone of a $(D SysTime). $(D LocalTime) is the $(D TimeZone) class
- which represents the local time, and $(D UTC) is the $(D TimeZone) class
- which represents UTC. $(D SysTime) uses $(D LocalTime) if no $(D TimeZone)
- is provided. For more details on time zones, look at the documentation for
- $(D TimeZone), $(D PosixTimeZone), and $(D WindowsTimeZone).
- $(D SysTime)'s range is from approximately 29,000 B.C. to approximately
- 29,000 A.D.
- +/
- struct SysTime
- {
- public:
- /++
- Params:
- dateTime = The $(D DateTime) to use to set this $(D SysTime)'s
- internal std time. As $(D DateTime) has no concept of
- time zone, tz is used as its time zone.
- tz = The $(D TimeZone) to use for this $(D SysTime). If null,
- $(D LocalTime) will be used. The given $(D DateTime) is
- assumed to be in the given time zone.
- +/
- this(in DateTime dateTime, immutable TimeZone tz = null) nothrow
- {
- try
- this(dateTime, FracSec.from!"hnsecs"(0), tz);
- catch(Exception e)
- assert(0, "FracSec's constructor threw when it shouldn't have.");
- }
- version(testStdDateTime) unittest
- {
- static void test(DateTime dt, immutable TimeZone tz, long expected)
- {
- auto sysTime = SysTime(dt, tz);
- _assertPred!"=="(sysTime._stdTime, expected);
- assert(sysTime._timezone is (tz is null ? LocalTime() : tz),
- format("Given DateTime: %s", dt));
- }
- test(DateTime.init, UTC(), 0);
- test(DateTime(1, 1, 1, 12, 30, 33), UTC(), 450_330_000_000L);
- test(DateTime(0, 12, 31, 12, 30, 33), UTC(), -413_670_000_000L);
- test(DateTime(1, 1, 1, 0, 0, 0), UTC(), 0);
- test(DateTime(1, 1, 1, 0, 0, 1), UTC(), 10_000_000L);
- test(DateTime(0, 12, 31, 23, 59, 59), UTC(), -10_000_000L);
- test(DateTime(1, 1, 1, 0, 0, 0), new SimpleTimeZone(-60),
- 36_000_000_000L);
- test(DateTime(1, 1, 1, 0, 0, 0), new SimpleTimeZone(0), 0);
- test(DateTime(1, 1, 1, 0, 0, 0), new SimpleTimeZone(60),
- -36_000_000_000L);
- }
- /++
- Params:
- dateTime = The $(D DateTime) to use to set this $(D SysTime)'s
- internal std time. As $(D DateTime) has no concept of
- time zone, tz is used as its time zone.
- fracSec = The fractional seconds portion of the time.
- tz = The $(D TimeZone) to use for this $(D SysTime). If null,
- $(D LocalTime) will be used. The given $(D DateTime) is
- assumed to be in the given time zone.
- Throws:
- $(D DateTimeException) if $(D fracSec) is negative.
- +/
- this(in DateTime dateTime, in FracSec fracSec, immutable TimeZone tz = null)
- {
- immutable fracHNSecs = fracSec.hnsecs;
- enforce(fracHNSecs >= 0, new DateTimeException("A SysTime cannot have negative fractional seconds."));
- _timezone = tz is null ? LocalTime() : tz;
- try
- {
- immutable dateDiff = (dateTime.date - Date(1, 1, 1)).total!"hnsecs";
- immutable todDiff = (dateTime.timeOfDay - TimeOfDay(0, 0, 0)).total!"hnsecs";
- immutable adjustedTime = dateDiff + todDiff + fracHNSecs;
- immutable standardTime = _timezone.tzToUTC(adjustedTime);
- this(standardTime, _timezone);
- }
- catch(Exception e)
- {
- assert(0, "Date, TimeOfDay, or DateTime's constructor threw when " ~
- "it shouldn't have.");
- }
- }
- version(testStdDateTime) unittest
- {
- static void test(DateTime dt,
- FracSec fracSec,
- immutable TimeZone tz,
- long expected)
- {
- auto sysTime = SysTime(dt, fracSec, tz);
- _assertPred!"=="(sysTime._stdTime, expected);
- assert(sysTime._timezone is (tz is null ? LocalTime() : tz),
- format("Given DateTime: %s, Given FracSec: %s", dt, fracSec));
- }
- test(DateTime.init, FracSec.init, UTC(), 0);
- test(DateTime(1, 1, 1, 12, 30, 33), FracSec.init, UTC(), 450_330_000_000L);
- test(DateTime(0, 12, 31, 12, 30, 33), FracSec.init, UTC(), -413_670_000_000L);
- test(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"msecs"(1), UTC(), 10_000L);
- test(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"msecs"(999), UTC(), -10_000L);
- test(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC(), -1);
- test(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1), UTC(), -9_999_999);
- test(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0), UTC(), -10_000_000);
- assertThrown!DateTimeException(SysTime(DateTime.init, FracSec.from!"hnsecs"(-1), UTC()));
- }
- /++
- Params:
- date = The $(D Date) to use to set this $(D SysTime)'s internal std
- time. As $(D Date) has no concept of time zone, tz is used as
- its time zone.
- tz = The $(D TimeZone) to use for this $(D SysTime). If null,
- $(D LocalTime) will be used. The given $(D Date) is assumed
- to be in the given time zone.
- +/
- this(in Date date, immutable TimeZone tz = null) nothrow
- {
- _timezone = tz is null ? LocalTime() : tz;
- try
- {
- immutable adjustedTime = (date - Date(1, 1, 1)).total!"hnsecs";
- immutable standardTime = _timezone.tzToUTC(adjustedTime);
- this(standardTime, _timezone);
- }
- catch(Exception e)
- assert(0, "Date's constructor through when it shouldn't have.");
- }
- version(testStdDateTime) unittest
- {
- static void test(Date d, immutable TimeZone tz, long expected)
- {
- auto sysTime = SysTime(d, tz);
- _assertPred!"=="(sysTime._stdTime, expected);
- assert(sysTime._timezone is (tz is null ? LocalTime() : tz),
- format("Given Date: %s", d));
- }
- test(Date.init, UTC(), 0);
- test(Date(1, 1, 1), UTC(), 0);
- test(Date(1, 1, 2), UTC(), 864000000000);
- test(Date(0, 12, 31), UTC(), -864000000000);
- }
- /++
- Note:
- Whereas the other constructors take in the given date/time, assume
- that it's in the given time zone, and convert it to hnsecs in UTC
- since midnight, January 1st, 1 A.D. UTC - i.e. std time - this
- constructor takes a std time, which is specifically already in UTC,
- so no conversion takes place. Of course, the various getter
- properties and functions will use the given time zone's conversion
- function to convert the results to that time zone, but no conversion
- of the arguments to this constructor takes place.
- Params:
- stdTime = The number of hnsecs since midnight, January 1st, 1 A.D. UTC.
- tz = The $(D TimeZone) to use for this $(D SysTime). If null,
- $(D LocalTime) will be used.
- +/
- this(long stdTime, immutable TimeZone tz = null) pure nothrow
- {
- _stdTime = stdTime;
- _timezone = tz is null ? LocalTime() : tz;
- }
- version(testStdDateTime) unittest
- {
- static void test(long stdTime, immutable TimeZone tz)
- {
- auto sysTime = SysTime(stdTime, tz);
- _assertPred!"=="(sysTime._stdTime, stdTime);
- assert(sysTime._timezone is (tz is null ? LocalTime() : tz),
- format("Given stdTime: %s", stdTime));
- }
- foreach(stdTime; [-1234567890L, -250, 0, 250, 1235657390L])
- {
- foreach(tz; testTZs)
- test(stdTime, tz);
- }
- }
- /++
- Params:
- rhs = The $(D SysTime) to assign to this one.
- +/
- ref SysTime opAssign(const ref SysTime rhs) pure nothrow
- {
- _stdTime = rhs._stdTime;
- _timezone = rhs._timezone;
- return this;
- }
- /++
- Params:
- rhs = The $(D SysTime) to assign to this one.
- +/
- ref SysTime opAssign(SysTime rhs) pure nothrow
- {
- _stdTime = rhs._stdTime;
- _timezone = rhs._timezone;
- return this;
- }
- /++
- Checks for equality between this $(D SysTime) and the given
- $(D SysTime).
- Note that the time zone is ignored. Only the internal
- std times (which are in UTC) are compared.
- +/
- bool opEquals(const ref SysTime rhs) const pure nothrow
- {
- return _stdTime == rhs._stdTime;
- }
- version(testStdDateTime) unittest
- {
- _assertPred!"=="(SysTime(DateTime.init, UTC()), SysTime(0, UTC()));
- _assertPred!"=="(SysTime(DateTime.init, UTC()), SysTime(0));
- _assertPred!"=="(SysTime(Date.init, UTC()), SysTime(0));
- _assertPred!"=="(SysTime(0), SysTime(0));
- static void test(DateTime dt,
- immutable TimeZone tz1,
- immutable TimeZone tz2)
- {
- auto st1 = SysTime(dt);
- st1.timezone = tz1;
- auto st2 = SysTime(dt);
- st2.timezone = tz2;
- _assertPred!"=="(st1, st2);
- }
- foreach(tz1; testTZs)
- {
- foreach(tz2; testTZs)
- {
- foreach(dt; chain(testDateTimesBC, testDateTimesAD))
- test(dt, tz1, tz2);
- }
- }
- auto st = SysTime(DateTime(1999, 7, 6, 12, 33, 30));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 33, 30));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 33, 30));
- static assert(__traits(compiles, st == st));
- static assert(__traits(compiles, st == cst));
- //static assert(__traits(compiles, st == ist));
- static assert(__traits(compiles, cst == st));
- static assert(__traits(compiles, cst == cst));
- //static assert(__traits(compiles, cst == ist));
- //static assert(__traits(compiles, ist == st));
- //static assert(__traits(compiles, ist == cst));
- //static assert(__traits(compiles, ist == ist));
- }
- /++
- Compares this $(D SysTime) with the given $(D SysTime).
- Time zone is irrelevant when comparing $(D SysTime)s.
- Returns:
- $(BOOKTABLE,
- $(TR $(TD this < rhs) $(TD < 0))
- $(TR $(TD this == rhs) $(TD 0))
- $(TR $(TD this > rhs) $(TD > 0))
- )
- +/
- int opCmp(in SysTime rhs) const pure nothrow
- {
- if(_stdTime < rhs._stdTime)
- return -1;
- if(_stdTime > rhs._stdTime)
- return 1;
- return 0;
- }
- version(testStdDateTime) unittest
- {
- _assertPred!("opCmp", "==")(SysTime(DateTime.init, UTC()),
- SysTime(0, UTC()));
- _assertPred!("opCmp", "==")(SysTime(DateTime.init, UTC()), SysTime(0));
- _assertPred!("opCmp", "==")(SysTime(Date.init, UTC()), SysTime(0));
- _assertPred!("opCmp", "==")(SysTime(0), SysTime(0));
- static void testEqual(DateTime dt,
- immutable TimeZone tz1,
- immutable TimeZone tz2)
- {
- auto st1 = SysTime(dt);
- st1.timezone = tz1;
- auto st2 = SysTime(dt);
- st2.timezone = tz2;
- _assertPred!("opCmp", "==")(st1, st2);
- }
- foreach(dt; chain(testDateTimesBC, testDateTimesAD))
- {
- foreach(tz1; testTZs)
- {
- foreach(tz2; testTZs)
- testEqual(dt, tz1, tz2);
- }
- }
- static void testCmp(DateTime dt1,
- immutable TimeZone tz1,
- DateTime dt2,
- immutable TimeZone tz2)
- {
- auto st1 = SysTime(dt1);
- st1.timezone = tz1;
- auto st2 = SysTime(dt2);
- st2.timezone = tz2;
- _assertPred!("opCmp", "<")(st1, st2);
- _assertPred!("opCmp", ">")(st2, st1);
- }
- auto dts = testDateTimesBC ~ testDateTimesAD;
- foreach(tz1; testTZs)
- {
- foreach(tz2; testTZs)
- {
- for(size_t i = 0; i < dts.length; ++i)
- {
- for(size_t j = i + 1; j < dts.length; ++j)
- testCmp(dts[i], tz1, dts[j], tz2);
- }
- }
- }
- auto st = SysTime(DateTime(1999, 7, 6, 12, 33, 30));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 33, 30));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 33, 30));
- static assert(__traits(compiles, st.opCmp(st)));
- static assert(__traits(compiles, st.opCmp(cst)));
- //static assert(__traits(compiles, st.opCmp(ist)));
- static assert(__traits(compiles, cst.opCmp(st)));
- static assert(__traits(compiles, cst.opCmp(cst)));
- //static assert(__traits(compiles, cst.opCmp(ist)));
- //static assert(__traits(compiles, ist.opCmp(st)));
- //static assert(__traits(compiles, ist.opCmp(cst)));
- //static assert(__traits(compiles, ist.opCmp(ist)));
- }
- /++
- Year of the Gregorian Calendar. Positive numbers are A.D. Non-positive
- are B.C.
- +/
- @property short year() const nothrow
- {
- return (cast(Date)this).year;
- }
- version(testStdDateTime) unittest
- {
- static void test(SysTime sysTime, long expected, size_t line = __LINE__)
- {
- _assertPred!"=="(sysTime.year, expected,
- format("Value given: %s", sysTime), __FILE__, line);
- }
- test(SysTime(0, UTC()), 1);
- test(SysTime(1, UTC()), 1);
- test(SysTime(-1, UTC()), 0);
- foreach(year; chain(testYearsBC, testYearsAD))
- {
- foreach(md; testMonthDays)
- {
- foreach(tod; testTODs)
- {
- auto dt = DateTime(Date(year, md.month, md.day), tod);
- foreach(tz; testTZs)
- {
- foreach(fs; testFracSecs)
- test(SysTime(dt, fs, tz), year);
- }
- }
- }
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cst.year));
- //static assert(__traits(compiles, ist.year));
- }
- /++
- Year of the Gregorian Calendar. Positive numbers are A.D. Non-positive
- are B.C.
- Params:
- year = The year to set this $(D SysTime)'s year to.
- Throws:
- $(D DateTimeException) if the new year is not a leap year and the
- resulting date would be on February 29th.
- Examples:
- --------------------
- assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).year == 1999);
- assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).year == 2010);
- assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).year == -7);
- --------------------
- +/
- @property void year(int year)
- {
- auto hnsecs = adjTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1;
- if(hnsecs < 0)
- {
- hnsecs += convert!("hours", "hnsecs")(24);
- --days;
- }
- auto date = Date(cast(int)days);
- date.year = year;
- immutable newDaysHNSecs = convert!("days", "hnsecs")(date.dayOfGregorianCal - 1);
- adjTime = newDaysHNSecs + hnsecs;
- }
- //Verify Examples.
- version(testStdDateTime) unittest
- {
- assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).year == 1999);
- assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).year == 2010);
- assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).year == -7);
- }
- version(testStdDateTime) unittest
- {
- static void test(SysTime st, int year, in SysTime expected, size_t line = __LINE__)
- {
- st.year = year;
- _assertPred!"=="(st, expected, "", __FILE__, line);
- }
- foreach(st; chain(testSysTimesBC, testSysTimesAD))
- {
- auto dt = cast(DateTime)st;
- foreach(year; chain(testYearsBC, testYearsAD))
- {
- auto e = SysTime(DateTime(year, dt.month, dt.day, dt.hour, dt.minute, dt.second),
- st.fracSec,
- st.timezone);
- test(st, year, e);
- }
- }
- foreach(fs; testFracSecs)
- {
- foreach(tz; testTZs)
- {
- foreach(tod; testTODs)
- {
- test(SysTime(DateTime(Date(1999, 2, 28), tod), fs, tz), 2000,
- SysTime(DateTime(Date(2000, 2, 28), tod), fs, tz));
- test(SysTime(DateTime(Date(2000, 2, 28), tod), fs, tz), 1999,
- SysTime(DateTime(Date(1999, 2, 28), tod), fs, tz));
- }
- foreach(tod; testTODsThrown)
- {
- auto st = SysTime(DateTime(Date(2000, 2, 29), tod), fs, tz);
- assertThrown!DateTimeException(st.year = 1999);
- }
- }
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.year = 7));
- //static assert(!__traits(compiles, ist.year = 7));
- }
- /++
- Year B.C. of the Gregorian Calendar counting year 0 as 1 B.C.
- Throws:
- $(D DateTimeException) if $(D isAD) is true.
- Examples:
- --------------------
- assert(SysTime(DateTime(0, 1, 1, 12, 30, 33)).yearBC == 1);
- assert(SysTime(DateTime(-1, 1, 1, 10, 7, 2)).yearBC == 2);
- assert(SysTime(DateTime(-100, 1, 1, 4, 59, 0)).yearBC == 101);
- --------------------
- +/
- @property ushort yearBC() const
- {
- return (cast(Date)this).yearBC;
- }
- //Verify Examples.
- version(testStdDateTime) unittest
- {
- assert(SysTime(DateTime(0, 1, 1, 12, 30, 33)).yearBC == 1);
- assert(SysTime(DateTime(-1, 1, 1, 10, 7, 2)).yearBC == 2);
- assert(SysTime(DateTime(-100, 1, 1, 4, 59, 0)).yearBC == 101);
- }
- version(testStdDateTime) unittest
- {
- foreach(st; testSysTimesBC)
- {
- auto msg = format("SysTime: %s", st);
- assertNotThrown!DateTimeException(st.yearBC, msg);
- _assertPred!"=="(st.yearBC, (st.year * -1) + 1, msg);
- }
- foreach(st; [testSysTimesAD[0], testSysTimesAD[$/2], testSysTimesAD[$-1]])
- assertThrown!DateTimeException(st.yearBC, format("SysTime: %s", st));
- auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, st.year = 12));
- static assert(!__traits(compiles, cst.year = 12));
- //static assert(!__traits(compiles, ist.year = 12));
- }
- /++
- Year B.C. of the Gregorian Calendar counting year 0 as 1 B.C.
- Params:
- year = The year B.C. to set this $(D SysTime)'s year to.
- Throws:
- $(D DateTimeException) if a non-positive value is given.
- Examples:
- --------------------
- auto st = SysTime(DateTime(2010, 1, 1, 7, 30, 0));
- st.yearBC = 1;
- assert(st == SysTime(DateTime(0, 1, 1, 7, 30, 0)));
- st.yearBC = 10;
- assert(st == SysTime(DateTime(-9, 1, 1, 7, 30, 0)));
- --------------------
- +/
- @property void yearBC(int year)
- {
- auto hnsecs = adjTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1;
- if(hnsecs < 0)
- {
- hnsecs += convert!("hours", "hnsecs")(24);
- --days;
- }
- auto date = Date(cast(int)days);
- date.yearBC = year;
- immutable newDaysHNSecs = convert!("days", "hnsecs")(date.dayOfGregorianCal - 1);
- adjTime = newDaysHNSecs + hnsecs;
- }
- //Verify Examples
- version(testStdDateTime) unittest
- {
- auto st = SysTime(DateTime(2010, 1, 1, 7, 30, 0));
- st.yearBC = 1;
- assert(st == SysTime(DateTime(0, 1, 1, 7, 30, 0)));
- st.yearBC = 10;
- assert(st == SysTime(DateTime(-9, 1, 1, 7, 30, 0)));
- }
- version(testStdDateTime) unittest
- {
- static void test(SysTime st, int year, in SysTime expected, size_t line = __LINE__)
- {
- st.yearBC = year;
- _assertPred!"=="(st, expected, format("SysTime: %s", st), __FILE__, line);
- }
- foreach(st; chain(testSysTimesBC, testSysTimesAD))
- {
- auto dt = cast(DateTime)st;
- foreach(year; testYearsBC)
- {
- auto e = SysTime(DateTime(year, dt.month, dt.day, dt.hour, dt.minute, dt.second),
- st.fracSec,
- st.timezone);
- test(st, (year * -1) + 1, e);
- }
- }
- foreach(st; [testSysTimesBC[0], testSysTimesBC[$ - 1],
- testSysTimesAD[0], testSysTimesAD[$ - 1]])
- {
- foreach(year; testYearsBC)
- assertThrown!DateTimeException(st.yearBC = year);
- }
- foreach(fs; testFracSecs)
- {
- foreach(tz; testTZs)
- {
- foreach(tod; testTODs)
- {
- test(SysTime(DateTime(Date(-1999, 2, 28), tod), fs, tz), 2001,
- SysTime(DateTime(Date(-2000, 2, 28), tod), fs, tz));
- test(SysTime(DateTime(Date(-2000, 2, 28), tod), fs, tz), 2000,
- SysTime(DateTime(Date(-1999, 2, 28), tod), fs, tz));
- }
- foreach(tod; testTODsThrown)
- {
- auto st = SysTime(DateTime(Date(-2000, 2, 29), tod), fs, tz);
- assertThrown!DateTimeException(st.year = -1999);
- }
- }
- }
- auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, st.yearBC = 12));
- static assert(!__traits(compiles, cst.yearBC = 12));
- //static assert(!__traits(compiles, ist.yearBC = 12));
- }
- /++
- Month of a Gregorian Year.
- Examples:
- --------------------
- assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).month == 7);
- assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).month == 10);
- assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).month == 4);
- --------------------
- +/
- @property Month month() const nothrow
- {
- return (cast(Date)this).month;
- }
- //Verify Examples.
- version(testStdDateTime) unittest
- {
- assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).month == 7);
- assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).month == 10);
- assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).month == 4);
- }
- version(testStdDateTime) unittest
- {
- static void test(SysTime sysTime, Month expected, size_t line = __LINE__)
- {
- _assertPred!"=="(sysTime.month, expected,
- format("Value given: %s", sysTime), __FILE__, line);
- }
- test(SysTime(0, UTC()), Month.jan);
- test(SysTime(1, UTC()), Month.jan);
- test(SysTime(-1, UTC()), Month.dec);
- foreach(year; chain(testYearsBC, testYearsAD))
- {
- foreach(md; testMonthDays)
- {
- foreach(tod; testTODs)
- {
- auto dt = DateTime(Date(year, md.month, md.day), tod);
- foreach(fs; testFracSecs)
- {
- foreach(tz; testTZs)
- test(SysTime(dt, fs, tz), md.month);
- }
- }
- }
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cst.month));
- //static assert(__traits(compiles, ist.month));
- }
- /++
- Month of a Gregorian Year.
- Params:
- month = The month to set this $(D SysTime)'s month to.
- Throws:
- $(D DateTimeException) if the given month is not a valid month.
- +/
- @property void month(Month month)
- {
- auto hnsecs = adjTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1;
- if(hnsecs < 0)
- {
- hnsecs += convert!("hours", "hnsecs")(24);
- --days;
- }
- auto date = Date(cast(int)days);
- date.month = month;
- immutable newDaysHNSecs = convert!("days", "hnsecs")(date.dayOfGregorianCal - 1);
- adjTime = newDaysHNSecs + hnsecs;
- }
- version(testStdDateTime) unittest
- {
- static void test(SysTime st, Month month, in SysTime expected, size_t line = __LINE__)
- {
- st.month = cast(Month)month;
- _assertPred!"=="(st, expected, "", __FILE__, line);
- }
- foreach(st; chain(testSysTimesBC, testSysTimesAD))
- {
- auto dt = cast(DateTime)st;
- foreach(md; testMonthDays)
- {
- if(st.day > maxDay(dt.year, md.month))
- continue;
- auto e = SysTime(DateTime(dt.year, md.month, dt.day, dt.hour, dt.minute, dt.second),
- st.fracSec,
- st.timezone);
- test(st, md.month, e);
- }
- }
- foreach(fs; testFracSecs)
- {
- foreach(tz; testTZs)
- {
- foreach(tod; testTODs)
- {
- foreach(year; filter!((a){return yearIsLeapYear(a);})
- (chain(testYearsBC, testYearsAD)))
- {
- test(SysTime(DateTime(Date(year, 1, 29), tod), fs, tz),
- Month.feb,
- SysTime(DateTime(Date(year, 2, 29), tod), fs, tz));
- }
- foreach(year; chain(testYearsBC, testYearsAD))
- {
- test(SysTime(DateTime(Date(year, 1, 28), tod), fs, tz),
- Month.feb,
- SysTime(DateTime(Date(year, 2, 28), tod), fs, tz));
- test(SysTime(DateTime(Date(year, 7, 30), tod), fs, tz),
- Month.jun,
- SysTime(DateTime(Date(year, 6, 30), tod), fs, tz));
- }
- }
- }
- }
- foreach(fs; [testFracSecs[0], testFracSecs[$-1]])
- {
- foreach(tz; testTZs)
- {
- foreach(tod; testTODsThrown)
- {
- foreach(year; [testYearsBC[$-3], testYearsBC[$-2],
- testYearsBC[$-2], testYearsAD[0],
- testYearsAD[$-2], testYearsAD[$-1]])
- {
- auto day = yearIsLeapYear(year) ? 30 : 29;
- auto st1 = SysTime(DateTime(Date(year, 1, day), tod), fs, tz);
- assertThrown!DateTimeException(st1.month = Month.feb);
- auto st2 = SysTime(DateTime(Date(year, 7, 31), tod), fs, tz);
- assertThrown!DateTimeException(st2.month = Month.jun);
- }
- }
- }
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.month = 12));
- //static assert(!__traits(compiles, ist.month = 12));
- }
- /++
- Day of a Gregorian Month.
- Examples:
- --------------------
- assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).day == 6);
- assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).day == 4);
- assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).day == 5);
- --------------------
- +/
- @property ubyte day() const nothrow
- {
- return (cast(Date)this).day;
- }
- //Verify Examples.
- version(testStdDateTime) unittest
- {
- assert(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).day == 6);
- assert(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).day == 4);
- assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).day == 5);
- }
- version(testStdDateTime) unittest
- {
- static void test(SysTime sysTime, int expected, size_t line = __LINE__)
- {
- _assertPred!"=="(sysTime.day, expected,
- format("Value given: %s", sysTime), __FILE__, line);
- }
- test(SysTime(0, UTC()), 1);
- test(SysTime(1, UTC()), 1);
- test(SysTime(-1, UTC()), 31);
- foreach(year; chain(testYearsBC, testYearsAD))
- {
- foreach(md; testMonthDays)
- {
- foreach(tod; testTODs)
- {
- auto dt = DateTime(Date(year, md.month, md.day), tod);
- foreach(tz; testTZs)
- {
- foreach(fs; testFracSecs)
- test(SysTime(dt, fs, tz), md.day);
- }
- }
- }
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cst.day));
- //static assert(__traits(compiles, ist.day));
- }
- /++
- Day of a Gregorian Month.
- Params:
- day = The day of the month to set this $(D SysTime)'s day to.
- Throws:
- $(D DateTimeException) if the given day is not a valid day of the
- current month.
- +/
- @property void day(int day)
- {
- auto hnsecs = adjTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1;
- if(hnsecs < 0)
- {
- hnsecs += convert!("hours", "hnsecs")(24);
- --days;
- }
- auto date = Date(cast(int)days);
- date.day = day;
- immutable newDaysHNSecs = convert!("days", "hnsecs")(date.dayOfGregorianCal - 1);
- adjTime = newDaysHNSecs + hnsecs;
- }
- version(testStdDateTime) unittest
- {
- static void test(SysTime st, int day, in SysTime expected, size_t line = __LINE__)
- {
- st.day = day;
- _assertPred!"=="(st, expected, "", __FILE__, line);
- }
- foreach(day; chain(testDays))
- {
- foreach(st; chain(testSysTimesBC, testSysTimesAD))
- {
- auto dt = cast(DateTime)st;
- if(day > maxDay(dt.year, dt.month))
- continue;
- auto e = SysTime(DateTime(dt.year, dt.month, day, dt.hour, dt.minute, dt.second),
- st.fracSec,
- st.timezone);
- test(st, day, e);
- }
- }
- foreach(tz; testTZs)
- {
- foreach(tod; testTODs)
- {
- foreach(fs; testFracSecs)
- {
- foreach(year; chain(testYearsBC, testYearsAD))
- {
- foreach(month; EnumMembers!Month)
- {
- auto st = SysTime(DateTime(Date(year, month, 1), tod), fs, tz);
- immutable max = maxDay(year, month);
- test(st, max, SysTime(DateTime(Date(year, month, max), tod), fs, tz));
- }
- }
- }
- }
- }
- foreach(tz; testTZs)
- {
- foreach(tod; testTODsThrown)
- {
- foreach(fs; [testFracSecs[0], testFracSecs[$-1]])
- {
- foreach(year; [testYearsBC[$-3], testYearsBC[$-2],
- testYearsBC[$-2], testYearsAD[0],
- testYearsAD[$-2], testYearsAD[$-1]])
- {
- foreach(month; EnumMembers!Month)
- {
- auto st = SysTime(DateTime(Date(year, month, 1), tod), fs, tz);
- immutable max = maxDay(year, month);
- assertThrown!DateTimeException(st.day = max + 1);
- }
- }
- }
- }
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.day = 27));
- //static assert(!__traits(compiles, ist.day = 27));
- }
- /++
- Hours past midnight.
- +/
- @property ubyte hour() const nothrow
- {
- auto hnsecs = adjTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1;
- if(hnsecs < 0)
- {
- hnsecs += convert!("hours", "hnsecs")(24);
- --days;
- }
- return cast(ubyte)getUnitsFromHNSecs!"hours"(hnsecs);
- }
- version(testStdDateTime) unittest
- {
- static void test(SysTime sysTime, int expected, size_t line = __LINE__)
- {
- _assertPred!"=="(sysTime.hour, expected,
- format("Value given: %s", sysTime), __FILE__, line);
- }
- test(SysTime(0, UTC()), 0);
- test(SysTime(1, UTC()), 0);
- test(SysTime(-1, UTC()), 23);
- foreach(tz; testTZs)
- {
- foreach(year; chain(testYearsBC, testYearsAD))
- {
- foreach(md; testMonthDays)
- {
- foreach(hour; testHours)
- {
- foreach(minute; testMinSecs)
- {
- foreach(second; testMinSecs)
- {
- auto dt = DateTime(Date(year, md.month, md.day),
- TimeOfDay(hour, minute, second));
- foreach(fs; testFracSecs)
- test(SysTime(dt, fs, tz), hour);
- }
- }
- }
- }
- }
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cst.hour));
- //static assert(__traits(compiles, ist.hour));
- }
- /++
- Hours past midnight.
- Params:
- hour = The hours to set this $(D SysTime)'s hour to.
- Throws:
- $(D DateTimeException) if the given hour are not a valid hour of
- the day.
- +/
- @property void hour(int hour)
- {
- enforceValid!"hours"(hour);
- auto hnsecs = adjTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs);
- immutable daysHNSecs = convert!("days", "hnsecs")(days);
- immutable negative = hnsecs < 0;
- if(negative)
- hnsecs += convert!("hours", "hnsecs")(24);
- hnsecs = removeUnitsFromHNSecs!"hours"(hnsecs);
- hnsecs += convert!("hours", "hnsecs")(hour);
- if(negative)
- hnsecs -= convert!("hours", "hnsecs")(24);
- adjTime = daysHNSecs + hnsecs;
- }
- version(testStdDateTime) unittest
- {
- static void test(SysTime st, int hour, in SysTime expected,
- size_t line = __LINE__)
- {
- st.hour = hour;
- _assertPred!"=="(st, expected, "", __FILE__, line);
- }
- foreach(hour; chain(testHours))
- {
- foreach(st; chain(testSysTimesBC, testSysTimesAD))
- {
- auto dt = cast(DateTime)st;
- auto e = SysTime(DateTime(dt.year, dt.month, dt.day, hour, dt.minute, dt.second),
- st.fracSec,
- st.timezone);
- test(st, hour, e);
- }
- }
- auto st = testSysTimesAD[0];
- assertThrown!DateTimeException(st.hour = -1);
- assertThrown!DateTimeException(st.hour = 60);
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.hour = 27));
- //static assert(!__traits(compiles, ist.hour = 27));
- }
- /++
- Minutes past the current hour.
- +/
- @property ubyte minute() const nothrow
- {
- auto hnsecs = adjTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1;
- if(hnsecs < 0)
- {
- hnsecs += convert!("hours", "hnsecs")(24);
- --days;
- }
- hnsecs = removeUnitsFromHNSecs!"hours"(hnsecs);
- return cast(ubyte)getUnitsFromHNSecs!"minutes"(hnsecs);
- }
- version(testStdDateTime) unittest
- {
- static void test(SysTime sysTime, int expected, size_t line = __LINE__)
- {
- _assertPred!"=="(sysTime.minute, expected,
- format("Value given: %s", sysTime), __FILE__, line);
- }
- test(SysTime(0, UTC()), 0);
- test(SysTime(1, UTC()), 0);
- test(SysTime(-1, UTC()), 59);
- foreach(tz; testTZs)
- {
- foreach(year; chain(testYearsBC, testYearsAD))
- {
- foreach(md; testMonthDays)
- {
- foreach(hour; testHours)
- {
- foreach(minute; testMinSecs)
- {
- foreach(second; testMinSecs)
- {
- auto dt = DateTime(Date(year, md.month, md.day),
- TimeOfDay(hour, minute, second));
- foreach(fs; testFracSecs)
- test(SysTime(dt, fs, tz), minute);
- }
- }
- }
- }
- }
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cst.minute));
- //static assert(__traits(compiles, ist.minute));
- }
- /++
- Minutes past the current hour.
- Params:
- minutes = The minute to set this $(D SysTime)'s minute to.
- Throws:
- $(D DateTimeException) if the given minute are not a valid minute
- of an hour.
- +/
- @property void minute(int minute)
- {
- enforceValid!"minutes"(minute);
- auto hnsecs = adjTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs);
- immutable daysHNSecs = convert!("days", "hnsecs")(days);
- immutable negative = hnsecs < 0;
- if(negative)
- hnsecs += convert!("hours", "hnsecs")(24);
- immutable hour = splitUnitsFromHNSecs!"hours"(hnsecs);
- hnsecs = removeUnitsFromHNSecs!"minutes"(hnsecs);
- hnsecs += convert!("hours", "hnsecs")(hour);
- hnsecs += convert!("minutes", "hnsecs")(minute);
- if(negative)
- hnsecs -= convert!("hours", "hnsecs")(24);
- adjTime = daysHNSecs + hnsecs;
- }
- version(testStdDateTime) unittest
- {
- static void test(SysTime st, int minute, in SysTime expected, size_t line = __LINE__)
- {
- st.minute = minute;
- _assertPred!"=="(st, expected, "", __FILE__, line);
- }
- foreach(minute; testMinSecs)
- {
- foreach(st; chain(testSysTimesBC, testSysTimesAD))
- {
- auto dt = cast(DateTime)st;
- auto e = SysTime(DateTime(dt.year, dt.month, dt.day, dt.hour, minute, dt.second),
- st.fracSec,
- st.timezone);
- test(st, minute, e);
- }
- }
- auto st = testSysTimesAD[0];
- assertThrown!DateTimeException(st.minute = -1);
- assertThrown!DateTimeException(st.minute = 60);
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.minute = 27));
- //static assert(!__traits(compiles, ist.minute = 27));
- }
- /++
- Seconds past the current minute.
- +/
- @property ubyte second() const nothrow
- {
- auto hnsecs = adjTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1;
- if(hnsecs < 0)
- {
- hnsecs += convert!("hours", "hnsecs")(24);
- --days;
- }
- hnsecs = removeUnitsFromHNSecs!"hours"(hnsecs);
- hnsecs = removeUnitsFromHNSecs!"minutes"(hnsecs);
- return cast(ubyte)getUnitsFromHNSecs!"seconds"(hnsecs);
- }
- version(testStdDateTime) unittest
- {
- static void test(SysTime sysTime, int expected, size_t line = __LINE__)
- {
- _assertPred!"=="(sysTime.second, expected,
- format("Value given: %s", sysTime), __FILE__, line);
- }
- test(SysTime(0, UTC()), 0);
- test(SysTime(1, UTC()), 0);
- test(SysTime(-1, UTC()), 59);
- foreach(tz; testTZs)
- {
- foreach(year; chain(testYearsBC, testYearsAD))
- {
- foreach(md; testMonthDays)
- {
- foreach(hour; testHours)
- {
- foreach(minute; testMinSecs)
- {
- foreach(second; testMinSecs)
- {
- auto dt = DateTime(Date(year, md.month, md.day),
- TimeOfDay(hour, minute, second));
- foreach(fs; testFracSecs)
- test(SysTime(dt, fs, tz), second);
- }
- }
- }
- }
- }
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cst.second));
- //static assert(__traits(compiles, ist.second));
- }
- /++
- Seconds past the current minute.
- Params:
- second = The second to set this $(D SysTime)'s second to.
- Throws:
- $(D DateTimeException) if the given second are not a valid second
- of a minute.
- +/
- @property void second(int second)
- {
- enforceValid!"seconds"(second);
- auto hnsecs = adjTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs);
- immutable daysHNSecs = convert!("days", "hnsecs")(days);
- immutable negative = hnsecs < 0;
- if(negative)
- hnsecs += convert!("hours", "hnsecs")(24);
- immutable hour = splitUnitsFromHNSecs!"hours"(hnsecs);
- immutable minute = splitUnitsFromHNSecs!"minutes"(hnsecs);
- hnsecs = removeUnitsFromHNSecs!"seconds"(hnsecs);
- hnsecs += convert!("hours", "hnsecs")(hour);
- hnsecs += convert!("minutes", "hnsecs")(minute);
- hnsecs += convert!("seconds", "hnsecs")(second);
- if(negative)
- hnsecs -= convert!("hours", "hnsecs")(24);
- adjTime = daysHNSecs + hnsecs;
- }
- version(testStdDateTime) unittest
- {
- static void test(SysTime st, int second, in SysTime expected,
- size_t line = __LINE__)
- {
- st.second = second;
- _assertPred!"=="(st, expected, "", __FILE__, line);
- }
- foreach(second; testMinSecs)
- {
- foreach(st; chain(testSysTimesBC, testSysTimesAD))
- {
- auto dt = cast(DateTime)st;
- auto e = SysTime(DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute, second),
- st.fracSec,
- st.timezone);
- test(st, second, e);
- }
- }
- auto st = testSysTimesAD[0];
- assertThrown!DateTimeException(st.second = -1);
- assertThrown!DateTimeException(st.second = 60);
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.seconds = 27));
- //static assert(!__traits(compiles, ist.seconds = 27));
- }
- /++
- Fractional seconds passed the second.
- +/
- @property FracSec fracSec() const nothrow
- {
- try
- {
- auto hnsecs = removeUnitsFromHNSecs!"days"(adjTime);
- if(hnsecs < 0)
- hnsecs += convert!("hours", "hnsecs")(24);
- hnsecs = removeUnitsFromHNSecs!"seconds"(hnsecs);
- return FracSec.from!"hnsecs"(cast(int)hnsecs);
- }
- catch(Exception e)
- assert(0, "FracSec.from!\"hnsecs\"() threw.");
- }
- version(testStdDateTime) unittest
- {
- static void test(SysTime sysTime, FracSec expected, size_t line = __LINE__)
- {
- _assertPred!"=="(sysTime.fracSec, expected,
- format("Value given: %s", sysTime), __FILE__, line);
- }
- test(SysTime(0, UTC()), FracSec.from!"hnsecs"(0));
- test(SysTime(1, UTC()), FracSec.from!"hnsecs"(1));
- test(SysTime(-1, UTC()), FracSec.from!"hnsecs"(9_999_999));
- foreach(tz; testTZs)
- {
- foreach(year; chain(testYearsBC, testYearsAD))
- {
- foreach(md; testMonthDays)
- {
- foreach(hour; testHours)
- {
- foreach(minute; testMinSecs)
- {
- foreach(second; testMinSecs)
- {
- auto dt = DateTime(Date(year, md.month, md.day),
- TimeOfDay(hour, minute, second));
- foreach(fs; testFracSecs)
- test(SysTime(dt, fs, tz), fs);
- }
- }
- }
- }
- }
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cst.fracSec));
- //static assert(__traits(compiles, ist.fracSec));
- }
- /++
- Fractional seconds passed the second.
- Params:
- fracSec = The fractional seconds to set this $(D SysTimes)'s
- fractional seconds to.
- Throws:
- $(D DateTimeException) if $(D fracSec) is negative.
- +/
- @property void fracSec(FracSec fracSec)
- {
- immutable fracHNSecs = fracSec.hnsecs;
- enforce(fracHNSecs >= 0, new DateTimeException("A SysTime cannot have negative fractional seconds."));
- auto hnsecs = adjTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs);
- immutable daysHNSecs = convert!("days", "hnsecs")(days);
- immutable negative = hnsecs < 0;
- if(negative)
- hnsecs += convert!("hours", "hnsecs")(24);
- immutable hour = splitUnitsFromHNSecs!"hours"(hnsecs);
- immutable minute = splitUnitsFromHNSecs!"minutes"(hnsecs);
- immutable second = getUnitsFromHNSecs!"seconds"(hnsecs);
- hnsecs = fracHNSecs;
- hnsecs += convert!("hours", "hnsecs")(hour);
- hnsecs += convert!("minutes", "hnsecs")(minute);
- hnsecs += convert!("seconds", "hnsecs")(second);
- if(negative)
- hnsecs -= convert!("hours", "hnsecs")(24);
- adjTime = daysHNSecs + hnsecs;
- }
- version(testStdDateTime) unittest
- {
- static void test(SysTime st, FracSec fracSec, in SysTime expected, size_t line = __LINE__)
- {
- st.fracSec = fracSec;
- _assertPred!"=="(st, expected, "", __FILE__, line);
- }
- foreach(fracSec; testFracSecs)
- {
- foreach(st; chain(testSysTimesBC, testSysTimesAD))
- {
- auto dt = cast(DateTime)st;
- auto e = SysTime(DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second),
- fracSec,
- st.timezone);
- test(st, fracSec, e);
- }
- }
- SysTime st = SysTime(DateTime(2011, 7, 11, 2, 51, 27));
- assertThrown!DateTimeException(st.fracSec = FracSec.from!"hnsecs"(-1));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.fracSec = FracSec.from!"msecs"(7)));
- //static assert(!__traits(compiles, ist.fracSec = FracSec.from!"msecs"(7)));
- }
- /++
- The total hnsecs from midnight, January 1st, 1 A.D. UTC. This is the
- internal representation of $(D SysTime).
- +/
- @property long stdTime() const pure nothrow
- {
- return _stdTime;
- }
- version(testStdDateTime) unittest
- {
- _assertPred!"=="(SysTime(0).stdTime, 0);
- _assertPred!"=="(SysTime(1).stdTime, 1);
- _assertPred!"=="(SysTime(-1).stdTime, -1);
- _assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 33), FracSec.from!"hnsecs"(502), UTC()).stdTime,
- 330000502L);
- _assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), UTC()).stdTime,
- 621355968000000000L);
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cst.stdTime));
- //static assert(__traits(compiles, ist.stdTime));
- }
- /++
- The total hnsecs from midnight, January 1st, 1 A.D. UTC. This is the
- internal representation of $(D SysTime).
- Params:
- stdTime = The number of hnsecs since January 1st, 1 A.D. UTC.
- +/
- @property void stdTime(long stdTime) pure nothrow
- {
- _stdTime = stdTime;
- }
- version(testStdDateTime) unittest
- {
- static void test(long stdTime, in SysTime expected, size_t line = __LINE__)
- {
- auto st = SysTime(0, UTC());
- st.stdTime = stdTime;
- _assertPred!"=="(st, expected);
- }
- test(0, SysTime(Date(1, 1, 1), UTC()));
- test(1, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1), UTC()));
- test(-1, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()));
- test(330_000_502L, SysTime(DateTime(1, 1, 1, 0, 0, 33), FracSec.from!"hnsecs"(502), UTC()));
- test(621_355_968_000_000_000L, SysTime(DateTime(1970, 1, 1, 0, 0, 0), UTC()));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.stdTime = 27));
- //static assert(!__traits(compiles, ist.stdTime = 27));
- }
- /++
- The current time zone of this $(D SysTime). Its internal time is always
- kept in UTC, so there are no conversion issues between time zones due to
- DST. Functions which return all or part of the time - such as hours -
- adjust the time to this $(D SysTime)'s time zone before returning.
- +/
- @property immutable(TimeZone) timezone() const pure nothrow
- {
- return _timezone;
- }
- /++
- The current time zone of this $(D SysTime). It's internal time is always
- kept in UTC, so there are no conversion issues between time zones due to
- DST. Functions which return all or part of the time - such as hours -
- adjust the time to this $(D SysTime)'s time zone before returning.
- Params:
- tz = The $(D TimeZone) to set this $(D SysTime)'s time zone to.
- +/
- @property void timezone(immutable TimeZone timezone) pure nothrow
- {
- if(timezone is null)
- _timezone = LocalTime();
- else
- _timezone = timezone;
- }
- /++
- Returns whether DST is in effect for this $(D SysTime).
- +/
- @property bool dstInEffect() const nothrow
- {
- return _timezone.dstInEffect(_stdTime);
- //This function's unit testing is done in the time zone classes.
- }
- /++
- Returns a $(D SysTime) with the same std time as this one, but with
- $(D LocalTime) as its time zone.
- +/
- SysTime toLocalTime() const nothrow
- {
- return SysTime(_stdTime, LocalTime());
- }
- unittest
- {
- version(testStdDateTime)
- {
- {
- auto sysTime = SysTime(DateTime(1982, 1, 4, 8, 59, 7), FracSec.from!"hnsecs"(27));
- _assertPred!"=="(sysTime, sysTime.toLocalTime());
- _assertPred!"=="(sysTime._stdTime, sysTime.toLocalTime()._stdTime);
- assert(sysTime.toLocalTime().timezone is LocalTime());
- assert(sysTime.toLocalTime().timezone is sysTime.timezone);
- assert(sysTime.toLocalTime().timezone !is UTC());
- }
- {
- immutable stz = new SimpleTimeZone(-3 * 60);
- auto sysTime = SysTime(DateTime(1982, 1, 4, 8, 59, 7), FracSec.from!"hnsecs"(27), stz);
- _assertPred!"=="(sysTime, sysTime.toLocalTime());
- _assertPred!"=="(sysTime._stdTime, sysTime.toLocalTime()._stdTime);
- assert(sysTime.toLocalTime().timezone is LocalTime());
- assert(sysTime.toLocalTime().timezone !is UTC());
- assert(sysTime.toLocalTime().timezone !is stz);
- }
- }
- }
- /++
- Returns a $(D SysTime) with the same std time as this one, but with
- $(D UTC) as its time zone.
- +/
- SysTime toUTC() const pure nothrow
- {
- return SysTime(_stdTime, UTC());
- }
- unittest
- {
- version(testStdDateTime)
- {
- auto sysTime = SysTime(DateTime(1982, 1, 4, 8, 59, 7), FracSec.from!"hnsecs"(27));
- _assertPred!"=="(sysTime, sysTime.toUTC());
- _assertPred!"=="(sysTime._stdTime, sysTime.toUTC()._stdTime);
- assert(sysTime.toUTC().timezone is UTC());
- assert(sysTime.toUTC().timezone !is LocalTime());
- assert(sysTime.toUTC().timezone !is sysTime.timezone);
- }
- }
- /++
- Returns a $(D SysTime) with the same std time as this one, but with
- given time zone as its time zone.
- +/
- SysTime toOtherTZ(immutable TimeZone tz) const pure nothrow
- {
- if(tz is null)
- return SysTime(_stdTime, LocalTime());
- else
- return SysTime(_stdTime, tz);
- }
- unittest
- {
- version(testStdDateTime)
- {
- immutable stz = new SimpleTimeZone(11 * 60);
- auto sysTime = SysTime(DateTime(1982, 1, 4, 8, 59, 7), FracSec.from!"hnsecs"(27));
- _assertPred!"=="(sysTime, sysTime.toOtherTZ(stz));
- _assertPred!"=="(sysTime._stdTime, sysTime.toOtherTZ(stz)._stdTime);
- assert(sysTime.toOtherTZ(stz).timezone is stz);
- assert(sysTime.toOtherTZ(stz).timezone !is LocalTime());
- assert(sysTime.toOtherTZ(stz).timezone !is UTC());
- }
- }
- /++
- Returns a $(D time_t) which represents the same time as this
- $(D SysTime).
- Note that like all conversions in std.datetime, this is a truncating
- conversion.
- If $(D time_t) is 32 bits, rather than 64, and the result can't fit in a
- 32-bit value, then the closest value that can be held in 32 bits will be
- used (so $(D time_t.max) if it goes over and $(D time_t.min) if it goes
- under).
- +/
- time_t toUnixTime() const pure nothrow
- {
- return stdTimeToUnixTime(_stdTime);
- }
- unittest
- {
- version(testStdDateTime)
- {
- _assertPred!"=="(SysTime(DateTime(1970, 1, 1), UTC()).toUnixTime, 0);
- _assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1), UTC()).toUnixTime, 0);
- _assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), FracSec.from!"usecs"(1), UTC()).toUnixTime, 0);
- _assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), FracSec.from!"msecs"(1), UTC()).toUnixTime, 0);
- _assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 1), UTC()).toUnixTime, 1);
- _assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).toUnixTime, 0);
- _assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"usecs"(999_999), UTC()).toUnixTime, 0);
- _assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"msecs"(999), UTC()).toUnixTime, 0);
- _assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), UTC()).toUnixTime, -1);
- }
- }
- /++
- Returns a $(D timeval) which represents this $(D SysTime).
- Note that like all conversions in std.datetime, this is a truncating
- conversion.
- If $(D time_t) is 32 bits, rather than 64, and the result can't fit in a
- 32-bit value, then the closest value that can be held in 32 bits will be
- used for $(D tv_sec). (so $(D time_t.max) if it goes over and
- $(D time_t.min) if it goes under).
- +/
- timeval toTimeVal() const pure nothrow
- {
- immutable tv_sec = toUnixTime();
- immutable fracHNSecs = removeUnitsFromHNSecs!"seconds"(_stdTime - 621355968000000000L);
- immutable tv_usec = cast(int)convert!("hnsecs", "usecs")(fracHNSecs);
- return timeval(tv_sec, tv_usec);
- }
- unittest
- {
- version(testStdDateTime)
- {
- assert(SysTime(DateTime(1970, 1, 1), UTC()).toTimeVal() == timeval(0, 0));
- assert(SysTime(DateTime(1970, 1, 1), FracSec.from!"hnsecs"(9), UTC()).toTimeVal() == timeval(0, 0));
- assert(SysTime(DateTime(1970, 1, 1), FracSec.from!"hnsecs"(10), UTC()).toTimeVal() == timeval(0, 1));
- assert(SysTime(DateTime(1970, 1, 1), FracSec.from!"usecs"(7), UTC()).toTimeVal() == timeval(0, 7));
- assert(SysTime(DateTime(1970, 1, 1, 0, 0, 1), UTC()).toTimeVal() == timeval(1, 0));
- assert(SysTime(DateTime(1970, 1, 1, 0, 0, 1), FracSec.from!"hnsecs"(9), UTC()).toTimeVal() == timeval(1, 0));
- assert(SysTime(DateTime(1970, 1, 1, 0, 0, 1), FracSec.from!"hnsecs"(10), UTC()).toTimeVal() == timeval(1, 1));
- assert(SysTime(DateTime(1970, 1, 1, 0, 0, 1), FracSec.from!"usecs"(7), UTC()).toTimeVal() == timeval(1, 7));
- assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).toTimeVal() ==
- timeval(0, 0));
- assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_990), UTC()).toTimeVal() ==
- timeval(0, -1));
- assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"usecs"(999_999), UTC()).toTimeVal() ==
- timeval(0, -1));
- assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"usecs"(999), UTC()).toTimeVal() ==
- timeval(0, -999_001));
- assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"msecs"(999), UTC()).toTimeVal() ==
- timeval(0, -1000));
- assert(SysTime(DateTime(1969, 12, 31, 23, 59, 59), UTC()).toTimeVal() == timeval(-1, 0));
- assert(SysTime(DateTime(1969, 12, 31, 23, 59, 58), FracSec.from!"usecs"(17), UTC()).toTimeVal() ==
- timeval(-1, -999_983));
- }
- }
- /++
- Returns a $(D tm) which represents this $(D SysTime).
- +/
- tm toTM() const nothrow
- {
- try
- {
- auto dateTime = cast(DateTime)this;
- tm timeInfo;
- timeInfo.tm_sec = dateTime.second;
- timeInfo.tm_min = dateTime.minute;
- timeInfo.tm_hour = dateTime.hour;
- timeInfo.tm_mday = dateTime.day;
- timeInfo.tm_mon = dateTime.month - 1;
- timeInfo.tm_year = dateTime.year - 1900;
- timeInfo.tm_wday = dateTime.dayOfWeek;
- timeInfo.tm_yday = dateTime.dayOfYear - 1;
- timeInfo.tm_isdst = _timezone.dstInEffect(_stdTime);
- version(Posix)
- {
- char[] zone = (timeInfo.tm_isdst ? _timezone.dstName : _timezone.stdName).dup;
- zone ~= "\0";
- timeInfo.tm_gmtoff = cast(int)convert!("hnsecs", "seconds")(adjTime - _stdTime);
- timeInfo.tm_zone = zone.ptr;
- }
- return timeInfo;
- }
- catch(Exception e)
- assert(0, "Either DateTime's constructor threw.");
- }
- unittest
- {
- version(testStdDateTime)
- {
- version(Posix)
- {
- scope(exit) clearTZEnvVar();
- setTZEnvVar("America/Los_Angeles");
- }
- {
- auto timeInfo = SysTime(DateTime(1970, 1, 1)).toTM();
- _assertPred!"=="(timeInfo.tm_sec, 0);
- _assertPred!"=="(timeInfo.tm_min, 0);
- _assertPred!"=="(timeInfo.tm_hour, 0);
- _assertPred!"=="(timeInfo.tm_mday, 1);
- _assertPred!"=="(timeInfo.tm_mon, 0);
- _assertPred!"=="(timeInfo.tm_year, 70);
- _assertPred!"=="(timeInfo.tm_wday, 4);
- _assertPred!"=="(timeInfo.tm_yday, 0);
- version(Posix)
- _assertPred!"=="(timeInfo.tm_isdst, 0);
- else version(Windows)
- assert(timeInfo.tm_isdst == 0 || timeInfo.tm_isdst == 1);
- version(Posix)
- {
- _assertPred!"=="(timeInfo.tm_gmtoff, -8 * 60 * 60);
- _assertPred!"=="(to!string(timeInfo.tm_zone), "PST");
- }
- }
- {
- auto timeInfo = SysTime(DateTime(2010, 7, 4, 12, 15, 7), FracSec.from!"hnsecs"(15)).toTM();
- _assertPred!"=="(timeInfo.tm_sec, 7);
- _assertPred!"=="(timeInfo.tm_min, 15);
- _assertPred!"=="(timeInfo.tm_hour, 12);
- _assertPred!"=="(timeInfo.tm_mday, 4);
- _assertPred!"=="(timeInfo.tm_mon, 6);
- _assertPred!"=="(timeInfo.tm_year, 110);
- _assertPred!"=="(timeInfo.tm_wday, 0);
- _assertPred!"=="(timeInfo.tm_yday, 184);
- version(Posix)
- _assertPred!"=="(timeInfo.tm_isdst, 1);
- else version(Windows)
- assert(timeInfo.tm_isdst == 0 || timeInfo.tm_isdst == 1);
- version(Posix)
- {
- _assertPred!"=="(timeInfo.tm_gmtoff, -7 * 60 * 60);
- _assertPred!"=="(to!string(timeInfo.tm_zone), "PDT");
- }
- }
- }
- }
- /++
- Adds the given number of years or months to this $(D SysTime). A
- negative number will subtract.
- Note that if day overflow is allowed, and the date with the adjusted
- year/month overflows the number of days in the new month, then the month
- will be incremented by one, and the day set to the number of days
- overflowed. (e.g. if the day were 31 and the new month were June, then
- the month would be incremented to July, and the new day would be 1). If
- day overflow is not allowed, then the day will be set to the last valid
- day in the month (e.g. June 31st would become June 30th).
- Params:
- units = The type of units to add ("years" or "months").
- value = The number of months or years to add to this
- $(D SysTime).
- allowOverflow = Whether the days should be allowed to overflow,
- causing the month to increment.
- Examples:
- --------------------
- auto st1 = SysTime(DateTime(2010, 1, 1, 12, 30, 33));
- st1.add!"months"(11);
- assert(st1 == SysTime(DateTime(2010, 12, 1, 12, 30, 33)));
- auto st2 = SysTime(DateTime(2010, 1, 1, 12, 30, 33));
- st2.add!"months"(-11);
- assert(st2 == SysTime(DateTime(2009, 2, 1, 12, 30, 33)));
- auto st3 = SysTime(DateTime(2000, 2, 29, 12, 30, 33));
- st3.add!"years"(1);
- assert(st3 == SysTime(DateTime(2001, 3, 1, 12, 30, 33)));
- auto st4 = SysTime(DateTime(2000, 2, 29, 12, 30, 33));
- st4.add!"years"(1, AllowDayOverflow.no);
- assert(st4 == SysTime(DateTime(2001, 2, 28, 12, 30, 33)));
- --------------------
- +/
- ref SysTime add(string units)(long value, AllowDayOverflow allowOverflow = AllowDayOverflow.yes) nothrow
- if(units == "years" ||
- units == "months")
- {
- auto hnsecs = adjTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1;
- if(hnsecs < 0)
- {
- hnsecs += convert!("hours", "hnsecs")(24);
- --days;
- }
- auto date = Date(cast(int)days);
- date.add!units(value, allowOverflow);
- days = date.dayOfGregorianCal - 1;
- if(days < 0)
- {
- hnsecs -= convert!("hours", "hnsecs")(24);
- ++days;
- }
- immutable newDaysHNSecs = convert!("days", "hnsecs")(days);
- adjTime = newDaysHNSecs + hnsecs;
- return this;
- }
- //Verify Examples.
- unittest
- {
- version (testStdDateTime)
- {
- auto st1 = SysTime(DateTime(2010, 1, 1, 12, 30, 33));
- st1.add!"months"(11);
- assert(st1 == SysTime(DateTime(2010, 12, 1, 12, 30, 33)));
- auto st2 = SysTime(DateTime(2010, 1, 1, 12, 30, 33));
- st2.add!"months"(-11);
- assert(st2 == SysTime(DateTime(2009, 2, 1, 12, 30, 33)));
- auto st3 = SysTime(DateTime(2000, 2, 29, 12, 30, 33));
- st3.add!"years"(1);
- assert(st3 == SysTime(DateTime(2001, 3, 1, 12, 30, 33)));
- auto st4 = SysTime(DateTime(2000, 2, 29, 12, 30, 33));
- st4.add!"years"(1, AllowDayOverflow.no);
- assert(st4 == SysTime(DateTime(2001, 2, 28, 12, 30, 33)));
- }
- }
- //Test add!"years"() with AllowDayOverlow.yes
- unittest
- {
- version(testStdDateTime)
- {
- //Test A.D.
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.add!"years"(7);
- _assertPred!"=="(sysTime, SysTime(Date(2006, 7, 6)));
- sysTime.add!"years"(-9);
- _assertPred!"=="(sysTime, SysTime(Date(1997, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(1999, 2, 28));
- sysTime.add!"years"(1);
- _assertPred!"=="(sysTime, SysTime(Date(2000, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(2000, 2, 29));
- sysTime.add!"years"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 3, 1)));
- }
- {
- auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234));
- sysTime.add!"years"(7);
- _assertPred!"=="(sysTime, SysTime(DateTime(2006, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)));
- sysTime.add!"years"(-9);
- _assertPred!"=="(sysTime, SysTime(DateTime(1997, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)));
- }
- {
- auto sysTime = SysTime(DateTime(1999, 2, 28, 0, 7, 2), FracSec.from!"usecs"(1207));
- sysTime.add!"years"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(2000, 2, 28, 0, 7, 2), FracSec.from!"usecs"(1207)));
- }
- {
- auto sysTime = SysTime(DateTime(2000, 2, 29, 0, 7, 2), FracSec.from!"usecs"(1207));
- sysTime.add!"years"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 3, 1, 0, 7, 2), FracSec.from!"usecs"(1207)));
- }
- //Test B.C.
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.add!"years"(-7);
- _assertPred!"=="(sysTime, SysTime(Date(-2006, 7, 6)));
- sysTime.add!"years"(9);
- _assertPred!"=="(sysTime, SysTime(Date(-1997, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 2, 28));
- sysTime.add!"years"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(-2000, 2, 29));
- sysTime.add!"years"(1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 3, 1)));
- }
- {
- auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234));
- sysTime.add!"years"(-7);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2006, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)));
- sysTime.add!"years"(9);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1997, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)));
- }
- {
- auto sysTime = SysTime(DateTime(-1999, 2, 28, 3, 3, 3), FracSec.from!"hnsecs"(3));
- sysTime.add!"years"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2000, 2, 28, 3, 3, 3), FracSec.from!"hnsecs"(3)));
- }
- {
- auto sysTime = SysTime(DateTime(-2000, 2, 29, 3, 3, 3), FracSec.from!"hnsecs"(3));
- sysTime.add!"years"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 3, 1, 3, 3, 3), FracSec.from!"hnsecs"(3)));
- }
- //Test Both
- {
- auto sysTime = SysTime(Date(4, 7, 6));
- sysTime.add!"years"(-5);
- _assertPred!"=="(sysTime, SysTime(Date(-1, 7, 6)));
- sysTime.add!"years"(5);
- _assertPred!"=="(sysTime, SysTime(Date(4, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(-4, 7, 6));
- sysTime.add!"years"(5);
- _assertPred!"=="(sysTime, SysTime(Date(1, 7, 6)));
- sysTime.add!"years"(-5);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(4, 7, 6));
- sysTime.add!"years"(-8);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6)));
- sysTime.add!"years"(8);
- _assertPred!"=="(sysTime, SysTime(Date(4, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(-4, 7, 6));
- sysTime.add!"years"(8);
- _assertPred!"=="(sysTime, SysTime(Date(4, 7, 6)));
- sysTime.add!"years"(-8);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(-4, 2, 29));
- sysTime.add!"years"(5);
- _assertPred!"=="(sysTime, SysTime(Date(1, 3, 1)));
- }
- {
- auto sysTime = SysTime(Date(4, 2, 29));
- sysTime.add!"years"(-5);
- _assertPred!"=="(sysTime, SysTime(Date(-1, 3, 1)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.add!"years"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.add!"years"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.add!"years"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.add!"years"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.add!"years"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.add!"years"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.add!"years"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.add!"years"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329));
- sysTime.add!"years"(-5);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)));
- sysTime.add!"years"(5);
- _assertPred!"=="(sysTime, SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)));
- }
- {
- auto sysTime = SysTime(DateTime(-4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329));
- sysTime.add!"years"(5);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)));
- sysTime.add!"years"(-5);
- _assertPred!"=="(sysTime, SysTime(DateTime(-4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)));
- }
- {
- auto sysTime = SysTime(DateTime(-4, 2, 29, 5, 5, 5), FracSec.from!"msecs"(555));
- sysTime.add!"years"(5);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 3, 1, 5, 5, 5), FracSec.from!"msecs"(555)));
- }
- {
- auto sysTime = SysTime(DateTime(4, 2, 29, 5, 5, 5), FracSec.from!"msecs"(555));
- sysTime.add!"years"(-5);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1, 3, 1, 5, 5, 5), FracSec.from!"msecs"(555)));
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.add!"years"(4)));
- //static assert(!__traits(compiles, ist.add!"years"(4)));
- }
- }
- //Test add!"years"() with AllowDayOverlow.no
- unittest
- {
- version(testStdDateTime)
- {
- //Test A.D.
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.add!"years"(7, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(2006, 7, 6)));
- sysTime.add!"years"(-9, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1997, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(1999, 2, 28));
- sysTime.add!"years"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(2000, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(2000, 2, 29));
- sysTime.add!"years"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28)));
- }
- {
- auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234));
- sysTime.add!"years"(7, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(2006, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)));
- sysTime.add!"years"(-9, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1997, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)));
- }
- {
- auto sysTime = SysTime(DateTime(1999, 2, 28, 0, 7, 2), FracSec.from!"usecs"(1207));
- sysTime.add!"years"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(2000, 2, 28, 0, 7, 2), FracSec.from!"usecs"(1207)));
- }
- {
- auto sysTime = SysTime(DateTime(2000, 2, 29, 0, 7, 2), FracSec.from!"usecs"(1207));
- sysTime.add!"years"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 2, 28, 0, 7, 2), FracSec.from!"usecs"(1207)));
- }
- //Test B.C.
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.add!"years"(-7, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-2006, 7, 6)));
- sysTime.add!"years"(9, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1997, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 2, 28));
- sysTime.add!"years"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(-2000, 2, 29));
- sysTime.add!"years"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 28)));
- }
- {
- auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234));
- sysTime.add!"years"(-7, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2006, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)));
- sysTime.add!"years"(9, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1997, 7, 6, 12, 7, 3), FracSec.from!"msecs"(234)));
- }
- {
- auto sysTime = SysTime(DateTime(-1999, 2, 28, 3, 3, 3), FracSec.from!"hnsecs"(3));
- sysTime.add!"years"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2000, 2, 28, 3, 3, 3), FracSec.from!"hnsecs"(3)));
- }
- {
- auto sysTime = SysTime(DateTime(-2000, 2, 29, 3, 3, 3), FracSec.from!"hnsecs"(3));
- sysTime.add!"years"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 2, 28, 3, 3, 3), FracSec.from!"hnsecs"(3)));
- }
- //Test Both
- {
- auto sysTime = SysTime(Date(4, 7, 6));
- sysTime.add!"years"(-5, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1, 7, 6)));
- sysTime.add!"years"(5, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(4, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(-4, 7, 6));
- sysTime.add!"years"(5, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1, 7, 6)));
- sysTime.add!"years"(-5, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(4, 7, 6));
- sysTime.add!"years"(-8, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6)));
- sysTime.add!"years"(8, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(4, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(-4, 7, 6));
- sysTime.add!"years"(8, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(4, 7, 6)));
- sysTime.add!"years"(-8, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(-4, 2, 29));
- sysTime.add!"years"(5, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(4, 2, 29));
- sysTime.add!"years"(-5, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1, 2, 28)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.add!"years"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.add!"years"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.add!"years"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.add!"years"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.add!"years"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.add!"years"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.add!"years"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.add!"years"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329));
- sysTime.add!"years"(-5);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)));
- sysTime.add!"years"(5);
- _assertPred!"=="(sysTime, SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)));
- }
- {
- auto sysTime = SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329));
- sysTime.add!"years"(-5, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)));
- sysTime.add!"years"(5, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)));
- }
- {
- auto sysTime = SysTime(DateTime(-4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329));
- sysTime.add!"years"(5, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)));
- sysTime.add!"years"(-5, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-4, 7, 6, 14, 7, 1), FracSec.from!"usecs"(54329)));
- }
- {
- auto sysTime = SysTime(DateTime(-4, 2, 29, 5, 5, 5), FracSec.from!"msecs"(555));
- sysTime.add!"years"(5, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 2, 28, 5, 5, 5), FracSec.from!"msecs"(555)));
- }
- {
- auto sysTime = SysTime(DateTime(4, 2, 29, 5, 5, 5), FracSec.from!"msecs"(555));
- sysTime.add!"years"(-5, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1, 2, 28, 5, 5, 5), FracSec.from!"msecs"(555)));
- }
- }
- }
- //Test add!"months"() with AllowDayOverlow.yes
- unittest
- {
- version(testStdDateTime)
- {
- //Test A.D.
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.add!"months"(3);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6)));
- sysTime.add!"months"(-4);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6)));
- }
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.add!"months"(6);
- _assertPred!"=="(sysTime, SysTime(Date(2000, 1, 6)));
- sysTime.add!"months"(-6);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.add!"months"(27);
- _assertPred!"=="(sysTime, SysTime(Date(2001, 10, 6)));
- sysTime.add!"months"(-28);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6)));
- }
- {
- auto sysTime = SysTime(Date(1999, 5, 31));
- sysTime.add!"months"(1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 1)));
- }
- {
- auto sysTime = SysTime(Date(1999, 5, 31));
- sysTime.add!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 5, 1)));
- }
- {
- auto sysTime = SysTime(Date(1999, 2, 28));
- sysTime.add!"months"(12);
- _assertPred!"=="(sysTime, SysTime(Date(2000, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(2000, 2, 29));
- sysTime.add!"months"(12);
- _assertPred!"=="(sysTime, SysTime(Date(2001, 3, 1)));
- }
- {
- auto sysTime = SysTime(Date(1999, 7, 31));
- sysTime.add!"months"(1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 8, 31)));
- sysTime.add!"months"(1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 10, 1)));
- }
- {
- auto sysTime = SysTime(Date(1998, 8, 31));
- sysTime.add!"months"(13);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 10, 1)));
- sysTime.add!"months"(-13);
- _assertPred!"=="(sysTime, SysTime(Date(1998, 9, 1)));
- }
- {
- auto sysTime = SysTime(Date(1997, 12, 31));
- sysTime.add!"months"(13);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 1, 31)));
- sysTime.add!"months"(-13);
- _assertPred!"=="(sysTime, SysTime(Date(1997, 12, 31)));
- }
- {
- auto sysTime = SysTime(Date(1997, 12, 31));
- sysTime.add!"months"(14);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 3, 3)));
- sysTime.add!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(Date(1998, 1, 3)));
- }
- {
- auto sysTime = SysTime(Date(1998, 12, 31));
- sysTime.add!"months"(14);
- _assertPred!"=="(sysTime, SysTime(Date(2000, 3, 2)));
- sysTime.add!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 1, 2)));
- }
- {
- auto sysTime = SysTime(Date(1999, 12, 31));
- sysTime.add!"months"(14);
- _assertPred!"=="(sysTime, SysTime(Date(2001, 3, 3)));
- sysTime.add!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(Date(2000, 1, 3)));
- }
- {
- auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007));
- sysTime.add!"months"(3);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007)));
- sysTime.add!"months"(-4);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007)));
- }
- {
- auto sysTime = SysTime(DateTime(1998, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.add!"months"(14);
- _assertPred!"=="(sysTime, SysTime(DateTime(2000, 3, 2, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.add!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 1, 2, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- {
- auto sysTime = SysTime(DateTime(1999, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.add!"months"(14);
- _assertPred!"=="(sysTime, SysTime(DateTime(2001, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.add!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(DateTime(2000, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- //Test B.C.
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.add!"months"(3);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 6)));
- sysTime.add!"months"(-4);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 6)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.add!"months"(6);
- _assertPred!"=="(sysTime, SysTime(Date(-1998, 1, 6)));
- sysTime.add!"months"(-6);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.add!"months"(-27);
- _assertPred!"=="(sysTime, SysTime(Date(-2001, 4, 6)));
- sysTime.add!"months"(28);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 6)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 5, 31));
- sysTime.add!"months"(1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 1)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 5, 31));
- sysTime.add!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 5, 1)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 2, 28));
- sysTime.add!"months"(-12);
- _assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(-2000, 2, 29));
- sysTime.add!"months"(-12);
- _assertPred!"=="(sysTime, SysTime(Date(-2001, 3, 1)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 7, 31));
- sysTime.add!"months"(1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 31)));
- sysTime.add!"months"(1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 1)));
- }
- {
- auto sysTime = SysTime(Date(-1998, 8, 31));
- sysTime.add!"months"(13);
- _assertPred!"=="(sysTime, SysTime(Date(-1997, 10, 1)));
- sysTime.add!"months"(-13);
- _assertPred!"=="(sysTime, SysTime(Date(-1998, 9, 1)));
- }
- {
- auto sysTime = SysTime(Date(-1997, 12, 31));
- sysTime.add!"months"(13);
- _assertPred!"=="(sysTime, SysTime(Date(-1995, 1, 31)));
- sysTime.add!"months"(-13);
- _assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 31)));
- }
- {
- auto sysTime = SysTime(Date(-1997, 12, 31));
- sysTime.add!"months"(14);
- _assertPred!"=="(sysTime, SysTime(Date(-1995, 3, 3)));
- sysTime.add!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(Date(-1996, 1, 3)));
- }
- {
- auto sysTime = SysTime(Date(-2002, 12, 31));
- sysTime.add!"months"(14);
- _assertPred!"=="(sysTime, SysTime(Date(-2000, 3, 2)));
- sysTime.add!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(Date(-2001, 1, 2)));
- }
- {
- auto sysTime = SysTime(Date(-2001, 12, 31));
- sysTime.add!"months"(14);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 3, 3)));
- sysTime.add!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(Date(-2000, 1, 3)));
- }
- {
- auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007));
- sysTime.add!"months"(3);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007)));
- sysTime.add!"months"(-4);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007)));
- }
- {
- auto sysTime = SysTime(DateTime(-2002, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.add!"months"(14);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2000, 3, 2, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.add!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2001, 1, 2, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- {
- auto sysTime = SysTime(DateTime(-2001, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.add!"months"(14);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.add!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2000, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- //Test Both
- {
- auto sysTime = SysTime(Date(1, 1, 1));
- sysTime.add!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(0, 12, 1)));
- sysTime.add!"months"(1);
- _assertPred!"=="(sysTime, SysTime(Date(1, 1, 1)));
- }
- {
- auto sysTime = SysTime(Date(4, 1, 1));
- sysTime.add!"months"(-48);
- _assertPred!"=="(sysTime, SysTime(Date(0, 1, 1)));
- sysTime.add!"months"(48);
- _assertPred!"=="(sysTime, SysTime(Date(4, 1, 1)));
- }
- {
- auto sysTime = SysTime(Date(4, 3, 31));
- sysTime.add!"months"(-49);
- _assertPred!"=="(sysTime, SysTime(Date(0, 3, 2)));
- sysTime.add!"months"(49);
- _assertPred!"=="(sysTime, SysTime(Date(4, 4, 2)));
- }
- {
- auto sysTime = SysTime(Date(4, 3, 31));
- sysTime.add!"months"(-85);
- _assertPred!"=="(sysTime, SysTime(Date(-3, 3, 3)));
- sysTime.add!"months"(85);
- _assertPred!"=="(sysTime, SysTime(Date(4, 4, 3)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.add!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.add!"months"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.add!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.add!"months"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.add!"months"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.add!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.add!"months"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.add!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17));
- sysTime.add!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)));
- sysTime.add!"months"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)));
- }
- {
- auto sysTime = SysTime(DateTime(4, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9));
- sysTime.add!"months"(-85);
- _assertPred!"=="(sysTime, SysTime(DateTime(-3, 3, 3, 12, 11, 10), FracSec.from!"msecs"(9)));
- sysTime.add!"months"(85);
- _assertPred!"=="(sysTime, SysTime(DateTime(4, 4, 3, 12, 11, 10), FracSec.from!"msecs"(9)));
- }
- {
- auto sysTime = SysTime(DateTime(-3, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9));
- sysTime.add!"months"(85);
- _assertPred!"=="(sysTime, SysTime(DateTime(4, 5, 1, 12, 11, 10), FracSec.from!"msecs"(9)));
- sysTime.add!"months"(-85);
- _assertPred!"=="(sysTime, SysTime(DateTime(-3, 4, 1, 12, 11, 10), FracSec.from!"msecs"(9)));
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.add!"months"(4)));
- //static assert(!__traits(compiles, ist.add!"months"(4)));
- }
- }
- //Test add!"months"() with AllowDayOverlow.no
- unittest
- {
- version(testStdDateTime)
- {
- //Test A.D.
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.add!"months"(3, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6)));
- sysTime.add!"months"(-4, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6)));
- }
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.add!"months"(6, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(2000, 1, 6)));
- sysTime.add!"months"(-6, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.add!"months"(27, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(2001, 10, 6)));
- sysTime.add!"months"(-28, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6)));
- }
- {
- auto sysTime = SysTime(Date(1999, 5, 31));
- sysTime.add!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 6, 30)));
- }
- {
- auto sysTime = SysTime(Date(1999, 5, 31));
- sysTime.add!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 4, 30)));
- }
- {
- auto sysTime = SysTime(Date(1999, 2, 28));
- sysTime.add!"months"(12, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(2000, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(2000, 2, 29));
- sysTime.add!"months"(12, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(2001, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(1999, 7, 31));
- sysTime.add!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 8, 31)));
- sysTime.add!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 9, 30)));
- }
- {
- auto sysTime = SysTime(Date(1998, 8, 31));
- sysTime.add!"months"(13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 9, 30)));
- sysTime.add!"months"(-13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1998, 8, 30)));
- }
- {
- auto sysTime = SysTime(Date(1997, 12, 31));
- sysTime.add!"months"(13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 1, 31)));
- sysTime.add!"months"(-13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1997, 12, 31)));
- }
- {
- auto sysTime = SysTime(Date(1997, 12, 31));
- sysTime.add!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28)));
- sysTime.add!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1997, 12, 28)));
- }
- {
- auto sysTime = SysTime(Date(1998, 12, 31));
- sysTime.add!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(2000, 2, 29)));
- sysTime.add!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1998, 12, 29)));
- }
- {
- auto sysTime = SysTime(Date(1999, 12, 31));
- sysTime.add!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(2001, 2, 28)));
- sysTime.add!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 12, 28)));
- }
- {
- auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007));
- sysTime.add!"months"(3, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007)));
- sysTime.add!"months"(-4, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007)));
- }
- {
- auto sysTime = SysTime(DateTime(1998, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.add!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(2000, 2, 29, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.add!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1998, 12, 29, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- {
- auto sysTime = SysTime(DateTime(1999, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.add!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(2001, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.add!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- //Test B.C.
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.add!"months"(3, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 6)));
- sysTime.add!"months"(-4, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 6)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.add!"months"(6, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1998, 1, 6)));
- sysTime.add!"months"(-6, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.add!"months"(-27, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-2001, 4, 6)));
- sysTime.add!"months"(28, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 6)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 5, 31));
- sysTime.add!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 30)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 5, 31));
- sysTime.add!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 4, 30)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 2, 28));
- sysTime.add!"months"(-12, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(-2000, 2, 29));
- sysTime.add!"months"(-12, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-2001, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 7, 31));
- sysTime.add!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 31)));
- sysTime.add!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 9, 30)));
- }
- {
- auto sysTime = SysTime(Date(-1998, 8, 31));
- sysTime.add!"months"(13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1997, 9, 30)));
- sysTime.add!"months"(-13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1998, 8, 30)));
- }
- {
- auto sysTime = SysTime(Date(-1997, 12, 31));
- sysTime.add!"months"(13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1995, 1, 31)));
- sysTime.add!"months"(-13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 31)));
- }
- {
- auto sysTime = SysTime(Date(-1997, 12, 31));
- sysTime.add!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1995, 2, 28)));
- sysTime.add!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 28)));
- }
- {
- auto sysTime = SysTime(Date(-2002, 12, 31));
- sysTime.add!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 29)));
- sysTime.add!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-2002, 12, 29)));
- }
- {
- auto sysTime = SysTime(Date(-2001, 12, 31));
- sysTime.add!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 28)));
- sysTime.add!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-2001, 12, 28)));
- }
- {
- auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007));
- sysTime.add!"months"(3, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007)));
- sysTime.add!"months"(-4, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007)));
- }
- {
- auto sysTime = SysTime(DateTime(-2002, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.add!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2000, 2, 29, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.add!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2002, 12, 29, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- {
- auto sysTime = SysTime(DateTime(-2001, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.add!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.add!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2001, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- //Test Both
- {
- auto sysTime = SysTime(Date(1, 1, 1));
- sysTime.add!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(0, 12, 1)));
- sysTime.add!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1, 1, 1)));
- }
- {
- auto sysTime = SysTime(Date(4, 1, 1));
- sysTime.add!"months"(-48, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(0, 1, 1)));
- sysTime.add!"months"(48, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(4, 1, 1)));
- }
- {
- auto sysTime = SysTime(Date(4, 3, 31));
- sysTime.add!"months"(-49, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(0, 2, 29)));
- sysTime.add!"months"(49, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(4, 3, 29)));
- }
- {
- auto sysTime = SysTime(Date(4, 3, 31));
- sysTime.add!"months"(-85, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-3, 2, 28)));
- sysTime.add!"months"(85, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(4, 3, 28)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.add!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.add!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.add!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.add!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.add!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.add!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.add!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.add!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17));
- sysTime.add!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)));
- sysTime.add!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)));
- }
- {
- auto sysTime = SysTime(DateTime(4, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9));
- sysTime.add!"months"(-85, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-3, 2, 28, 12, 11, 10), FracSec.from!"msecs"(9)));
- sysTime.add!"months"(85, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(4, 3, 28, 12, 11, 10), FracSec.from!"msecs"(9)));
- }
- {
- auto sysTime = SysTime(DateTime(-3, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9));
- sysTime.add!"months"(85, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(4, 4, 30, 12, 11, 10), FracSec.from!"msecs"(9)));
- sysTime.add!"months"(-85, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-3, 3, 30, 12, 11, 10), FracSec.from!"msecs"(9)));
- }
- }
- }
- /++
- Adds the given number of years or months to this $(D SysTime). A
- negative number will subtract.
- The difference between rolling and adding is that rolling does not
- affect larger units. So, if you roll a $(D SysTime) 12 months, you
- get the exact same $(D SysTime). However, the days can still be affected
- due to the differing number of days in each month.
- Because there are no units larger than years, there is no difference
- between adding and rolling years.
- Params:
- units = The type of units to add ("years" or "months").
- value = The number of months or years to add to this
- $(D SysTime).
- allowOverflow = Whether the days should be allowed to overflow,
- causing the month to increment.
- Examples:
- --------------------
- auto st1 = SysTime(DateTime(2010, 1, 1, 12, 33, 33));
- st1.roll!"months"(1);
- assert(st1 == SysTime(DateTime(2010, 2, 1, 12, 33, 33)));
- auto st2 = SysTime(DateTime(2010, 1, 1, 12, 33, 33));
- st2.roll!"months"(-1);
- assert(st2 == SysTime(DateTime(2010, 12, 1, 12, 33, 33)));
- auto st3 = SysTime(DateTime(1999, 1, 29, 12, 33, 33));
- st3.roll!"months"(1);
- assert(st3 == SysTime(DateTime(1999, 3, 1, 12, 33, 33)));
- auto st4 = SysTime(DateTime(1999, 1, 29, 12, 33, 33));
- st4.roll!"months"(1, AllowDayOverflow.no);
- assert(st4 == SysTime(DateTime(1999, 2, 28, 12, 33, 33)));
- auto st5 = SysTime(DateTime(2000, 2, 29, 12, 30, 33));
- st5.roll!"years"(1);
- assert(st5 == SysTime(DateTime(2001, 3, 1, 12, 30, 33)));
- auto st6 = SysTime(DateTime(2000, 2, 29, 12, 30, 33));
- st6.roll!"years"(1, AllowDayOverflow.no);
- assert(st6 == SysTime(DateTime(2001, 2, 28, 12, 30, 33)));
- --------------------
- +/
- /+ref SysTime+/ void roll(string units)(long value, AllowDayOverflow allowOverflow = AllowDayOverflow.yes) nothrow
- if(units == "years")
- {
- add!"years"(value, allowOverflow);
- }
- unittest
- {
- version(testStdDateTime)
- {
- //Verify Examples.
- auto st1 = SysTime(DateTime(2010, 1, 1, 12, 33, 33));
- st1.roll!"months"(1);
- assert(st1 == SysTime(DateTime(2010, 2, 1, 12, 33, 33)));
- auto st2 = SysTime(DateTime(2010, 1, 1, 12, 33, 33));
- st2.roll!"months"(-1);
- assert(st2 == SysTime(DateTime(2010, 12, 1, 12, 33, 33)));
- auto st3 = SysTime(DateTime(1999, 1, 29, 12, 33, 33));
- st3.roll!"months"(1);
- assert(st3 == SysTime(DateTime(1999, 3, 1, 12, 33, 33)));
- auto st4 = SysTime(DateTime(1999, 1, 29, 12, 33, 33));
- st4.roll!"months"(1, AllowDayOverflow.no);
- assert(st4 == SysTime(DateTime(1999, 2, 28, 12, 33, 33)));
- auto st5 = SysTime(DateTime(2000, 2, 29, 12, 30, 33));
- st5.roll!"years"(1);
- assert(st5 == SysTime(DateTime(2001, 3, 1, 12, 30, 33)));
- auto st6 = SysTime(DateTime(2000, 2, 29, 12, 30, 33));
- st6.roll!"years"(1, AllowDayOverflow.no);
- assert(st6 == SysTime(DateTime(2001, 2, 28, 12, 30, 33)));
- }
- }
- unittest
- {
- version(testStdDateTime)
- {
- auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, st.roll!"years"(4)));
- static assert(!__traits(compiles, cst.roll!"years"(4)));
- //static assert(!__traits(compiles, ist.roll!"years"(4)));
- }
- }
- //Shares documentation with "years" version.
- /+ref SysTime+/ void roll(string units)(long value, AllowDayOverflow allowOverflow = AllowDayOverflow.yes) nothrow
- if(units == "months")
- {
- auto hnsecs = adjTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1;
- if(hnsecs < 0)
- {
- hnsecs += convert!("hours", "hnsecs")(24);
- --days;
- }
- auto date = Date(cast(int)days);
- date.roll!"months"(value, allowOverflow);
- days = date.dayOfGregorianCal - 1;
- if(days < 0)
- {
- hnsecs -= convert!("hours", "hnsecs")(24);
- ++days;
- }
- immutable newDaysHNSecs = convert!("days", "hnsecs")(days);
- adjTime = newDaysHNSecs + hnsecs;
- }
- //Test roll!"months"() with AllowDayOverlow.yes
- unittest
- {
- version(testStdDateTime)
- {
- //Test A.D.
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.roll!"months"(3);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6)));
- sysTime.roll!"months"(-4);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6)));
- }
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.roll!"months"(6);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 1, 6)));
- sysTime.roll!"months"(-6);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.roll!"months"(27);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6)));
- sysTime.roll!"months"(-28);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6)));
- }
- {
- auto sysTime = SysTime(Date(1999, 5, 31));
- sysTime.roll!"months"(1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 1)));
- }
- {
- auto sysTime = SysTime(Date(1999, 5, 31));
- sysTime.roll!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 5, 1)));
- }
- {
- auto sysTime = SysTime(Date(1999, 2, 28));
- sysTime.roll!"months"(12);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(2000, 2, 29));
- sysTime.roll!"months"(12);
- _assertPred!"=="(sysTime, SysTime(Date(2000, 2, 29)));
- }
- {
- auto sysTime = SysTime(Date(1999, 7, 31));
- sysTime.roll!"months"(1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 8, 31)));
- sysTime.roll!"months"(1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 10, 1)));
- }
- {
- auto sysTime = SysTime(Date(1998, 8, 31));
- sysTime.roll!"months"(13);
- _assertPred!"=="(sysTime, SysTime(Date(1998, 10, 1)));
- sysTime.roll!"months"(-13);
- _assertPred!"=="(sysTime, SysTime(Date(1998, 9, 1)));
- }
- {
- auto sysTime = SysTime(Date(1997, 12, 31));
- sysTime.roll!"months"(13);
- _assertPred!"=="(sysTime, SysTime(Date(1997, 1, 31)));
- sysTime.roll!"months"(-13);
- _assertPred!"=="(sysTime, SysTime(Date(1997, 12, 31)));
- }
- {
- auto sysTime = SysTime(Date(1997, 12, 31));
- sysTime.roll!"months"(14);
- _assertPred!"=="(sysTime, SysTime(Date(1997, 3, 3)));
- sysTime.roll!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(Date(1997, 1, 3)));
- }
- {
- auto sysTime = SysTime(Date(1998, 12, 31));
- sysTime.roll!"months"(14);
- _assertPred!"=="(sysTime, SysTime(Date(1998, 3, 3)));
- sysTime.roll!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(Date(1998, 1, 3)));
- }
- {
- auto sysTime = SysTime(Date(1999, 12, 31));
- sysTime.roll!"months"(14);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 3, 3)));
- sysTime.roll!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 1, 3)));
- }
- {
- auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007));
- sysTime.roll!"months"(3);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007)));
- sysTime.roll!"months"(-4);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007)));
- }
- {
- auto sysTime = SysTime(DateTime(1998, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.roll!"months"(14);
- _assertPred!"=="(sysTime, SysTime(DateTime(1998, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.roll!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(DateTime(1998, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- {
- auto sysTime = SysTime(DateTime(1999, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.roll!"months"(14);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.roll!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- //Test B.C.
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.roll!"months"(3);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 6)));
- sysTime.roll!"months"(-4);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 6)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.roll!"months"(6);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 1, 6)));
- sysTime.roll!"months"(-6);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.roll!"months"(-27);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 4, 6)));
- sysTime.roll!"months"(28);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 6)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 5, 31));
- sysTime.roll!"months"(1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 1)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 5, 31));
- sysTime.roll!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 5, 1)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 2, 28));
- sysTime.roll!"months"(-12);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(-2000, 2, 29));
- sysTime.roll!"months"(-12);
- _assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 29)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 7, 31));
- sysTime.roll!"months"(1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 31)));
- sysTime.roll!"months"(1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 1)));
- }
- {
- auto sysTime = SysTime(Date(-1998, 8, 31));
- sysTime.roll!"months"(13);
- _assertPred!"=="(sysTime, SysTime(Date(-1998, 10, 1)));
- sysTime.roll!"months"(-13);
- _assertPred!"=="(sysTime, SysTime(Date(-1998, 9, 1)));
- }
- {
- auto sysTime = SysTime(Date(-1997, 12, 31));
- sysTime.roll!"months"(13);
- _assertPred!"=="(sysTime, SysTime(Date(-1997, 1, 31)));
- sysTime.roll!"months"(-13);
- _assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 31)));
- }
- {
- auto sysTime = SysTime(Date(-1997, 12, 31));
- sysTime.roll!"months"(14);
- _assertPred!"=="(sysTime, SysTime(Date(-1997, 3, 3)));
- sysTime.roll!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(Date(-1997, 1, 3)));
- }
- {
- auto sysTime = SysTime(Date(-2002, 12, 31));
- sysTime.roll!"months"(14);
- _assertPred!"=="(sysTime, SysTime(Date(-2002, 3, 3)));
- sysTime.roll!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(Date(-2002, 1, 3)));
- }
- {
- auto sysTime = SysTime(Date(-2001, 12, 31));
- sysTime.roll!"months"(14);
- _assertPred!"=="(sysTime, SysTime(Date(-2001, 3, 3)));
- sysTime.roll!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(Date(-2001, 1, 3)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.roll!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.roll!"months"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.roll!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.roll!"months"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.roll!"months"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.roll!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.roll!"months"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.roll!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 2, 7), FracSec.from!"hnsecs"(5007));
- sysTime.roll!"months"(3);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 10, 6, 12, 2, 7), FracSec.from!"hnsecs"(5007)));
- sysTime.roll!"months"(-4);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 6, 6, 12, 2, 7), FracSec.from!"hnsecs"(5007)));
- }
- {
- auto sysTime = SysTime(DateTime(-2002, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.roll!"months"(14);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2002, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.roll!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2002, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- {
- auto sysTime = SysTime(DateTime(-2001, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.roll!"months"(14);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2001, 3, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.roll!"months"(-14);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2001, 1, 3, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- //Test Both
- {
- auto sysTime = SysTime(Date(1, 1, 1));
- sysTime.roll!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(1, 12, 1)));
- sysTime.roll!"months"(1);
- _assertPred!"=="(sysTime, SysTime(Date(1, 1, 1)));
- }
- {
- auto sysTime = SysTime(Date(4, 1, 1));
- sysTime.roll!"months"(-48);
- _assertPred!"=="(sysTime, SysTime(Date(4, 1, 1)));
- sysTime.roll!"months"(48);
- _assertPred!"=="(sysTime, SysTime(Date(4, 1, 1)));
- }
- {
- auto sysTime = SysTime(Date(4, 3, 31));
- sysTime.roll!"months"(-49);
- _assertPred!"=="(sysTime, SysTime(Date(4, 3, 2)));
- sysTime.roll!"months"(49);
- _assertPred!"=="(sysTime, SysTime(Date(4, 4, 2)));
- }
- {
- auto sysTime = SysTime(Date(4, 3, 31));
- sysTime.roll!"months"(-85);
- _assertPred!"=="(sysTime, SysTime(Date(4, 3, 2)));
- sysTime.roll!"months"(85);
- _assertPred!"=="(sysTime, SysTime(Date(4, 4, 2)));
- }
- {
- auto sysTime = SysTime(Date(-1, 1, 1));
- sysTime.roll!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(-1, 12, 1)));
- sysTime.roll!"months"(1);
- _assertPred!"=="(sysTime, SysTime(Date(-1, 1, 1)));
- }
- {
- auto sysTime = SysTime(Date(-4, 1, 1));
- sysTime.roll!"months"(-48);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 1, 1)));
- sysTime.roll!"months"(48);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 1, 1)));
- }
- {
- auto sysTime = SysTime(Date(-4, 3, 31));
- sysTime.roll!"months"(-49);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 3, 2)));
- sysTime.roll!"months"(49);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 4, 2)));
- }
- {
- auto sysTime = SysTime(Date(-4, 3, 31));
- sysTime.roll!"months"(-85);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 3, 2)));
- sysTime.roll!"months"(85);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 4, 2)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17));
- sysTime.roll!"months"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)));
- sysTime.roll!"months"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)));
- }
- {
- auto sysTime = SysTime(DateTime(4, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9));
- sysTime.roll!"months"(-85);
- _assertPred!"=="(sysTime, SysTime(DateTime(4, 3, 2, 12, 11, 10), FracSec.from!"msecs"(9)));
- sysTime.roll!"months"(85);
- _assertPred!"=="(sysTime, SysTime(DateTime(4, 4, 2, 12, 11, 10), FracSec.from!"msecs"(9)));
- }
- {
- auto sysTime = SysTime(DateTime(-3, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9));
- sysTime.roll!"months"(85);
- _assertPred!"=="(sysTime, SysTime(DateTime(-3, 5, 1, 12, 11, 10), FracSec.from!"msecs"(9)));
- sysTime.roll!"months"(-85);
- _assertPred!"=="(sysTime, SysTime(DateTime(-3, 4, 1, 12, 11, 10), FracSec.from!"msecs"(9)));
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.roll!"months"(4)));
- //static assert(!__traits(compiles, ist.roll!"months"(4)));
- //Verify Examples.
- auto st1 = SysTime(DateTime(2010, 1, 1, 12, 33, 33));
- st1.roll!"months"(1);
- assert(st1 == SysTime(DateTime(2010, 2, 1, 12, 33, 33)));
- auto st2 = SysTime(DateTime(2010, 1, 1, 12, 33, 33));
- st2.roll!"months"(-1);
- assert(st2 == SysTime(DateTime(2010, 12, 1, 12, 33, 33)));
- auto st3 = SysTime(DateTime(1999, 1, 29, 12, 33, 33));
- st3.roll!"months"(1);
- assert(st3 == SysTime(DateTime(1999, 3, 1, 12, 33, 33)));
- auto st4 = SysTime(DateTime(1999, 1, 29, 12, 33, 33));
- st4.roll!"months"(1, AllowDayOverflow.no);
- assert(st4 == SysTime(DateTime(1999, 2, 28, 12, 33, 33)));
- }
- }
- //Test roll!"months"() with AllowDayOverlow.no
- unittest
- {
- version(testStdDateTime)
- {
- //Test A.D.
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.roll!"months"(3, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6)));
- sysTime.roll!"months"(-4, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6)));
- }
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.roll!"months"(6, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 1, 6)));
- sysTime.roll!"months"(-6, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.roll!"months"(27, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 10, 6)));
- sysTime.roll!"months"(-28, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 6, 6)));
- }
- {
- auto sysTime = SysTime(Date(1999, 5, 31));
- sysTime.roll!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 6, 30)));
- }
- {
- auto sysTime = SysTime(Date(1999, 5, 31));
- sysTime.roll!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 4, 30)));
- }
- {
- auto sysTime = SysTime(Date(1999, 2, 28));
- sysTime.roll!"months"(12, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(2000, 2, 29));
- sysTime.roll!"months"(12, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(2000, 2, 29)));
- }
- {
- auto sysTime = SysTime(Date(1999, 7, 31));
- sysTime.roll!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 8, 31)));
- sysTime.roll!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 9, 30)));
- }
- {
- auto sysTime = SysTime(Date(1998, 8, 31));
- sysTime.roll!"months"(13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1998, 9, 30)));
- sysTime.roll!"months"(-13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1998, 8, 30)));
- }
- {
- auto sysTime = SysTime(Date(1997, 12, 31));
- sysTime.roll!"months"(13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1997, 1, 31)));
- sysTime.roll!"months"(-13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1997, 12, 31)));
- }
- {
- auto sysTime = SysTime(Date(1997, 12, 31));
- sysTime.roll!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1997, 2, 28)));
- sysTime.roll!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1997, 12, 28)));
- }
- {
- auto sysTime = SysTime(Date(1998, 12, 31));
- sysTime.roll!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1998, 2, 28)));
- sysTime.roll!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1998, 12, 28)));
- }
- {
- auto sysTime = SysTime(Date(1999, 12, 31));
- sysTime.roll!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28)));
- sysTime.roll!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 12, 28)));
- }
- {
- auto sysTime = SysTime(DateTime(1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007));
- sysTime.roll!"months"(3, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007)));
- sysTime.roll!"months"(-4, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007)));
- }
- {
- auto sysTime = SysTime(DateTime(1998, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.roll!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1998, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.roll!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1998, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- {
- auto sysTime = SysTime(DateTime(1999, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.roll!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.roll!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- //Test B.C.
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.roll!"months"(3, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 10, 6)));
- sysTime.roll!"months"(-4, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 6)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.roll!"months"(6, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 1, 6)));
- sysTime.roll!"months"(-6, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.roll!"months"(-27, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 4, 6)));
- sysTime.roll!"months"(28, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 6)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 5, 31));
- sysTime.roll!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 30)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 5, 31));
- sysTime.roll!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 4, 30)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 2, 28));
- sysTime.roll!"months"(-12, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(-2000, 2, 29));
- sysTime.roll!"months"(-12, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 29)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 7, 31));
- sysTime.roll!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 8, 31)));
- sysTime.roll!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 9, 30)));
- }
- {
- auto sysTime = SysTime(Date(-1998, 8, 31));
- sysTime.roll!"months"(13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1998, 9, 30)));
- sysTime.roll!"months"(-13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1998, 8, 30)));
- }
- {
- auto sysTime = SysTime(Date(-1997, 12, 31));
- sysTime.roll!"months"(13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1997, 1, 31)));
- sysTime.roll!"months"(-13, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 31)));
- }
- {
- auto sysTime = SysTime(Date(-1997, 12, 31));
- sysTime.roll!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1997, 2, 28)));
- sysTime.roll!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1997, 12, 28)));
- }
- {
- auto sysTime = SysTime(Date(-2002, 12, 31));
- sysTime.roll!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-2002, 2, 28)));
- sysTime.roll!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-2002, 12, 28)));
- }
- {
- auto sysTime = SysTime(Date(-2001, 12, 31));
- sysTime.roll!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-2001, 2, 28)));
- sysTime.roll!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-2001, 12, 28)));
- }
- {
- auto sysTime = SysTime(DateTime(-1999, 7, 6, 12, 2, 7), FracSec.from!"usecs"(5007));
- sysTime.roll!"months"(3, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 10, 6, 12, 2, 7), FracSec.from!"usecs"(5007)));
- sysTime.roll!"months"(-4, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 6, 6, 12, 2, 7), FracSec.from!"usecs"(5007)));
- }
- {
- auto sysTime = SysTime(DateTime(-2002, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.roll!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2002, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.roll!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2002, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- {
- auto sysTime = SysTime(DateTime(-2001, 12, 31, 7, 7, 7), FracSec.from!"hnsecs"(422202));
- sysTime.roll!"months"(14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2001, 2, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- sysTime.roll!"months"(-14, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-2001, 12, 28, 7, 7, 7), FracSec.from!"hnsecs"(422202)));
- }
- //Test Both
- {
- auto sysTime = SysTime(Date(1, 1, 1));
- sysTime.roll!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1, 12, 1)));
- sysTime.roll!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(1, 1, 1)));
- }
- {
- auto sysTime = SysTime(Date(4, 1, 1));
- sysTime.roll!"months"(-48, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(4, 1, 1)));
- sysTime.roll!"months"(48, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(4, 1, 1)));
- }
- {
- auto sysTime = SysTime(Date(4, 3, 31));
- sysTime.roll!"months"(-49, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(4, 2, 29)));
- sysTime.roll!"months"(49, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(4, 3, 29)));
- }
- {
- auto sysTime = SysTime(Date(4, 3, 31));
- sysTime.roll!"months"(-85, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(4, 2, 29)));
- sysTime.roll!"months"(85, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(4, 3, 29)));
- }
- {
- auto sysTime = SysTime(Date(-1, 1, 1));
- sysTime.roll!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1, 12, 1)));
- sysTime.roll!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-1, 1, 1)));
- }
- {
- auto sysTime = SysTime(Date(-4, 1, 1));
- sysTime.roll!"months"(-48, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 1, 1)));
- sysTime.roll!"months"(48, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 1, 1)));
- }
- {
- auto sysTime = SysTime(Date(-4, 3, 31));
- sysTime.roll!"months"(-49, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 2, 29)));
- sysTime.roll!"months"(49, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 3, 29)));
- }
- {
- auto sysTime = SysTime(Date(-4, 3, 31));
- sysTime.roll!"months"(-85, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 2, 29)));
- sysTime.roll!"months"(85, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(Date(-4, 3, 29)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.roll!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.roll!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.roll!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.roll!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.roll!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.roll!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.roll!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.roll!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17));
- sysTime.roll!"months"(-1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 12, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)));
- sysTime.roll!"months"(1, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 7, 9), FracSec.from!"hnsecs"(17)));
- }
- {
- auto sysTime = SysTime(DateTime(4, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9));
- sysTime.roll!"months"(-85, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(4, 2, 29, 12, 11, 10), FracSec.from!"msecs"(9)));
- sysTime.roll!"months"(85, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(4, 3, 29, 12, 11, 10), FracSec.from!"msecs"(9)));
- }
- {
- auto sysTime = SysTime(DateTime(-3, 3, 31, 12, 11, 10), FracSec.from!"msecs"(9));
- sysTime.roll!"months"(85, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-3, 4, 30, 12, 11, 10), FracSec.from!"msecs"(9)));
- sysTime.roll!"months"(-85, AllowDayOverflow.no);
- _assertPred!"=="(sysTime, SysTime(DateTime(-3, 3, 30, 12, 11, 10), FracSec.from!"msecs"(9)));
- }
- }
- }
- /++
- Adds the given number of units to this $(D SysTime). A negative number
- will subtract.
- The difference between rolling and adding is that rolling does not
- affect larger units. So, for instance, if you roll a $(D SysTime) one
- year's worth of days, then you get the exact same $(D SysTime).
- Accepted units are $(D "days"), $(D "minutes"), $(D "hours"),
- $(D "minutes"), $(D "seconds"), $(D "msecs"), $(D "usecs"), and
- $(D "hnsecs").
- Note that when rolling msecs, usecs or hnsecs, they all add up to a
- second. So, for example, rolling 1000 msecs is exactly the same as
- rolling 100,000 usecs.
- Params:
- units = The units to add.
- value = The number of $(D_PARAM units) to add to this $(D SysTime).
- Examples:
- --------------------
- auto st1 = SysTime(DateTime(2010, 1, 1, 11, 23, 12));
- st1.roll!"days"(1);
- assert(st1 == SysTime(DateTime(2010, 1, 2, 11, 23, 12)));
- st1.roll!"days"(365);
- assert(st1 == SysTime(DateTime(2010, 1, 26, 11, 23, 12)));
- st1.roll!"days"(-32);
- assert(st1 == SysTime(DateTime(2010, 1, 25, 11, 23, 12)));
- auto st2 = SysTime(DateTime(2010, 7, 4, 12, 0, 0));
- st2.roll!"hours"(1);
- assert(st2 == SysTime(DateTime(2010, 7, 4, 13, 0, 0)));
- auto st3 = SysTime(DateTime(2010, 1, 1, 0, 0, 0));
- st3.roll!"seconds"(-1);
- assert(st3 == SysTime(DateTime(2010, 1, 1, 0, 0, 59)));
- auto st4 = SysTime(DateTime(2010, 1, 1, 0, 0, 0),
- FracSec.from!"usecs"(2_400));
- st4.roll!"usecs"(-1_200_000);
- assert(st4 == SysTime(DateTime(2010, 1, 1, 0, 0, 0),
- FracSec.from!"usecs"(802_400)));
- --------------------
- +/
- /+ref SysTime+/ void roll(string units)(long value) nothrow
- if(units == "days")
- {
- auto hnsecs = adjTime;
- auto gdays = splitUnitsFromHNSecs!"days"(hnsecs) + 1;
- if(hnsecs < 0)
- {
- hnsecs += convert!("hours", "hnsecs")(24);
- --gdays;
- }
- auto date = Date(cast(int)gdays);
- date.roll!"days"(value);
- gdays = date.dayOfGregorianCal - 1;
- if(gdays < 0)
- {
- hnsecs -= convert!("hours", "hnsecs")(24);
- ++gdays;
- }
- immutable newDaysHNSecs = convert!("days", "hnsecs")(gdays);
- adjTime = newDaysHNSecs + hnsecs;
- }
- //Verify Examples.
- unittest
- {
- version(testStdDateTime)
- {
- auto st1 = SysTime(DateTime(2010, 1, 1, 11, 23, 12));
- st1.roll!"days"(1);
- assert(st1 == SysTime(DateTime(2010, 1, 2, 11, 23, 12)));
- st1.roll!"days"(365);
- assert(st1 == SysTime(DateTime(2010, 1, 26, 11, 23, 12)));
- st1.roll!"days"(-32);
- assert(st1 == SysTime(DateTime(2010, 1, 25, 11, 23, 12)));
- auto st2 = SysTime(DateTime(2010, 7, 4, 12, 0, 0));
- st2.roll!"hours"(1);
- assert(st2 == SysTime(DateTime(2010, 7, 4, 13, 0, 0)));
- auto st3 = SysTime(DateTime(2010, 1, 1, 0, 0, 0));
- st3.roll!"seconds"(-1);
- assert(st3 == SysTime(DateTime(2010, 1, 1, 0, 0, 59)));
- auto st4 = SysTime(DateTime(2010, 1, 1, 0, 0, 0),
- FracSec.from!"usecs"(2_400));
- st4.roll!"usecs"(-1_200_000);
- assert(st4 == SysTime(DateTime(2010, 1, 1, 0, 0, 0),
- FracSec.from!"usecs"(802_400)));
- }
- }
- unittest
- {
- version(testStdDateTime)
- {
- //Test A.D.
- {
- auto sysTime = SysTime(Date(1999, 2, 28));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 2, 1)));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(2000, 2, 28));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(Date(2000, 2, 29)));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(Date(2000, 2, 1)));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(2000, 2, 29)));
- }
- {
- auto sysTime = SysTime(Date(1999, 6, 30));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 6, 1)));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 6, 30)));
- }
- {
- auto sysTime = SysTime(Date(1999, 7, 31));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 1)));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 31)));
- }
- {
- auto sysTime = SysTime(Date(1999, 1, 1));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 1, 31)));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 1, 1)));
- }
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.roll!"days"(9);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 15)));
- sysTime.roll!"days"(-11);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 4)));
- sysTime.roll!"days"(30);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 3)));
- sysTime.roll!"days"(-3);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 31)));
- }
- {
- auto sysTime = SysTime(Date(1999, 7, 6));
- sysTime.roll!"days"(365);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 30)));
- sysTime.roll!"days"(-365);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6)));
- sysTime.roll!"days"(366);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 31)));
- sysTime.roll!"days"(730);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 17)));
- sysTime.roll!"days"(-1096);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 7, 6)));
- }
- {
- auto sysTime = SysTime(Date(1999, 2, 6));
- sysTime.roll!"days"(365);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 2, 7)));
- sysTime.roll!"days"(-365);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 2, 6)));
- sysTime.roll!"days"(366);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 2, 8)));
- sysTime.roll!"days"(730);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 2, 10)));
- sysTime.roll!"days"(-1096);
- _assertPred!"=="(sysTime, SysTime(Date(1999, 2, 6)));
- }
- {
- auto sysTime = SysTime(DateTime(1999, 2, 28, 7, 9, 2), FracSec.from!"usecs"(234578));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 2, 1, 7, 9, 2), FracSec.from!"usecs"(234578)));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 2, 28, 7, 9, 2), FracSec.from!"usecs"(234578)));
- }
- {
- auto sysTime = SysTime(DateTime(1999, 7, 6, 7, 9, 2), FracSec.from!"usecs"(234578));
- sysTime.roll!"days"(9);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 7, 15, 7, 9, 2), FracSec.from!"usecs"(234578)));
- sysTime.roll!"days"(-11);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 7, 4, 7, 9, 2), FracSec.from!"usecs"(234578)));
- sysTime.roll!"days"(30);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 7, 3, 7, 9, 2), FracSec.from!"usecs"(234578)));
- sysTime.roll!"days"(-3);
- _assertPred!"=="(sysTime, SysTime(DateTime(1999, 7, 31, 7, 9, 2), FracSec.from!"usecs"(234578)));
- }
- //Test B.C.
- {
- auto sysTime = SysTime(Date(-1999, 2, 28));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 1)));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 2, 28)));
- }
- {
- auto sysTime = SysTime(Date(-2000, 2, 28));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 29)));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 1)));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(-2000, 2, 29)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 6, 30));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 1)));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 6, 30)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 7, 31));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 1)));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 31)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 1, 1));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 1, 31)));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 1, 1)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.roll!"days"(9);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 15)));
- sysTime.roll!"days"(-11);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 4)));
- sysTime.roll!"days"(30);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 3)));
- sysTime.roll!"days"(-3);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 31)));
- }
- {
- auto sysTime = SysTime(Date(-1999, 7, 6));
- sysTime.roll!"days"(365);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 30)));
- sysTime.roll!"days"(-365);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6)));
- sysTime.roll!"days"(366);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 31)));
- sysTime.roll!"days"(730);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 17)));
- sysTime.roll!"days"(-1096);
- _assertPred!"=="(sysTime, SysTime(Date(-1999, 7, 6)));
- }
- {
- auto sysTime = SysTime(DateTime(-1999, 2, 28, 7, 9, 2), FracSec.from!"usecs"(234578));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 2, 1, 7, 9, 2), FracSec.from!"usecs"(234578)));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 2, 28, 7, 9, 2), FracSec.from!"usecs"(234578)));
- }
- {
- auto sysTime = SysTime(DateTime(-1999, 7, 6, 7, 9, 2), FracSec.from!"usecs"(234578));
- sysTime.roll!"days"(9);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 7, 15, 7, 9, 2), FracSec.from!"usecs"(234578)));
- sysTime.roll!"days"(-11);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 7, 4, 7, 9, 2), FracSec.from!"usecs"(234578)));
- sysTime.roll!"days"(30);
- _assertPred!"=="(sysTime, SysTime(DateTime(-1999, 7, 3, 7, 9, 2), FracSec.from!"usecs"(234578)));
- sysTime.roll!"days"(-3);
- }
- //Test Both
- {
- auto sysTime = SysTime(Date(1, 7, 6));
- sysTime.roll!"days"(-365);
- _assertPred!"=="(sysTime, SysTime(Date(1, 7, 13)));
- sysTime.roll!"days"(365);
- _assertPred!"=="(sysTime, SysTime(Date(1, 7, 6)));
- sysTime.roll!"days"(-731);
- _assertPred!"=="(sysTime, SysTime(Date(1, 7, 19)));
- sysTime.roll!"days"(730);
- _assertPred!"=="(sysTime, SysTime(Date(1, 7, 5)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.roll!"days"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.roll!"days"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 7, 6, 13, 13, 9), FracSec.from!"msecs"(22));
- sysTime.roll!"days"(-365);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 7, 13, 13, 13, 9), FracSec.from!"msecs"(22)));
- sysTime.roll!"days"(365);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 7, 6, 13, 13, 9), FracSec.from!"msecs"(22)));
- sysTime.roll!"days"(-731);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 7, 19, 13, 13, 9), FracSec.from!"msecs"(22)));
- sysTime.roll!"days"(730);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 7, 5, 13, 13, 9), FracSec.from!"msecs"(22)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 7, 6, 13, 13, 9), FracSec.from!"msecs"(22));
- sysTime.roll!"days"(-365);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 7, 13, 13, 13, 9), FracSec.from!"msecs"(22)));
- sysTime.roll!"days"(365);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 7, 6, 13, 13, 9), FracSec.from!"msecs"(22)));
- sysTime.roll!"days"(-731);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 7, 19, 13, 13, 9), FracSec.from!"msecs"(22)));
- sysTime.roll!"days"(730);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 7, 5, 13, 13, 9), FracSec.from!"msecs"(22)));
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.roll!"days"(4)));
- //static assert(!__traits(compiles, ist.roll!"days"(4)));
- //Verify Examples.
- auto st = SysTime(DateTime(2010, 1, 1, 11, 23, 12));
- st.roll!"days"(1);
- assert(st == SysTime(DateTime(2010, 1, 2, 11, 23, 12)));
- st.roll!"days"(365);
- assert(st == SysTime(DateTime(2010, 1, 26, 11, 23, 12)));
- st.roll!"days"(-32);
- assert(st == SysTime(DateTime(2010, 1, 25, 11, 23, 12)));
- }
- }
- //Shares documentation with "days" version.
- /+ref SysTime+/ void roll(string units)(long value) nothrow
- if(units == "hours" ||
- units == "minutes" ||
- units == "seconds")
- {
- try
- {
- auto hnsecs = adjTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1;
- if(hnsecs < 0)
- {
- hnsecs += convert!("hours", "hnsecs")(24);
- --days;
- }
- immutable hour = splitUnitsFromHNSecs!"hours"(hnsecs);
- immutable minute = splitUnitsFromHNSecs!"minutes"(hnsecs);
- immutable second = splitUnitsFromHNSecs!"seconds"(hnsecs);
- auto dateTime = DateTime(Date(cast(int)days), TimeOfDay(cast(int)hour, cast(int)minute, cast(int)second));
- dateTime.roll!units(value);
- --days;
- hnsecs += convert!("hours", "hnsecs")(dateTime.hour);
- hnsecs += convert!("minutes", "hnsecs")(dateTime.minute);
- hnsecs += convert!("seconds", "hnsecs")(dateTime.second);
- if(days < 0)
- {
- hnsecs -= convert!("hours", "hnsecs")(24);
- ++days;
- }
- immutable newDaysHNSecs = convert!("days", "hnsecs")(days);
- adjTime = newDaysHNSecs + hnsecs;
- }
- catch(Exception e)
- assert(0, "Either DateTime's constructor or TimeOfDay's constructor threw.");
- }
- //Test roll!"hours"().
- unittest
- {
- version(testStdDateTime)
- {
- static void TestST(SysTime orig, int hours, in SysTime expected, size_t line = __LINE__)
- {
- orig.roll!"hours"(hours);
- _assertPred!"=="(orig, expected, "", __FILE__, line);
- }
- //Test A.D.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test B.C.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test Both
- 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)));
- 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)));
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.roll!"hours"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.roll!"hours"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.roll!"hours"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.roll!"hours"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 31, 23, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.roll!"hours"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.roll!"hours"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.roll!"hours"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 0, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.roll!"hours"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.roll!"hours"(4)));
- //static assert(!__traits(compiles, ist.roll!"hours"(4)));
- //Verify Examples.
- auto st1 = SysTime(DateTime(2010, 7, 4, 12, 0, 0));
- st1.roll!"hours"(1);
- assert(st1 == SysTime(DateTime(2010, 7, 4, 13, 0, 0)));
- auto st2 = SysTime(DateTime(2010, 2, 12, 12, 0, 0));
- st2.roll!"hours"(-1);
- assert(st2 == SysTime(DateTime(2010, 2, 12, 11, 0, 0)));
- auto st3 = SysTime(DateTime(2009, 12, 31, 0, 0, 0));
- st3.roll!"minutes"(1);
- assert(st3 == SysTime(DateTime(2009, 12, 31, 0, 1, 0)));
- auto st4 = SysTime(DateTime(2010, 1, 1, 0, 0, 0));
- st4.roll!"minutes"(-1);
- assert(st4 == SysTime(DateTime(2010, 1, 1, 0, 59, 0)));
- auto st5 = SysTime(DateTime(2009, 12, 31, 0, 0, 0));
- st5.roll!"seconds"(1);
- assert(st5 == SysTime(DateTime(2009, 12, 31, 0, 0, 1)));
- auto st6 = SysTime(DateTime(2010, 1, 1, 0, 0, 0));
- st6.roll!"seconds"(-1);
- assert(st6 == SysTime(DateTime(2010, 1, 1, 0, 0, 59)));
- }
- }
- //Test roll!"minutes"().
- unittest
- {
- version(testStdDateTime)
- {
- static void TestST(SysTime orig, int minutes, in SysTime expected, size_t line = __LINE__)
- {
- orig.roll!"minutes"(minutes);
- _assertPred!"=="(orig, expected, "", __FILE__, line);
- }
- //Test A.D.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test B.C.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test Both
- TestST(SysTime(DateTime(1, 1, 1, 0, 0, 0)), -1, SysTime(DateTime(1, 1, 1, 0, 59, 0)));
- TestST(SysTime(DateTime(0, 12, 31, 23, 59, 0)), 1, SysTime(DateTime(0, 12, 31, 23, 0, 0)));
- TestST(SysTime(DateTime(0, 1, 1, 0, 0, 0)), -1, SysTime(DateTime(0, 1, 1, 0, 59, 0)));
- TestST(SysTime(DateTime(-1, 12, 31, 23, 59, 0)), 1, SysTime(DateTime(-1, 12, 31, 23, 0, 0)));
- 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)));
- 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)));
- 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)));
- 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)));
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.roll!"minutes"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 59, 0), FracSec.from!"hnsecs"(0)));
- sysTime.roll!"minutes"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.roll!"minutes"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.roll!"minutes"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 31, 23, 59, 0), FracSec.from!"hnsecs"(0));
- sysTime.roll!"minutes"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 0, 0), FracSec.from!"hnsecs"(0)));
- sysTime.roll!"minutes"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.roll!"minutes"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 0, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.roll!"minutes"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.roll!"minutes"(4)));
- //static assert(!__traits(compiles, ist.roll!"minutes"(4)));
- }
- }
- //Test roll!"seconds"().
- unittest
- {
- version(testStdDateTime)
- {
- static void TestST(SysTime orig, int seconds, in SysTime expected, size_t line = __LINE__)
- {
- orig.roll!"seconds"(seconds);
- _assertPred!"=="(orig, expected, "", __FILE__, line);
- }
- //Test A.D.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test B.C.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test Both
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0));
- sysTime.roll!"seconds"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 59), FracSec.from!"hnsecs"(0)));
- sysTime.roll!"seconds"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999));
- sysTime.roll!"seconds"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 59), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.roll!"seconds"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0));
- sysTime.roll!"seconds"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 0), FracSec.from!"hnsecs"(0)));
- sysTime.roll!"seconds"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0)));
- }
- {
- auto sysTime = SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999));
- sysTime.roll!"seconds"(1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 0), FracSec.from!"hnsecs"(9_999_999)));
- sysTime.roll!"seconds"(-1);
- _assertPred!"=="(sysTime, SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- }
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.roll!"seconds"(4)));
- //static assert(!__traits(compiles, ist.roll!"seconds"(4)));
- }
- }
- //Shares documentation with "days" version.
- /+ref SysTime+/ void roll(string units)(long value) nothrow
- if(units == "msecs" ||
- units == "usecs" ||
- units == "hnsecs")
- {
- auto hnsecs = adjTime;
- immutable days = splitUnitsFromHNSecs!"days"(hnsecs);
- immutable negative = hnsecs < 0;
- if(negative)
- hnsecs += convert!("hours", "hnsecs")(24);
- immutable seconds = splitUnitsFromHNSecs!"seconds"(hnsecs);
- hnsecs += convert!(units, "hnsecs")(value);
- hnsecs %= convert!("seconds", "hnsecs")(1);
- if(hnsecs < 0)
- hnsecs += convert!("seconds", "hnsecs")(1);
- hnsecs += convert!("seconds", "hnsecs")(seconds);
- if(negative)
- hnsecs -= convert!("hours", "hnsecs")(24);
- immutable newDaysHNSecs = convert!("days", "hnsecs")(days);
- adjTime = newDaysHNSecs + hnsecs;
- }
- //Test roll!"msecs"().
- unittest
- {
- version(testStdDateTime)
- {
- static void TestST(SysTime orig, int milliseconds, in SysTime expected, size_t line = __LINE__)
- {
- orig.roll!"msecs"(milliseconds);
- _assertPred!"=="(orig, expected, "", __FILE__, line);
- }
- //Test A.D.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test B.C.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test Both
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.addMSecs(4)));
- //static assert(!__traits(compiles, ist.addMSecs(4)));
- }
- }
- //Test roll!"usecs"().
- unittest
- {
- version(testStdDateTime)
- {
- static void TestST(SysTime orig, long microseconds, in SysTime expected, size_t line = __LINE__)
- {
- orig.roll!"usecs"(microseconds);
- _assertPred!"=="(orig, expected, "", __FILE__, line);
- }
- //Test A.D.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test B.C.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test Both
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.roll!"usecs"(4)));
- //static assert(!__traits(compiles, ist.roll!"usecs"(4)));
- }
- }
- //Test roll!"hnsecs"().
- unittest
- {
- version(testStdDateTime)
- {
- static void TestST(SysTime orig, long hnsecs, in SysTime expected, size_t line = __LINE__)
- {
- orig.roll!"hnsecs"(hnsecs);
- _assertPred!"=="(orig, expected, "", __FILE__, line);
- }
- //Test A.D.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test B.C.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test Both
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.roll!"hnsecs"(4)));
- //static assert(!__traits(compiles, ist.roll!"hnsecs"(4)));
- }
- }
- /++
- Gives the result of adding or subtracting a duration from this
- $(D SysTime).
- The legal types of arithmetic for $(D SysTime) using this operator are
- $(BOOKTABLE,
- $(TR $(TD SysTime) $(TD +) $(TD duration) $(TD -->) $(TD SysTime))
- $(TR $(TD SysTime) $(TD -) $(TD duration) $(TD -->) $(TD SysTime))
- )
- Params:
- duration = The duration to add to or subtract from this
- $(D SysTime).
- +/
- SysTime opBinary(string op, D)(in D duration) const pure nothrow
- if((op == "+" || op == "-") &&
- (is(Unqual!D == Duration) ||
- is(Unqual!D == TickDuration)))
- {
- SysTime retval = SysTime(this._stdTime, this._timezone);
- static if(is(Unqual!D == Duration))
- immutable hnsecs = duration.total!"hnsecs";
- else static if(is(Unqual!D == TickDuration))
- immutable hnsecs = duration.hnsecs;
- //Ideally, this would just be
- //retval._stdTime += unaryFun!(op ~ "a")(hnsecs);
- //But there isn't currently a pure version of unaryFun!().
- static if(op == "+")
- immutable signedHNSecs = hnsecs;
- else static if(op == "-")
- immutable signedHNSecs = -hnsecs;
- else
- static assert(0);
- retval._stdTime += signedHNSecs;
- return retval;
- }
- unittest
- {
- version(testStdDateTime)
- {
- auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678));
- _assertPred!"=="(st + dur!"weeks"(7), SysTime(DateTime(1999, 8, 24, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st + dur!"weeks"(-7), SysTime(DateTime(1999, 5, 18, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st + dur!"days"(7), SysTime(DateTime(1999, 7, 13, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st + dur!"days"(-7), SysTime(DateTime(1999, 6, 29, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st + dur!"hours"(7), SysTime(DateTime(1999, 7, 6, 19, 30, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st + dur!"hours"(-7), SysTime(DateTime(1999, 7, 6, 5, 30, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st + dur!"minutes"(7), SysTime(DateTime(1999, 7, 6, 12, 37, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st + dur!"minutes"(-7), SysTime(DateTime(1999, 7, 6, 12, 23, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st + dur!"seconds"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 40), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st + dur!"seconds"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 26), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st + dur!"msecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_415_678)));
- _assertPred!"=="(st + dur!"msecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_275_678)));
- _assertPred!"=="(st + dur!"usecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_748)));
- _assertPred!"=="(st + dur!"usecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_608)));
- _assertPred!"=="(st + dur!"hnsecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_685)));
- _assertPred!"=="(st + dur!"hnsecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_671)));
- //This probably only runs in cases where gettimeofday() is used, but it's
- //hard to do this test correctly with variable ticksPerSec.
- if(TickDuration.ticksPerSec == 1_000_000)
- {
- _assertPred!"=="(st + TickDuration.from!"usecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_748)));
- _assertPred!"=="(st + TickDuration.from!"usecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_608)));
- }
- _assertPred!"=="(st - dur!"weeks"(-7), SysTime(DateTime(1999, 8, 24, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st - dur!"weeks"(7), SysTime(DateTime(1999, 5, 18, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st - dur!"days"(-7), SysTime(DateTime(1999, 7, 13, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st - dur!"days"(7), SysTime(DateTime(1999, 6, 29, 12, 30, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st - dur!"hours"(-7), SysTime(DateTime(1999, 7, 6, 19, 30, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st - dur!"hours"(7), SysTime(DateTime(1999, 7, 6, 5, 30, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st - dur!"minutes"(-7), SysTime(DateTime(1999, 7, 6, 12, 37, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st - dur!"minutes"(7), SysTime(DateTime(1999, 7, 6, 12, 23, 33), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st - dur!"seconds"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 40), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st - dur!"seconds"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 26), FracSec.from!"hnsecs"(2_345_678)));
- _assertPred!"=="(st - dur!"msecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_415_678)));
- _assertPred!"=="(st - dur!"msecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_275_678)));
- _assertPred!"=="(st - dur!"usecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_748)));
- _assertPred!"=="(st - dur!"usecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_608)));
- _assertPred!"=="(st - dur!"hnsecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_685)));
- _assertPred!"=="(st - dur!"hnsecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_671)));
- //This probably only runs in cases where gettimeofday() is used, but it's
- //hard to do this test correctly with variable ticksPerSec.
- if(TickDuration.ticksPerSec == 1_000_000)
- {
- _assertPred!"=="(st - TickDuration.from!"usecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_748)));
- _assertPred!"=="(st - TickDuration.from!"usecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(2_345_608)));
- }
- static void TestST(in SysTime orig, long hnsecs, in SysTime expected, size_t line = __LINE__)
- {
- _assertPred!"=="(orig + dur!"hnsecs"(hnsecs), expected, "", __FILE__, line);
- }
- //Test A.D.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test B.C.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test Both
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- auto duration = dur!"seconds"(12);
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cst + duration));
- //static assert(__traits(compiles, ist + duration));
- static assert(__traits(compiles, cst - duration));
- //static assert(__traits(compiles, ist - duration));
- }
- }
- /++
- Gives the result of adding or subtracting a duration from this
- $(D SysTime), as well as assigning the result to this $(D SysTime).
- The legal types of arithmetic for $(D SysTime) using this operator are
- $(BOOKTABLE,
- $(TR $(TD SysTime) $(TD +) $(TD duration) $(TD -->) $(TD SysTime))
- $(TR $(TD SysTime) $(TD -) $(TD duration) $(TD -->) $(TD SysTime))
- )
- Params:
- duration = The duration to add to or subtract from this
- $(D SysTime).
- +/
- /+ref+/ SysTime opOpAssign(string op, D)(in D duration) pure nothrow
- if((op == "+" || op == "-") &&
- (is(Unqual!D == Duration) ||
- is(Unqual!D == TickDuration)))
- {
- static if(is(Unqual!D == Duration))
- auto hnsecs = duration.total!"hnsecs";
- else static if(is(Unqual!D == TickDuration))
- auto hnsecs = duration.hnsecs;
- //Ideally, this would just be
- //_stdTime += unaryFun!(op ~ "a")(hnsecs);
- //But there isn't currently a pure version of unaryFun!().
- static if(op == "+")
- immutable signedHNSecs = hnsecs;
- else static if(op == "-")
- immutable signedHNSecs = -hnsecs;
- else
- static assert(0);
- _stdTime += signedHNSecs;
- return this;
- }
- unittest
- {
- version(testStdDateTime)
- {
- _assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"weeks"(7), SysTime(DateTime(1999, 8, 24, 12, 30, 33)));
- _assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"weeks"(-7), SysTime(DateTime(1999, 5, 18, 12, 30, 33)));
- _assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"days"(7), SysTime(DateTime(1999, 7, 13, 12, 30, 33)));
- _assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"days"(-7), SysTime(DateTime(1999, 6, 29, 12, 30, 33)));
- _assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"hours"(7), SysTime(DateTime(1999, 7, 6, 19, 30, 33)));
- _assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"hours"(-7), SysTime(DateTime(1999, 7, 6, 5, 30, 33)));
- _assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"minutes"(7), SysTime(DateTime(1999, 7, 6, 12, 37, 33)));
- _assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"minutes"(-7), SysTime(DateTime(1999, 7, 6, 12, 23, 33)));
- _assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"seconds"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 40)));
- _assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"seconds"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 26)));
- _assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"msecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(7)));
- _assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"msecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"msecs"(993)));
- _assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"usecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7)));
- _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)));
- _assertPred!"+="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"hnsecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(7)));
- _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)));
- _assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"weeks"(-7), SysTime(DateTime(1999, 8, 24, 12, 30, 33)));
- _assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"weeks"(7), SysTime(DateTime(1999, 5, 18, 12, 30, 33)));
- _assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"days"(-7), SysTime(DateTime(1999, 7, 13, 12, 30, 33)));
- _assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"days"(7), SysTime(DateTime(1999, 6, 29, 12, 30, 33)));
- _assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"hours"(-7), SysTime(DateTime(1999, 7, 6, 19, 30, 33)));
- _assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"hours"(7), SysTime(DateTime(1999, 7, 6, 5, 30, 33)));
- _assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"minutes"(-7), SysTime(DateTime(1999, 7, 6, 12, 37, 33)));
- _assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"minutes"(7), SysTime(DateTime(1999, 7, 6, 12, 23, 33)));
- _assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"seconds"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 40)));
- _assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"seconds"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 26)));
- _assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"msecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(7)));
- _assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"msecs"(7), SysTime(DateTime(1999, 7, 6, 12, 30, 32), FracSec.from!"msecs"(993)));
- _assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"usecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(7)));
- _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)));
- _assertPred!"-="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)), dur!"hnsecs"(-7), SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(7)));
- _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)));
- static void TestST(SysTime orig, long hnsecs, in SysTime expected, size_t line = __LINE__)
- {
- orig += dur!"hnsecs"(hnsecs);
- _assertPred!"=="(orig, expected, "", __FILE__, line);
- }
- //Test A.D.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test B.C.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- //Test Both
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- auto duration = dur!"seconds"(12);
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst += duration));
- //static assert(!__traits(compiles, ist += duration));
- static assert(!__traits(compiles, cst -= duration));
- //static assert(!__traits(compiles, ist -= duration));
- }
- }
- /++
- Gives the difference between two $(D SysTime)s.
- The legal types of arithmetic for $(D SysTime) using this operator are
- $(BOOKTABLE,
- $(TR $(TD SysTime) $(TD -) $(TD SysTime) $(TD -->) $(TD duration))
- )
- +/
- Duration opBinary(string op)(in SysTime rhs) const pure nothrow
- if(op == "-")
- {
- return dur!"hnsecs"(_stdTime - rhs._stdTime);
- }
- unittest
- {
- version(testStdDateTime)
- {
- _assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1998, 7, 6, 12, 30, 33)),
- dur!"seconds"(31_536_000));
- _assertPred!"=="(SysTime(DateTime(1998, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)),
- dur!"seconds"(-31_536_000));
- _assertPred!"=="(SysTime(DateTime(1999, 8, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)),
- dur!"seconds"(26_78_400));
- _assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 8, 6, 12, 30, 33)),
- dur!"seconds"(-26_78_400));
- _assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 5, 12, 30, 33)),
- dur!"seconds"(86_400));
- _assertPred!"=="(SysTime(DateTime(1999, 7, 5, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)),
- dur!"seconds"(-86_400));
- _assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 11, 30, 33)),
- dur!"seconds"(3600));
- _assertPred!"=="(SysTime(DateTime(1999, 7, 6, 11, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)),
- dur!"seconds"(-3600));
- _assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 31, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)),
- dur!"seconds"(60));
- _assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 31, 33)),
- dur!"seconds"(-60));
- _assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 34)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)),
- dur!"seconds"(1));
- _assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 34)),
- dur!"seconds"(-1));
- _assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(532)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)),
- dur!"msecs"(532));
- _assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"msecs"(532)),
- dur!"msecs"(-532));
- _assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(333_347)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)),
- dur!"usecs"(333_347));
- _assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"usecs"(333_347)),
- dur!"usecs"(-333_347));
- _assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_234_567)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33)),
- dur!"hnsecs"(1_234_567));
- _assertPred!"=="(SysTime(DateTime(1999, 7, 6, 12, 30, 33)) - SysTime(DateTime(1999, 7, 6, 12, 30, 33), FracSec.from!"hnsecs"(1_234_567)),
- dur!"hnsecs"(-1_234_567));
- _assertPred!"=="(SysTime(DateTime(1, 1, 1, 12, 30, 33)) - SysTime(DateTime(1, 1, 1, 0, 0, 0)), dur!"seconds"(45033));
- _assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0)) - SysTime(DateTime(1, 1, 1, 12, 30, 33)), dur!"seconds"(-45033));
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 12, 30, 33)) - SysTime(DateTime(1, 1, 1, 0, 0, 0)), dur!"seconds"(-41367));
- _assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0)) - SysTime(DateTime(0, 12, 31, 12, 30, 33)), dur!"seconds"(41367));
- _assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0)) - SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)),
- dur!"hnsecs"(1));
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)) - SysTime(DateTime(1, 1, 1, 0, 0, 0)),
- dur!"hnsecs"(-1));
- auto tz = TimeZone.getTimeZone("America/Los_Angeles");
- _assertPred!"=="(SysTime(DateTime(2011, 1, 13, 8, 17, 2), FracSec.from!"msecs"(296), tz) -
- SysTime(DateTime(2011, 1, 13, 8, 17, 2), FracSec.from!"msecs"(296), tz),
- dur!"hnsecs"(0));
- _assertPred!"=="(SysTime(DateTime(2011, 1, 13, 8, 17, 2), FracSec.from!"msecs"(296), tz) -
- SysTime(DateTime(2011, 1, 13, 8, 17, 2), FracSec.from!"msecs"(296), UTC()),
- dur!"hours"(8));
- _assertPred!"=="(SysTime(DateTime(2011, 1, 13, 8, 17, 2), FracSec.from!"msecs"(296), UTC()) -
- SysTime(DateTime(2011, 1, 13, 8, 17, 2), FracSec.from!"msecs"(296), tz),
- dur!"hours"(-8));
- auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, st - st));
- static assert(__traits(compiles, cst - st));
- //static assert(__traits(compiles, ist - st));
- static assert(__traits(compiles, st - cst));
- static assert(__traits(compiles, cst - cst));
- //static assert(__traits(compiles, ist - cst));
- //static assert(__traits(compiles, st - ist));
- //static assert(__traits(compiles, cst - ist));
- //static assert(__traits(compiles, ist - ist));
- }
- }
- /++
- Returns the difference between the two $(D SysTime)s in months.
- You can get the difference in years by subtracting the year property
- of two $(D SysTime)s, and you can get the difference in days or weeks by
- subtracting the $(D SysTime)s themselves and using the $(D Duration)
- that results, but because you cannot convert between months and smaller
- units without a specific date (which $(D Duration)s don't have), you
- cannot get the difference in months without doing some math using both
- the year and month properties, so this is a convenience function for
- getting the difference in months.
- Note that the number of days in the months or how far into the month
- either date is is irrelevant. It is the difference in the month property
- combined with the difference in years * 12. So, for instance,
- December 31st and January 1st are one month apart just as December 1st
- and January 31st are one month apart.
- Params:
- rhs = The $(D SysTime) to subtract from this one.
- Examples:
- --------------------
- assert(SysTime(Date(1999, 2, 1)).diffMonths(SysTime(Date(1999, 1, 31))) == 1);
- assert(SysTime(Date(1999, 1, 31)).diffMonths(SysTime(Date(1999, 2, 1))) == -1);
- assert(SysTime(Date(1999, 3, 1)).diffMonths(SysTime(Date(1999, 1, 1))) == 2);
- assert(SysTime(Date(1999, 1, 1)).diffMonths(SysTime(Date(1999, 3, 31))) == -2);
- --------------------
- +/
- int diffMonths(in SysTime rhs) const nothrow
- {
- return (cast(Date)this).diffMonths(cast(Date)rhs);
- }
- unittest
- {
- version(testStdDateTime)
- {
- auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, st.diffMonths(st)));
- static assert(__traits(compiles, cst.diffMonths(st)));
- //static assert(__traits(compiles, ist.diffMonths(st)));
- static assert(__traits(compiles, st.diffMonths(cst)));
- static assert(__traits(compiles, cst.diffMonths(cst)));
- //static assert(__traits(compiles, ist.diffMonths(cst)));
- //static assert(__traits(compiles, st.diffMonths(ist)));
- //static assert(__traits(compiles, cst.diffMonths(ist)));
- //static assert(__traits(compiles, ist.diffMonths(ist)));
- //Verify Examples.
- assert(SysTime(Date(1999, 2, 1)).diffMonths(SysTime(Date(1999, 1, 31))) == 1);
- assert(SysTime(Date(1999, 1, 31)).diffMonths(SysTime(Date(1999, 2, 1))) == -1);
- assert(SysTime(Date(1999, 3, 1)).diffMonths(SysTime(Date(1999, 1, 1))) == 2);
- assert(SysTime(Date(1999, 1, 1)).diffMonths(SysTime(Date(1999, 3, 31))) == -2);
- }
- }
- /++
- Whether this $(D SysTime) is in a leap year.
- +/
- @property bool isLeapYear() const nothrow
- {
- return (cast(Date)this).isLeapYear;
- }
- unittest
- {
- version(testStdDateTime)
- {
- auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, st.isLeapYear));
- static assert(__traits(compiles, cst.isLeapYear));
- //static assert(__traits(compiles, ist.isLeapYear));
- }
- }
- /++
- Day of the week this $(D SysTime) is on.
- +/
- @property DayOfWeek dayOfWeek() const nothrow
- {
- return getDayOfWeek(dayOfGregorianCal);
- }
- unittest
- {
- version(testStdDateTime)
- {
- auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, st.dayOfWeek));
- static assert(__traits(compiles, cst.dayOfWeek));
- //static assert(__traits(compiles, ist.dayOfWeek));
- }
- }
- /++
- Day of the year this $(D SysTime) is on.
- Examples:
- --------------------
- assert(SysTime(DateTime(1999, 1, 1, 12, 22, 7)).dayOfYear == 1);
- assert(SysTime(DateTime(1999, 12, 31, 7, 2, 59)).dayOfYear == 365);
- assert(SysTime(DateTime(2000, 12, 31, 21, 20, 0)).dayOfYear == 366);
- --------------------
- +/
- @property ushort dayOfYear() const nothrow
- {
- return (cast(Date)this).dayOfYear;
- }
- unittest
- {
- version(testStdDateTime)
- {
- auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, st.dayOfYear));
- static assert(__traits(compiles, cst.dayOfYear));
- //static assert(__traits(compiles, ist.dayOfYear));
- //Verify Examples.
- assert(SysTime(DateTime(1999, 1, 1, 12, 22, 7)).dayOfYear == 1);
- assert(SysTime(DateTime(1999, 12, 31, 7, 2, 59)).dayOfYear == 365);
- assert(SysTime(DateTime(2000, 12, 31, 21, 20, 0)).dayOfYear == 366);
- }
- }
- /++
- Day of the year.
- Params:
- day = The day of the year to set which day of the year this
- $(D SysTime) is on.
- +/
- @property void dayOfYear(int day)
- {
- immutable hnsecs = adjTime;
- immutable days = convert!("hnsecs", "days")(hnsecs);
- immutable theRest = hnsecs - convert!("days", "hnsecs")(days);
- auto date = Date(cast(int)days);
- date.dayOfYear = day;
- immutable newDaysHNSecs = convert!("days", "hnsecs")(date.dayOfGregorianCal - 1);
- adjTime = newDaysHNSecs + theRest;
- }
- unittest
- {
- version(testStdDateTime)
- {
- auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, st.dayOfYear = 12));
- static assert(!__traits(compiles, cst.dayOfYear = 12));
- //static assert(!__traits(compiles, ist.dayOfYear = 12));
- }
- }
- /++
- The Xth day of the Gregorian Calendar that this $(D SysTime) is on.
- Examples:
- --------------------
- assert(SysTime(DateTime(1, 1, 1, 0, 0, 0)).dayOfGregorianCal == 1);
- assert(SysTime(DateTime(1, 12, 31, 23, 59, 59)).dayOfGregorianCal == 365);
- assert(SysTime(DateTime(2, 1, 1, 2, 2, 2)).dayOfGregorianCal == 366);
- assert(SysTime(DateTime(0, 12, 31, 7, 7, 7)).dayOfGregorianCal == 0);
- assert(SysTime(DateTime(0, 1, 1, 19, 30, 0)).dayOfGregorianCal == -365);
- assert(SysTime(DateTime(-1, 12, 31, 4, 7, 0)).dayOfGregorianCal == -366);
- assert(SysTime(DateTime(2000, 1, 1, 9, 30, 20)).dayOfGregorianCal == 730_120);
- assert(SysTime(DateTime(2010, 12, 31, 15, 45, 50)).dayOfGregorianCal == 734_137);
- --------------------
- +/
- @property int dayOfGregorianCal() const nothrow
- {
- immutable adjustedTime = adjTime;
- //We have to add one because 0 would be midnight, January 1st, 1 A.D.,
- //which would be the 1st day of the Gregorian Calendar, not the 0th. So,
- //simply casting to days is one day off.
- if(adjustedTime > 0)
- return cast(int)getUnitsFromHNSecs!"days"(adjustedTime) + 1;
- auto hnsecs = adjustedTime;
- immutable days = cast(int)splitUnitsFromHNSecs!"days"(hnsecs);
- return hnsecs == 0 ? days + 1 : days;
- }
- unittest
- {
- version(testStdDateTime)
- {
- //Test A.D.
- _assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal, 1);
- _assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1)).dayOfGregorianCal, 1);
- _assertPred!"=="(SysTime(DateTime(1, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal, 1);
- _assertPred!"=="(SysTime(DateTime(1, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 1);
- _assertPred!"=="(SysTime(DateTime(1, 1, 2, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 2);
- _assertPred!"=="(SysTime(DateTime(1, 2, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 32);
- _assertPred!"=="(SysTime(DateTime(2, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 366);
- _assertPred!"=="(SysTime(DateTime(3, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 731);
- _assertPred!"=="(SysTime(DateTime(4, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 1096);
- _assertPred!"=="(SysTime(DateTime(5, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 1462);
- _assertPred!"=="(SysTime(DateTime(50, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 17_898);
- _assertPred!"=="(SysTime(DateTime(97, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 35_065);
- _assertPred!"=="(SysTime(DateTime(100, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 36_160);
- _assertPred!"=="(SysTime(DateTime(101, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 36_525);
- _assertPred!"=="(SysTime(DateTime(105, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 37_986);
- _assertPred!"=="(SysTime(DateTime(200, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 72_684);
- _assertPred!"=="(SysTime(DateTime(201, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 73_049);
- _assertPred!"=="(SysTime(DateTime(300, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 109_208);
- _assertPred!"=="(SysTime(DateTime(301, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 109_573);
- _assertPred!"=="(SysTime(DateTime(400, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 145_732);
- _assertPred!"=="(SysTime(DateTime(401, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 146_098);
- _assertPred!"=="(SysTime(DateTime(500, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 182_257);
- _assertPred!"=="(SysTime(DateTime(501, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 182_622);
- _assertPred!"=="(SysTime(DateTime(1000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 364_878);
- _assertPred!"=="(SysTime(DateTime(1001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 365_243);
- _assertPred!"=="(SysTime(DateTime(1600, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 584_023);
- _assertPred!"=="(SysTime(DateTime(1601, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 584_389);
- _assertPred!"=="(SysTime(DateTime(1900, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 693_596);
- _assertPred!"=="(SysTime(DateTime(1901, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 693_961);
- _assertPred!"=="(SysTime(DateTime(1945, 11, 12, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 710_347);
- _assertPred!"=="(SysTime(DateTime(1999, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 729_755);
- _assertPred!"=="(SysTime(DateTime(2000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 730_120);
- _assertPred!"=="(SysTime(DateTime(2001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 730_486);
- _assertPred!"=="(SysTime(DateTime(2010, 1, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_773);
- _assertPred!"=="(SysTime(DateTime(2010, 1, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_803);
- _assertPred!"=="(SysTime(DateTime(2010, 2, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_804);
- _assertPred!"=="(SysTime(DateTime(2010, 2, 28, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_831);
- _assertPred!"=="(SysTime(DateTime(2010, 3, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_832);
- _assertPred!"=="(SysTime(DateTime(2010, 3, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_862);
- _assertPred!"=="(SysTime(DateTime(2010, 4, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_863);
- _assertPred!"=="(SysTime(DateTime(2010, 4, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_892);
- _assertPred!"=="(SysTime(DateTime(2010, 5, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_893);
- _assertPred!"=="(SysTime(DateTime(2010, 5, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_923);
- _assertPred!"=="(SysTime(DateTime(2010, 6, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_924);
- _assertPred!"=="(SysTime(DateTime(2010, 6, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_953);
- _assertPred!"=="(SysTime(DateTime(2010, 7, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_954);
- _assertPred!"=="(SysTime(DateTime(2010, 7, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_984);
- _assertPred!"=="(SysTime(DateTime(2010, 8, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 733_985);
- _assertPred!"=="(SysTime(DateTime(2010, 8, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_015);
- _assertPred!"=="(SysTime(DateTime(2010, 9, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_016);
- _assertPred!"=="(SysTime(DateTime(2010, 9, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_045);
- _assertPred!"=="(SysTime(DateTime(2010, 10, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_046);
- _assertPred!"=="(SysTime(DateTime(2010, 10, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_076);
- _assertPred!"=="(SysTime(DateTime(2010, 11, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_077);
- _assertPred!"=="(SysTime(DateTime(2010, 11, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_106);
- _assertPred!"=="(SysTime(DateTime(2010, 12, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_107);
- _assertPred!"=="(SysTime(DateTime(2010, 12, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, 734_137);
- _assertPred!"=="(SysTime(DateTime(2012, 2, 1, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, 734_534);
- _assertPred!"=="(SysTime(DateTime(2012, 2, 28, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, 734_561);
- _assertPred!"=="(SysTime(DateTime(2012, 2, 29, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, 734_562);
- _assertPred!"=="(SysTime(DateTime(2012, 3, 1, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, 734_563);
- //Test B.C.
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal, 0);
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_998)).dayOfGregorianCal, 0);
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal, 0);
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(1)).dayOfGregorianCal, 0);
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal, 0);
- _assertPred!"=="(SysTime(DateTime(-1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal, -366);
- _assertPred!"=="(SysTime(DateTime(-1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_998)).dayOfGregorianCal, -366);
- _assertPred!"=="(SysTime(DateTime(-1, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal, -366);
- _assertPred!"=="(SysTime(DateTime(-1, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal, -366);
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, 0);
- _assertPred!"=="(SysTime(DateTime(0, 12, 30, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -1);
- _assertPred!"=="(SysTime(DateTime(0, 12, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -30);
- _assertPred!"=="(SysTime(DateTime(0, 11, 30, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -31);
- _assertPred!"=="(SysTime(DateTime(-1, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -366);
- _assertPred!"=="(SysTime(DateTime(-1, 12, 30, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -367);
- _assertPred!"=="(SysTime(DateTime(-1, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -730);
- _assertPred!"=="(SysTime(DateTime(-2, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -731);
- _assertPred!"=="(SysTime(DateTime(-2, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -1095);
- _assertPred!"=="(SysTime(DateTime(-3, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -1096);
- _assertPred!"=="(SysTime(DateTime(-3, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -1460);
- _assertPred!"=="(SysTime(DateTime(-4, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -1461);
- _assertPred!"=="(SysTime(DateTime(-4, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -1826);
- _assertPred!"=="(SysTime(DateTime(-5, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -1827);
- _assertPred!"=="(SysTime(DateTime(-5, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -2191);
- _assertPred!"=="(SysTime(DateTime(-9, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -3652);
- _assertPred!"=="(SysTime(DateTime(-49, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -18_262);
- _assertPred!"=="(SysTime(DateTime(-50, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -18_627);
- _assertPred!"=="(SysTime(DateTime(-97, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -35_794);
- _assertPred!"=="(SysTime(DateTime(-99, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -36_160);
- _assertPred!"=="(SysTime(DateTime(-99, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -36_524);
- _assertPred!"=="(SysTime(DateTime(-100, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -36_889);
- _assertPred!"=="(SysTime(DateTime(-101, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -37_254);
- _assertPred!"=="(SysTime(DateTime(-105, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -38_715);
- _assertPred!"=="(SysTime(DateTime(-200, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -73_413);
- _assertPred!"=="(SysTime(DateTime(-201, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -73_778);
- _assertPred!"=="(SysTime(DateTime(-300, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -109_937);
- _assertPred!"=="(SysTime(DateTime(-301, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -110_302);
- _assertPred!"=="(SysTime(DateTime(-400, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -146_097);
- _assertPred!"=="(SysTime(DateTime(-400, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -146_462);
- _assertPred!"=="(SysTime(DateTime(-401, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -146_827);
- _assertPred!"=="(SysTime(DateTime(-499, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -182_621);
- _assertPred!"=="(SysTime(DateTime(-500, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -182_986);
- _assertPred!"=="(SysTime(DateTime(-501, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -183_351);
- _assertPred!"=="(SysTime(DateTime(-1000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -365_607);
- _assertPred!"=="(SysTime(DateTime(-1001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -365_972);
- _assertPred!"=="(SysTime(DateTime(-1599, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -584_387);
- _assertPred!"=="(SysTime(DateTime(-1600, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -584_388);
- _assertPred!"=="(SysTime(DateTime(-1600, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -584_753);
- _assertPred!"=="(SysTime(DateTime(-1601, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -585_118);
- _assertPred!"=="(SysTime(DateTime(-1900, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -694_325);
- _assertPred!"=="(SysTime(DateTime(-1901, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -694_690);
- _assertPred!"=="(SysTime(DateTime(-1999, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -730_484);
- _assertPred!"=="(SysTime(DateTime(-2000, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -730_485);
- _assertPred!"=="(SysTime(DateTime(-2000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -730_850);
- _assertPred!"=="(SysTime(DateTime(-2001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)).dayOfGregorianCal, -731_215);
- _assertPred!"=="(SysTime(DateTime(-2010, 1, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_502);
- _assertPred!"=="(SysTime(DateTime(-2010, 1, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_472);
- _assertPred!"=="(SysTime(DateTime(-2010, 2, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_471);
- _assertPred!"=="(SysTime(DateTime(-2010, 2, 28, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_444);
- _assertPred!"=="(SysTime(DateTime(-2010, 3, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_443);
- _assertPred!"=="(SysTime(DateTime(-2010, 3, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_413);
- _assertPred!"=="(SysTime(DateTime(-2010, 4, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_412);
- _assertPred!"=="(SysTime(DateTime(-2010, 4, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_383);
- _assertPred!"=="(SysTime(DateTime(-2010, 5, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_382);
- _assertPred!"=="(SysTime(DateTime(-2010, 5, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_352);
- _assertPred!"=="(SysTime(DateTime(-2010, 6, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_351);
- _assertPred!"=="(SysTime(DateTime(-2010, 6, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_322);
- _assertPred!"=="(SysTime(DateTime(-2010, 7, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_321);
- _assertPred!"=="(SysTime(DateTime(-2010, 7, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_291);
- _assertPred!"=="(SysTime(DateTime(-2010, 8, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_290);
- _assertPred!"=="(SysTime(DateTime(-2010, 8, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_260);
- _assertPred!"=="(SysTime(DateTime(-2010, 9, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_259);
- _assertPred!"=="(SysTime(DateTime(-2010, 9, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_230);
- _assertPred!"=="(SysTime(DateTime(-2010, 10, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_229);
- _assertPred!"=="(SysTime(DateTime(-2010, 10, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_199);
- _assertPred!"=="(SysTime(DateTime(-2010, 11, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_198);
- _assertPred!"=="(SysTime(DateTime(-2010, 11, 30, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_169);
- _assertPred!"=="(SysTime(DateTime(-2010, 12, 1, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_168);
- _assertPred!"=="(SysTime(DateTime(-2010, 12, 31, 23, 59, 59), FracSec.from!"msecs"(999)).dayOfGregorianCal, -734_138);
- _assertPred!"=="(SysTime(DateTime(-2012, 2, 1, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, -735_202);
- _assertPred!"=="(SysTime(DateTime(-2012, 2, 28, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, -735_175);
- _assertPred!"=="(SysTime(DateTime(-2012, 2, 29, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, -735_174);
- _assertPred!"=="(SysTime(DateTime(-2012, 3, 1, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, -735_173);
- _assertPred!"=="(SysTime(DateTime(-3760, 9, 7, 0, 0, 0), FracSec.from!"msecs"(0)).dayOfGregorianCal, -1_373_427); //Start of Hebrew Calendar
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cst.dayOfGregorianCal));
- //static assert(__traits(compiles, ist.dayOfGregorianCal));
- //Verify Examples.
- assert(SysTime(DateTime(1, 1, 1, 0, 0, 0)).dayOfGregorianCal == 1);
- assert(SysTime(DateTime(1, 12, 31, 23, 59, 59)).dayOfGregorianCal == 365);
- assert(SysTime(DateTime(2, 1, 1, 2, 2, 2)).dayOfGregorianCal == 366);
- assert(SysTime(DateTime(0, 12, 31, 7, 7, 7)).dayOfGregorianCal == 0);
- assert(SysTime(DateTime(0, 1, 1, 19, 30, 0)).dayOfGregorianCal == -365);
- assert(SysTime(DateTime(-1, 12, 31, 4, 7, 0)).dayOfGregorianCal == -366);
- assert(SysTime(DateTime(2000, 1, 1, 9, 30, 20)).dayOfGregorianCal == 730_120);
- assert(SysTime(DateTime(2010, 12, 31, 15, 45, 50)).dayOfGregorianCal == 734_137);
- }
- }
- //Test that the logic for the day of the Gregorian Calendar is consistent
- //between Date and SysTime.
- unittest
- {
- version(testStdDateTime)
- {
- //Test A.D.
- _assertPred!"=="(Date(1, 1, 1).dayOfGregorianCal, SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(1, 1, 2).dayOfGregorianCal, SysTime(DateTime(1, 1, 2, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(1, 2, 1).dayOfGregorianCal, SysTime(DateTime(1, 2, 1, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(2, 1, 1).dayOfGregorianCal, SysTime(DateTime(2, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(3, 1, 1).dayOfGregorianCal, SysTime(DateTime(3, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(4, 1, 1).dayOfGregorianCal, SysTime(DateTime(4, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(5, 1, 1).dayOfGregorianCal, SysTime(DateTime(5, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(50, 1, 1).dayOfGregorianCal, SysTime(DateTime(50, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(97, 1, 1).dayOfGregorianCal, SysTime(DateTime(97, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(100, 1, 1).dayOfGregorianCal, SysTime(DateTime(100, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(101, 1, 1).dayOfGregorianCal, SysTime(DateTime(101, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(105, 1, 1).dayOfGregorianCal, SysTime(DateTime(105, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(200, 1, 1).dayOfGregorianCal, SysTime(DateTime(200, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(201, 1, 1).dayOfGregorianCal, SysTime(DateTime(201, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(300, 1, 1).dayOfGregorianCal, SysTime(DateTime(300, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(301, 1, 1).dayOfGregorianCal, SysTime(DateTime(301, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(400, 1, 1).dayOfGregorianCal, SysTime(DateTime(400, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(401, 1, 1).dayOfGregorianCal, SysTime(DateTime(401, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(500, 1, 1).dayOfGregorianCal, SysTime(DateTime(500, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(501, 1, 1).dayOfGregorianCal, SysTime(DateTime(501, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(1000, 1, 1).dayOfGregorianCal, SysTime(DateTime(1000, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(1001, 1, 1).dayOfGregorianCal, SysTime(DateTime(1001, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(1600, 1, 1).dayOfGregorianCal, SysTime(DateTime(1600, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(1601, 1, 1).dayOfGregorianCal, SysTime(DateTime(1601, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(1900, 1, 1).dayOfGregorianCal, SysTime(DateTime(1900, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(1901, 1, 1).dayOfGregorianCal, SysTime(DateTime(1901, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(1945, 11, 12).dayOfGregorianCal, SysTime(DateTime(1945, 11, 12, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(1999, 1, 1).dayOfGregorianCal, SysTime(DateTime(1999, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(1999, 7, 6).dayOfGregorianCal, SysTime(DateTime(1999, 7, 6, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(2000, 1, 1).dayOfGregorianCal, SysTime(DateTime(2000, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(2001, 1, 1).dayOfGregorianCal, SysTime(DateTime(2001, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 1, 1).dayOfGregorianCal, SysTime(DateTime(2010, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 1, 31).dayOfGregorianCal, SysTime(DateTime(2010, 1, 31, 23, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 2, 1).dayOfGregorianCal, SysTime(DateTime(2010, 2, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 2, 28).dayOfGregorianCal, SysTime(DateTime(2010, 2, 28, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 3, 1).dayOfGregorianCal, SysTime(DateTime(2010, 3, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 3, 31).dayOfGregorianCal, SysTime(DateTime(2010, 3, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 4, 1).dayOfGregorianCal, SysTime(DateTime(2010, 4, 1, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 4, 30).dayOfGregorianCal, SysTime(DateTime(2010, 4, 30, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 5, 1).dayOfGregorianCal, SysTime(DateTime(2010, 5, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 5, 31).dayOfGregorianCal, SysTime(DateTime(2010, 5, 31, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 6, 1).dayOfGregorianCal, SysTime(DateTime(2010, 6, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 6, 30).dayOfGregorianCal, SysTime(DateTime(2010, 6, 30, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 7, 1).dayOfGregorianCal, SysTime(DateTime(2010, 7, 1, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 7, 31).dayOfGregorianCal, SysTime(DateTime(2010, 7, 31, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 8, 1).dayOfGregorianCal, SysTime(DateTime(2010, 8, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 8, 31).dayOfGregorianCal, SysTime(DateTime(2010, 8, 31, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 9, 1).dayOfGregorianCal, SysTime(DateTime(2010, 9, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 9, 30).dayOfGregorianCal, SysTime(DateTime(2010, 9, 30, 12, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 10, 1).dayOfGregorianCal, SysTime(DateTime(2010, 10, 1, 0, 12, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 10, 31).dayOfGregorianCal, SysTime(DateTime(2010, 10, 31, 0, 0, 12), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 11, 1).dayOfGregorianCal, SysTime(DateTime(2010, 11, 1, 23, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 11, 30).dayOfGregorianCal, SysTime(DateTime(2010, 11, 30, 0, 59, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 12, 1).dayOfGregorianCal, SysTime(DateTime(2010, 12, 1, 0, 0, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(2010, 12, 31).dayOfGregorianCal, SysTime(DateTime(2010, 12, 31, 0, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(2012, 2, 1).dayOfGregorianCal, SysTime(DateTime(2012, 2, 1, 23, 0, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(2012, 2, 28).dayOfGregorianCal, SysTime(DateTime(2012, 2, 28, 23, 59, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(2012, 2, 29).dayOfGregorianCal, SysTime(DateTime(2012, 2, 29, 7, 7, 7), FracSec.from!"hnsecs"(7)).dayOfGregorianCal);
- _assertPred!"=="(Date(2012, 3, 1).dayOfGregorianCal, SysTime(DateTime(2012, 3, 1, 7, 7, 7), FracSec.from!"hnsecs"(7)).dayOfGregorianCal);
- //Test B.C.
- _assertPred!"=="(Date(0, 12, 31).dayOfGregorianCal, SysTime(DateTime(0, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(0, 12, 30).dayOfGregorianCal, SysTime(DateTime(0, 12, 30, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(0, 12, 1).dayOfGregorianCal, SysTime(DateTime(0, 12, 1, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(0, 11, 30).dayOfGregorianCal, SysTime(DateTime(0, 11, 30, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-1, 12, 31).dayOfGregorianCal, SysTime(DateTime(-1, 12, 31, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-1, 12, 30).dayOfGregorianCal, SysTime(DateTime(-1, 12, 30, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-1, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2, 12, 31).dayOfGregorianCal, SysTime(DateTime(-2, 12, 31, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2, 1, 1).dayOfGregorianCal, SysTime(DateTime(-2, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-3, 12, 31).dayOfGregorianCal, SysTime(DateTime(-3, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-3, 1, 1).dayOfGregorianCal, SysTime(DateTime(-3, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-4, 12, 31).dayOfGregorianCal, SysTime(DateTime(-4, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-4, 1, 1).dayOfGregorianCal, SysTime(DateTime(-4, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-5, 12, 31).dayOfGregorianCal, SysTime(DateTime(-5, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-5, 1, 1).dayOfGregorianCal, SysTime(DateTime(-5, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-9, 1, 1).dayOfGregorianCal, SysTime(DateTime(-9, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-49, 1, 1).dayOfGregorianCal, SysTime(DateTime(-49, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-50, 1, 1).dayOfGregorianCal, SysTime(DateTime(-50, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-97, 1, 1).dayOfGregorianCal, SysTime(DateTime(-97, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-99, 12, 31).dayOfGregorianCal, SysTime(DateTime(-99, 12, 31, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-99, 1, 1).dayOfGregorianCal, SysTime(DateTime(-99, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-100, 1, 1).dayOfGregorianCal, SysTime(DateTime(-100, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-101, 1, 1).dayOfGregorianCal, SysTime(DateTime(-101, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-105, 1, 1).dayOfGregorianCal, SysTime(DateTime(-105, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-200, 1, 1).dayOfGregorianCal, SysTime(DateTime(-200, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-201, 1, 1).dayOfGregorianCal, SysTime(DateTime(-201, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-300, 1, 1).dayOfGregorianCal, SysTime(DateTime(-300, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-301, 1, 1).dayOfGregorianCal, SysTime(DateTime(-301, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-400, 12, 31).dayOfGregorianCal, SysTime(DateTime(-400, 12, 31, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-400, 1, 1).dayOfGregorianCal, SysTime(DateTime(-400, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-401, 1, 1).dayOfGregorianCal, SysTime(DateTime(-401, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-499, 1, 1).dayOfGregorianCal, SysTime(DateTime(-499, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-500, 1, 1).dayOfGregorianCal, SysTime(DateTime(-500, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-501, 1, 1).dayOfGregorianCal, SysTime(DateTime(-501, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-1000, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1000, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-1001, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1001, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-1599, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1599, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-1600, 12, 31).dayOfGregorianCal, SysTime(DateTime(-1600, 12, 31, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-1600, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1600, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-1601, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1601, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-1900, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1900, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-1901, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1901, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-1999, 1, 1).dayOfGregorianCal, SysTime(DateTime(-1999, 1, 1, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-1999, 7, 6).dayOfGregorianCal, SysTime(DateTime(-1999, 7, 6, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2000, 12, 31).dayOfGregorianCal, SysTime(DateTime(-2000, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2000, 1, 1).dayOfGregorianCal, SysTime(DateTime(-2000, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2001, 1, 1).dayOfGregorianCal, SysTime(DateTime(-2001, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 1, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 1, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 1, 31).dayOfGregorianCal, SysTime(DateTime(-2010, 1, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 2, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 2, 1, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 2, 28).dayOfGregorianCal, SysTime(DateTime(-2010, 2, 28, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 3, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 3, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 3, 31).dayOfGregorianCal, SysTime(DateTime(-2010, 3, 31, 12, 13, 14), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 4, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 4, 1, 12, 13, 14), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 4, 30).dayOfGregorianCal, SysTime(DateTime(-2010, 4, 30, 12, 13, 14), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 5, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 5, 1, 12, 13, 14), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 5, 31).dayOfGregorianCal, SysTime(DateTime(-2010, 5, 31, 23, 59, 59), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 6, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 6, 1, 23, 59, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 6, 30).dayOfGregorianCal, SysTime(DateTime(-2010, 6, 30, 23, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 7, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 7, 1, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 7, 31).dayOfGregorianCal, SysTime(DateTime(-2010, 7, 31, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 8, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 8, 1, 0, 0, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 8, 31).dayOfGregorianCal, SysTime(DateTime(-2010, 8, 31, 0, 0, 0), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 9, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 9, 1, 0, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 9, 30).dayOfGregorianCal, SysTime(DateTime(-2010, 9, 30, 12, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 10, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 10, 1, 0, 12, 0), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 10, 31).dayOfGregorianCal, SysTime(DateTime(-2010, 10, 31, 0, 0, 12), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 11, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 11, 1, 23, 0, 0), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 11, 30).dayOfGregorianCal, SysTime(DateTime(-2010, 11, 30, 0, 59, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 12, 1).dayOfGregorianCal, SysTime(DateTime(-2010, 12, 1, 0, 0, 59), FracSec.from!"hnsecs"(500)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2010, 12, 31).dayOfGregorianCal, SysTime(DateTime(-2010, 12, 31, 0, 59, 59), FracSec.from!"hnsecs"(50_000)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2012, 2, 1).dayOfGregorianCal, SysTime(DateTime(-2012, 2, 1, 23, 0, 59), FracSec.from!"hnsecs"(9_999_999)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2012, 2, 28).dayOfGregorianCal, SysTime(DateTime(-2012, 2, 28, 23, 59, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2012, 2, 29).dayOfGregorianCal, SysTime(DateTime(-2012, 2, 29, 7, 7, 7), FracSec.from!"hnsecs"(7)).dayOfGregorianCal);
- _assertPred!"=="(Date(-2012, 3, 1).dayOfGregorianCal, SysTime(DateTime(-2012, 3, 1, 7, 7, 7), FracSec.from!"hnsecs"(7)).dayOfGregorianCal);
- _assertPred!"=="(Date(-3760, 9, 7).dayOfGregorianCal, SysTime(DateTime(-3760, 9, 7, 0, 0, 0), FracSec.from!"hnsecs"(0)).dayOfGregorianCal);
- }
- }
- /++
- The Xth day of the Gregorian Calendar that this $(D SysTime) is on.
- Setting this property does not affect the time portion of $(D SysTime).
- Params:
- days = The day of the Gregorian Calendar to set this $(D SysTime)
- to.
- Examples:
- --------------------
- auto st = SysTime(DateTime(0, 0, 0, 12, 0, 0));
- st.dayOfGregorianCal = 1;
- assert(st == SysTime(DateTime(1, 1, 1, 12, 0, 0)));
- st.dayOfGregorianCal = 365;
- assert(st == SysTime(DateTime(1, 12, 31, 12, 0, 0)));
- st.dayOfGregorianCal = 366;
- assert(st == SysTime(DateTime(2, 1, 1, 12, 0, 0)));
- st.dayOfGregorianCal = 0;
- assert(st == SysTime(DateTime(0, 12, 31, 12, 0, 0)));
- st.dayOfGregorianCal = -365;
- assert(st == SysTime(DateTime(-0, 1, 1, 12, 0, 0)));
- st.dayOfGregorianCal = -366;
- assert(st == SysTime(DateTime(-1, 12, 31, 12, 0, 0)));
- st.dayOfGregorianCal = 730_120;
- assert(st == SysTime(DateTime(2000, 1, 1, 12, 0, 0)));
- st.dayOfGregorianCal = 734_137;
- assert(st == SysTime(DateTime(2010, 12, 31, 12, 0, 0)));
- --------------------
- +/
- @property void dayOfGregorianCal(int days) nothrow
- {
- auto hnsecs = adjTime;
- hnsecs = removeUnitsFromHNSecs!"days"(hnsecs);
- if(hnsecs < 0)
- hnsecs += convert!("hours", "hnsecs")(24);
- if(--days < 0)
- {
- hnsecs -= convert!("hours", "hnsecs")(24);
- ++days;
- }
- immutable newDaysHNSecs = convert!("days", "hnsecs")(days);
- adjTime = newDaysHNSecs + hnsecs;
- }
- unittest
- {
- version(testStdDateTime)
- {
- void testST(SysTime orig, int day, in SysTime expected, size_t line = __LINE__)
- {
- orig.dayOfGregorianCal = day;
- _assertPred!"=="(orig, expected, "", __FILE__, line);
- }
- //Test A.D.
- 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)));
- 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)));
- 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)));
- //Test B.C.
- 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)));
- 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)));
- 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)));
- 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)));
- //Test Both.
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- 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)));
- auto sysTime = SysTime(DateTime(1, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212));
- void testST2(int day, in SysTime expected, size_t line = __LINE__)
- {
- sysTime.dayOfGregorianCal = day;
- _assertPred!"=="(sysTime, expected, "", __FILE__, line);
- }
- //Test A.D.
- testST2(1, SysTime(DateTime(1, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(2, SysTime(DateTime(1, 1, 2, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(32, SysTime(DateTime(1, 2, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(366, SysTime(DateTime(2, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(731, SysTime(DateTime(3, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(1096, SysTime(DateTime(4, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(1462, SysTime(DateTime(5, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(17_898, SysTime(DateTime(50, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(35_065, SysTime(DateTime(97, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(36_160, SysTime(DateTime(100, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(36_525, SysTime(DateTime(101, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(37_986, SysTime(DateTime(105, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(72_684, SysTime(DateTime(200, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(73_049, SysTime(DateTime(201, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(109_208, SysTime(DateTime(300, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(109_573, SysTime(DateTime(301, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(145_732, SysTime(DateTime(400, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(146_098, SysTime(DateTime(401, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(182_257, SysTime(DateTime(500, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(182_622, SysTime(DateTime(501, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(364_878, SysTime(DateTime(1000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(365_243, SysTime(DateTime(1001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(584_023, SysTime(DateTime(1600, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(584_389, SysTime(DateTime(1601, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(693_596, SysTime(DateTime(1900, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(693_961, SysTime(DateTime(1901, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(729_755, SysTime(DateTime(1999, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(730_120, SysTime(DateTime(2000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(730_486, SysTime(DateTime(2001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(733_773, SysTime(DateTime(2010, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(733_803, SysTime(DateTime(2010, 1, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(733_804, SysTime(DateTime(2010, 2, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(733_831, SysTime(DateTime(2010, 2, 28, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(733_832, SysTime(DateTime(2010, 3, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(733_862, SysTime(DateTime(2010, 3, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(733_863, SysTime(DateTime(2010, 4, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(733_892, SysTime(DateTime(2010, 4, 30, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(733_893, SysTime(DateTime(2010, 5, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(733_923, SysTime(DateTime(2010, 5, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(733_924, SysTime(DateTime(2010, 6, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(733_953, SysTime(DateTime(2010, 6, 30, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(733_954, SysTime(DateTime(2010, 7, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(733_984, SysTime(DateTime(2010, 7, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(733_985, SysTime(DateTime(2010, 8, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_015, SysTime(DateTime(2010, 8, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_016, SysTime(DateTime(2010, 9, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_045, SysTime(DateTime(2010, 9, 30, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_046, SysTime(DateTime(2010, 10, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_076, SysTime(DateTime(2010, 10, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_077, SysTime(DateTime(2010, 11, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_106, SysTime(DateTime(2010, 11, 30, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_107, SysTime(DateTime(2010, 12, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_137, SysTime(DateTime(2010, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_534, SysTime(DateTime(2012, 2, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_561, SysTime(DateTime(2012, 2, 28, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_562, SysTime(DateTime(2012, 2, 29, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_563, SysTime(DateTime(2012, 3, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_534, SysTime(DateTime(2012, 2, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_561, SysTime(DateTime(2012, 2, 28, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_562, SysTime(DateTime(2012, 2, 29, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(734_563, SysTime(DateTime(2012, 3, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- //Test B.C.
- testST2(0, SysTime(DateTime(0, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-1, SysTime(DateTime(0, 12, 30, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-30, SysTime(DateTime(0, 12, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-31, SysTime(DateTime(0, 11, 30, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-366, SysTime(DateTime(-1, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-367, SysTime(DateTime(-1, 12, 30, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-730, SysTime(DateTime(-1, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-731, SysTime(DateTime(-2, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-1095, SysTime(DateTime(-2, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-1096, SysTime(DateTime(-3, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-1460, SysTime(DateTime(-3, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-1461, SysTime(DateTime(-4, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-1826, SysTime(DateTime(-4, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-1827, SysTime(DateTime(-5, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-2191, SysTime(DateTime(-5, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-3652, SysTime(DateTime(-9, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-18_262, SysTime(DateTime(-49, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-18_627, SysTime(DateTime(-50, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-35_794, SysTime(DateTime(-97, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-36_160, SysTime(DateTime(-99, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-36_524, SysTime(DateTime(-99, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-36_889, SysTime(DateTime(-100, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-37_254, SysTime(DateTime(-101, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-38_715, SysTime(DateTime(-105, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-73_413, SysTime(DateTime(-200, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-73_778, SysTime(DateTime(-201, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-109_937, SysTime(DateTime(-300, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-110_302, SysTime(DateTime(-301, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-146_097, SysTime(DateTime(-400, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-146_462, SysTime(DateTime(-400, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-146_827, SysTime(DateTime(-401, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-182_621, SysTime(DateTime(-499, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-182_986, SysTime(DateTime(-500, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-183_351, SysTime(DateTime(-501, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-365_607, SysTime(DateTime(-1000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-365_972, SysTime(DateTime(-1001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-584_387, SysTime(DateTime(-1599, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-584_388, SysTime(DateTime(-1600, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-584_753, SysTime(DateTime(-1600, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-585_118, SysTime(DateTime(-1601, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-694_325, SysTime(DateTime(-1900, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-694_690, SysTime(DateTime(-1901, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-730_484, SysTime(DateTime(-1999, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-730_485, SysTime(DateTime(-2000, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-730_850, SysTime(DateTime(-2000, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-731_215, SysTime(DateTime(-2001, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_502, SysTime(DateTime(-2010, 1, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_472, SysTime(DateTime(-2010, 1, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_471, SysTime(DateTime(-2010, 2, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_444, SysTime(DateTime(-2010, 2, 28, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_443, SysTime(DateTime(-2010, 3, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_413, SysTime(DateTime(-2010, 3, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_412, SysTime(DateTime(-2010, 4, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_383, SysTime(DateTime(-2010, 4, 30, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_382, SysTime(DateTime(-2010, 5, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_352, SysTime(DateTime(-2010, 5, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_351, SysTime(DateTime(-2010, 6, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_322, SysTime(DateTime(-2010, 6, 30, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_321, SysTime(DateTime(-2010, 7, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_291, SysTime(DateTime(-2010, 7, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_290, SysTime(DateTime(-2010, 8, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_260, SysTime(DateTime(-2010, 8, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_259, SysTime(DateTime(-2010, 9, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_230, SysTime(DateTime(-2010, 9, 30, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_229, SysTime(DateTime(-2010, 10, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_199, SysTime(DateTime(-2010, 10, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_198, SysTime(DateTime(-2010, 11, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_169, SysTime(DateTime(-2010, 11, 30, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_168, SysTime(DateTime(-2010, 12, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-734_138, SysTime(DateTime(-2010, 12, 31, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-735_202, SysTime(DateTime(-2012, 2, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-735_175, SysTime(DateTime(-2012, 2, 28, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-735_174, SysTime(DateTime(-2012, 2, 29, 12, 2, 9), FracSec.from!"msecs"(212)));
- testST2(-735_173, SysTime(DateTime(-2012, 3, 1, 12, 2, 9), FracSec.from!"msecs"(212)));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(!__traits(compiles, cst.dayOfGregorianCal = 7));
- //static assert(!__traits(compiles, ist.dayOfGregorianCal = 7));
- //Verify Examples.
- auto st = SysTime(DateTime(0, 1, 1, 12, 0, 0));
- st.dayOfGregorianCal = 1;
- assert(st == SysTime(DateTime(1, 1, 1, 12, 0, 0)));
- st.dayOfGregorianCal = 365;
- assert(st == SysTime(DateTime(1, 12, 31, 12, 0, 0)));
- st.dayOfGregorianCal = 366;
- assert(st == SysTime(DateTime(2, 1, 1, 12, 0, 0)));
- st.dayOfGregorianCal = 0;
- assert(st == SysTime(DateTime(0, 12, 31, 12, 0, 0)));
- st.dayOfGregorianCal = -365;
- assert(st == SysTime(DateTime(-0, 1, 1, 12, 0, 0)));
- st.dayOfGregorianCal = -366;
- assert(st == SysTime(DateTime(-1, 12, 31, 12, 0, 0)));
- st.dayOfGregorianCal = 730_120;
- assert(st == SysTime(DateTime(2000, 1, 1, 12, 0, 0)));
- st.dayOfGregorianCal = 734_137;
- assert(st == SysTime(DateTime(2010, 12, 31, 12, 0, 0)));
- }
- }
- /++
- The ISO 8601 week of the year that this $(D SysTime) is in.
- See_Also:
- $(WEB en.wikipedia.org/wiki/ISO_week_date, ISO Week Date).
- +/
- @property ubyte isoWeek() const nothrow
- {
- return (cast(Date)this).isoWeek;
- }
- unittest
- {
- version(testStdDateTime)
- {
- auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, st.isoWeek));
- static assert(__traits(compiles, cst.isoWeek));
- //static assert(__traits(compiles, ist.isoWeek));
- }
- }
- /++
- $(D SysTime) for the last day in the month that this Date is in.
- The time portion of endOfMonth is always 23:59:59.9999999.
- Examples:
- --------------------
- assert(SysTime(DateTime(1999, 1, 6, 0, 0, 0)).endOfMonth ==
- SysTime(DateTime(1999, 1, 31, 23, 59, 59),
- FracSec.from!"hnsecs"(9_999_999)));
- 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)));
- 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)));
- 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)));
- --------------------
- +/
- @property SysTime endOfMonth() const nothrow
- {
- immutable hnsecs = adjTime;
- immutable days = getUnitsFromHNSecs!"days"(hnsecs);
- auto date = Date(cast(int)days + 1).endOfMonth;
- auto newDays = date.dayOfGregorianCal - 1;
- long theTimeHNSecs;
- if(newDays < 0)
- {
- theTimeHNSecs = -1;
- ++newDays;
- }
- else
- theTimeHNSecs = convert!("days", "hnsecs")(1) - 1;
- immutable newDaysHNSecs = convert!("days", "hnsecs")(newDays);
- auto retval = SysTime(this._stdTime, this._timezone);
- retval.adjTime = newDaysHNSecs + theTimeHNSecs;
- return retval;
- }
- unittest
- {
- version(testStdDateTime)
- {
- //Test A.D.
- _assertPred!"=="(SysTime(Date(1999, 1, 1)).endOfMonth, SysTime(DateTime(1999, 1, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(1999, 2, 1)).endOfMonth, SysTime(DateTime(1999, 2, 28, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(2000, 2, 1)).endOfMonth, SysTime(DateTime(2000, 2, 29, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(1999, 3, 1)).endOfMonth, SysTime(DateTime(1999, 3, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(1999, 4, 1)).endOfMonth, SysTime(DateTime(1999, 4, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(1999, 5, 1)).endOfMonth, SysTime(DateTime(1999, 5, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(1999, 6, 1)).endOfMonth, SysTime(DateTime(1999, 6, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(1999, 7, 1)).endOfMonth, SysTime(DateTime(1999, 7, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(1999, 8, 1)).endOfMonth, SysTime(DateTime(1999, 8, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(1999, 9, 1)).endOfMonth, SysTime(DateTime(1999, 9, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(1999, 10, 1)).endOfMonth, SysTime(DateTime(1999, 10, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(1999, 11, 1)).endOfMonth, SysTime(DateTime(1999, 11, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(1999, 12, 1)).endOfMonth, SysTime(DateTime(1999, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- //Test B.C.
- _assertPred!"=="(SysTime(Date(-1999, 1, 1)).endOfMonth, SysTime(DateTime(-1999, 1, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(-1999, 2, 1)).endOfMonth, SysTime(DateTime(-1999, 2, 28, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(-2000, 2, 1)).endOfMonth, SysTime(DateTime(-2000, 2, 29, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(-1999, 3, 1)).endOfMonth, SysTime(DateTime(-1999, 3, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(-1999, 4, 1)).endOfMonth, SysTime(DateTime(-1999, 4, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(-1999, 5, 1)).endOfMonth, SysTime(DateTime(-1999, 5, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(-1999, 6, 1)).endOfMonth, SysTime(DateTime(-1999, 6, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(-1999, 7, 1)).endOfMonth, SysTime(DateTime(-1999, 7, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(-1999, 8, 1)).endOfMonth, SysTime(DateTime(-1999, 8, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(-1999, 9, 1)).endOfMonth, SysTime(DateTime(-1999, 9, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(-1999, 10, 1)).endOfMonth, SysTime(DateTime(-1999, 10, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(-1999, 11, 1)).endOfMonth, SysTime(DateTime(-1999, 11, 30, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- _assertPred!"=="(SysTime(Date(-1999, 12, 1)).endOfMonth, SysTime(DateTime(-1999, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cst.endOfMonth));
- //static assert(__traits(compiles, ist.endOfMonth));
- //Verify Examples.
- assert(SysTime(DateTime(1999, 1, 6, 0, 0, 0)).endOfMonth == SysTime(DateTime(1999, 1, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999)));
- 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)));
- 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)));
- 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)));
- }
- }
- /++
- The last day in the month that this $(D SysTime) is in.
- Examples:
- --------------------
- assert(SysTime(DateTime(1999, 1, 6, 0, 0, 0)).daysInMonth == 31);
- assert(SysTime(DateTime(1999, 2, 7, 19, 30, 0)).daysInMonth == 28);
- assert(SysTime(DateTime(2000, 2, 7, 5, 12, 27)).daysInMonth == 29);
- assert(SysTime(DateTime(2000, 6, 4, 12, 22, 9)).daysInMonth == 30);
- --------------------
- +/
- @property ubyte daysInMonth() const nothrow
- {
- return Date(dayOfGregorianCal).daysInMonth;
- }
- /++
- $(RED Scheduled for deprecation in January 2012.
- Please use daysInMonth instead.)
- +/
- alias daysInMonth endofMonthDay;
- unittest
- {
- version(testStdDateTime)
- {
- //Test A.D.
- _assertPred!"=="(SysTime(DateTime(1999, 1, 1, 12, 1, 13)).daysInMonth, 31);
- _assertPred!"=="(SysTime(DateTime(1999, 2, 1, 17, 13, 12)).daysInMonth, 28);
- _assertPred!"=="(SysTime(DateTime(2000, 2, 1, 13, 2, 12)).daysInMonth, 29);
- _assertPred!"=="(SysTime(DateTime(1999, 3, 1, 12, 13, 12)).daysInMonth, 31);
- _assertPred!"=="(SysTime(DateTime(1999, 4, 1, 12, 6, 13)).daysInMonth, 30);
- _assertPred!"=="(SysTime(DateTime(1999, 5, 1, 15, 13, 12)).daysInMonth, 31);
- _assertPred!"=="(SysTime(DateTime(1999, 6, 1, 13, 7, 12)).daysInMonth, 30);
- _assertPred!"=="(SysTime(DateTime(1999, 7, 1, 12, 13, 17)).daysInMonth, 31);
- _assertPred!"=="(SysTime(DateTime(1999, 8, 1, 12, 3, 13)).daysInMonth, 31);
- _assertPred!"=="(SysTime(DateTime(1999, 9, 1, 12, 13, 12)).daysInMonth, 30);
- _assertPred!"=="(SysTime(DateTime(1999, 10, 1, 13, 19, 12)).daysInMonth, 31);
- _assertPred!"=="(SysTime(DateTime(1999, 11, 1, 12, 13, 17)).daysInMonth, 30);
- _assertPred!"=="(SysTime(DateTime(1999, 12, 1, 12, 52, 13)).daysInMonth, 31);
- //Test B.C.
- _assertPred!"=="(SysTime(DateTime(-1999, 1, 1, 12, 1, 13)).daysInMonth, 31);
- _assertPred!"=="(SysTime(DateTime(-1999, 2, 1, 7, 13, 12)).daysInMonth, 28);
- _assertPred!"=="(SysTime(DateTime(-2000, 2, 1, 13, 2, 12)).daysInMonth, 29);
- _assertPred!"=="(SysTime(DateTime(-1999, 3, 1, 12, 13, 12)).daysInMonth, 31);
- _assertPred!"=="(SysTime(DateTime(-1999, 4, 1, 12, 6, 13)).daysInMonth, 30);
- _assertPred!"=="(SysTime(DateTime(-1999, 5, 1, 5, 13, 12)).daysInMonth, 31);
- _assertPred!"=="(SysTime(DateTime(-1999, 6, 1, 13, 7, 12)).daysInMonth, 30);
- _assertPred!"=="(SysTime(DateTime(-1999, 7, 1, 12, 13, 17)).daysInMonth, 31);
- _assertPred!"=="(SysTime(DateTime(-1999, 8, 1, 12, 3, 13)).daysInMonth, 31);
- _assertPred!"=="(SysTime(DateTime(-1999, 9, 1, 12, 13, 12)).daysInMonth, 30);
- _assertPred!"=="(SysTime(DateTime(-1999, 10, 1, 13, 19, 12)).daysInMonth, 31);
- _assertPred!"=="(SysTime(DateTime(-1999, 11, 1, 12, 13, 17)).daysInMonth, 30);
- _assertPred!"=="(SysTime(DateTime(-1999, 12, 1, 12, 52, 13)).daysInMonth, 31);
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cst.daysInMonth));
- //static assert(__traits(compiles, ist.daysInMonth));
- //Verify Examples.
- assert(SysTime(DateTime(1999, 1, 6, 0, 0, 0)).daysInMonth == 31);
- assert(SysTime(DateTime(1999, 2, 7, 19, 30, 0)).daysInMonth == 28);
- assert(SysTime(DateTime(2000, 2, 7, 5, 12, 27)).daysInMonth == 29);
- assert(SysTime(DateTime(2000, 6, 4, 12, 22, 9)).daysInMonth == 30);
- }
- }
- /++
- Whether the current year is a date in A.D.
- Examples:
- --------------------
- assert(SysTime(DateTime(1, 1, 1, 12, 7, 0)).isAD);
- assert(SysTime(DateTime(2010, 12, 31, 0, 0, 0)).isAD);
- assert(!SysTime(DateTime(0, 12, 31, 23, 59, 59)).isAD);
- assert(!SysTime(DateTime(-2010, 1, 1, 2, 2, 2)).isAD);
- --------------------
- +/
- @property bool isAD() const nothrow
- {
- return adjTime >= 0;
- }
- unittest
- {
- version(testStdDateTime)
- {
- assert(SysTime(DateTime(2010, 7, 4, 12, 0, 9)).isAD);
- assert(SysTime(DateTime(1, 1, 1, 0, 0, 0)).isAD);
- assert(!SysTime(DateTime(0, 12, 31, 23, 59, 59)).isAD);
- assert(!SysTime(DateTime(0, 1, 1, 23, 59, 59)).isAD);
- assert(!SysTime(DateTime(-1, 1, 1, 23 ,59 ,59)).isAD);
- assert(!SysTime(DateTime(-2010, 7, 4, 12, 2, 2)).isAD);
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cst.isAD));
- //static assert(__traits(compiles, ist.isAD));
- //Verify Examples.
- assert(SysTime(DateTime(1, 1, 1, 12, 7, 0)).isAD);
- assert(SysTime(DateTime(2010, 12, 31, 0, 0, 0)).isAD);
- assert(!SysTime(DateTime(0, 12, 31, 23, 59, 59)).isAD);
- assert(!SysTime(DateTime(-2010, 1, 1, 2, 2, 2)).isAD);
- }
- }
- /++
- The julian day for this $(D SysTime) at the given time. For example,
- prior to noon, 1996-03-31 would be the julian day number 2_450_173, so
- this function returns 2_450_173, while from noon onward, the julian
- day number would be 2_450_174, so this function returns 2_450_174.
- +/
- @property long julianDay() const nothrow
- {
- immutable jd = dayOfGregorianCal + 1_721_425;
- return hour < 12 ? jd - 1 : jd;
- }
- unittest
- {
- version(testStdDateTime)
- {
- _assertPred!"=="(SysTime(DateTime(-4713, 11, 24, 0, 0, 0)).julianDay, -1);
- _assertPred!"=="(SysTime(DateTime(-4713, 11, 24, 12, 0, 0)).julianDay, 0);
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 0, 0, 0)).julianDay, 1_721_424);
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 12, 0, 0)).julianDay, 1_721_425);
- _assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0)).julianDay, 1_721_425);
- _assertPred!"=="(SysTime(DateTime(1, 1, 1, 12, 0, 0)).julianDay, 1_721_426);
- _assertPred!"=="(SysTime(DateTime(1582, 10, 15, 0, 0, 0)).julianDay, 2_299_160);
- _assertPred!"=="(SysTime(DateTime(1582, 10, 15, 12, 0, 0)).julianDay, 2_299_161);
- _assertPred!"=="(SysTime(DateTime(1858, 11, 17, 0, 0, 0)).julianDay, 2_400_000);
- _assertPred!"=="(SysTime(DateTime(1858, 11, 17, 12, 0, 0)).julianDay, 2_400_001);
- _assertPred!"=="(SysTime(DateTime(1982, 1, 4, 0, 0, 0)).julianDay, 2_444_973);
- _assertPred!"=="(SysTime(DateTime(1982, 1, 4, 12, 0, 0)).julianDay, 2_444_974);
- _assertPred!"=="(SysTime(DateTime(1996, 3, 31, 0, 0, 0)).julianDay, 2_450_173);
- _assertPred!"=="(SysTime(DateTime(1996, 3, 31, 12, 0, 0)).julianDay, 2_450_174);
- _assertPred!"=="(SysTime(DateTime(2010, 8, 24, 0, 0, 0)).julianDay, 2_455_432);
- _assertPred!"=="(SysTime(DateTime(2010, 8, 24, 12, 0, 0)).julianDay, 2_455_433);
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cst.julianDay));
- //static assert(__traits(compiles, ist.julianDay));
- }
- }
- /++
- The modified julian day for any time on this date (since, the modified
- julian day changes at midnight).
- +/
- @property long modJulianDay() const nothrow
- {
- return (dayOfGregorianCal + 1_721_425) - 2_400_001;
- }
- unittest
- {
- version(testStdDateTime)
- {
- _assertPred!"=="(SysTime(DateTime(1858, 11, 17, 0, 0, 0)).modJulianDay, 0);
- _assertPred!"=="(SysTime(DateTime(1858, 11, 17, 12, 0, 0)).modJulianDay, 0);
- _assertPred!"=="(SysTime(DateTime(2010, 8, 24, 0, 0, 0)).modJulianDay, 55_432);
- _assertPred!"=="(SysTime(DateTime(2010, 8, 24, 12, 0, 0)).modJulianDay, 55_432);
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cst.modJulianDay));
- //static assert(__traits(compiles, ist.modJulianDay));
- }
- }
- /++
- Returns a $(D Date) equivalent to this $(D SysTime).
- +/
- Date opCast(T)() const nothrow
- if(is(Unqual!T == Date))
- {
- return Date(dayOfGregorianCal);
- }
- unittest
- {
- version(testStdDateTime)
- {
- _assertPred!"=="(cast(Date)SysTime(Date(1999, 7, 6)), Date(1999, 7, 6));
- _assertPred!"=="(cast(Date)SysTime(Date(2000, 12, 31)), Date(2000, 12, 31));
- _assertPred!"=="(cast(Date)SysTime(Date(2001, 1, 1)), Date(2001, 1, 1));
- _assertPred!"=="(cast(Date)SysTime(DateTime(1999, 7, 6, 12, 10, 9)), Date(1999, 7, 6));
- _assertPred!"=="(cast(Date)SysTime(DateTime(2000, 12, 31, 13, 11, 10)), Date(2000, 12, 31));
- _assertPred!"=="(cast(Date)SysTime(DateTime(2001, 1, 1, 14, 12, 11)), Date(2001, 1, 1));
- _assertPred!"=="(cast(Date)SysTime(Date(-1999, 7, 6)), Date(-1999, 7, 6));
- _assertPred!"=="(cast(Date)SysTime(Date(-2000, 12, 31)), Date(-2000, 12, 31));
- _assertPred!"=="(cast(Date)SysTime(Date(-2001, 1, 1)), Date(-2001, 1, 1));
- _assertPred!"=="(cast(Date)SysTime(DateTime(-1999, 7, 6, 12, 10, 9)), Date(-1999, 7, 6));
- _assertPred!"=="(cast(Date)SysTime(DateTime(-2000, 12, 31, 13, 11, 10)), Date(-2000, 12, 31));
- _assertPred!"=="(cast(Date)SysTime(DateTime(-2001, 1, 1, 14, 12, 11)), Date(-2001, 1, 1));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cast(Date)cst));
- //static assert(__traits(compiles, cast(Date)ist));
- }
- }
- /++
- Returns a $(D DateTime) equivalent to this $(D SysTime).
- +/
- DateTime opCast(T)() const nothrow
- if(is(Unqual!T == DateTime))
- {
- try
- {
- auto hnsecs = adjTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1;
- if(hnsecs < 0)
- {
- hnsecs += convert!("hours", "hnsecs")(24);
- --days;
- }
- immutable hour = splitUnitsFromHNSecs!"hours"(hnsecs);
- immutable minute = splitUnitsFromHNSecs!"minutes"(hnsecs);
- immutable second = getUnitsFromHNSecs!"seconds"(hnsecs);
- return DateTime(Date(cast(int)days), TimeOfDay(cast(int)hour, cast(int)minute, cast(int)second));
- }
- catch(Exception e)
- assert(0, "Either DateTime's constructor or TimeOfDay's constructor threw.");
- }
- unittest
- {
- version(testStdDateTime)
- {
- _assertPred!"=="(cast(DateTime)SysTime(DateTime(1, 1, 6, 7, 12, 22)), DateTime(1, 1, 6, 7, 12, 22));
- _assertPred!"=="(cast(DateTime)SysTime(DateTime(1, 1, 6, 7, 12, 22), FracSec.from!"msecs"(22)), DateTime(1, 1, 6, 7, 12, 22));
- _assertPred!"=="(cast(DateTime)SysTime(Date(1999, 7, 6)), DateTime(1999, 7, 6, 0, 0, 0));
- _assertPred!"=="(cast(DateTime)SysTime(Date(2000, 12, 31)), DateTime(2000, 12, 31, 0, 0, 0));
- _assertPred!"=="(cast(DateTime)SysTime(Date(2001, 1, 1)), DateTime(2001, 1, 1, 0, 0, 0));
- _assertPred!"=="(cast(DateTime)SysTime(DateTime(1999, 7, 6, 12, 10, 9)), DateTime(1999, 7, 6, 12, 10, 9));
- _assertPred!"=="(cast(DateTime)SysTime(DateTime(2000, 12, 31, 13, 11, 10)), DateTime(2000, 12, 31, 13, 11, 10));
- _assertPred!"=="(cast(DateTime)SysTime(DateTime(2001, 1, 1, 14, 12, 11)), DateTime(2001, 1, 1, 14, 12, 11));
- _assertPred!"=="(cast(DateTime)SysTime(DateTime(-1, 1, 6, 7, 12, 22)), DateTime(-1, 1, 6, 7, 12, 22));
- _assertPred!"=="(cast(DateTime)SysTime(DateTime(-1, 1, 6, 7, 12, 22), FracSec.from!"msecs"(22)), DateTime(-1, 1, 6, 7, 12, 22));
- _assertPred!"=="(cast(DateTime)SysTime(Date(-1999, 7, 6)), DateTime(-1999, 7, 6, 0, 0, 0));
- _assertPred!"=="(cast(DateTime)SysTime(Date(-2000, 12, 31)), DateTime(-2000, 12, 31, 0, 0, 0));
- _assertPred!"=="(cast(DateTime)SysTime(Date(-2001, 1, 1)), DateTime(-2001, 1, 1, 0, 0, 0));
- _assertPred!"=="(cast(DateTime)SysTime(DateTime(-1999, 7, 6, 12, 10, 9)), DateTime(-1999, 7, 6, 12, 10, 9));
- _assertPred!"=="(cast(DateTime)SysTime(DateTime(-2000, 12, 31, 13, 11, 10)), DateTime(-2000, 12, 31, 13, 11, 10));
- _assertPred!"=="(cast(DateTime)SysTime(DateTime(-2001, 1, 1, 14, 12, 11)), DateTime(-2001, 1, 1, 14, 12, 11));
- _assertPred!"=="(cast(DateTime)SysTime(DateTime(2011, 1, 13, 8, 17, 2), FracSec.from!"msecs"(296), LocalTime()),
- DateTime(2011, 1, 13, 8, 17, 2));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cast(DateTime)cst));
- //static assert(__traits(compiles, cast(DateTime)ist));
- }
- }
- /++
- Returns a $(D TimeOfDay) equivalent to this $(D SysTime).
- +/
- TimeOfDay opCast(T)() const nothrow
- if(is(Unqual!T == TimeOfDay))
- {
- try
- {
- auto hnsecs = adjTime;
- hnsecs = removeUnitsFromHNSecs!"days"(hnsecs);
- if(hnsecs < 0)
- hnsecs += convert!("hours", "hnsecs")(24);
- immutable hour = splitUnitsFromHNSecs!"hours"(hnsecs);
- immutable minute = splitUnitsFromHNSecs!"minutes"(hnsecs);
- immutable second = getUnitsFromHNSecs!"seconds"(hnsecs);
- return TimeOfDay(cast(int)hour, cast(int)minute, cast(int)second);
- }
- catch(Exception e)
- assert(0, "TimeOfDay's constructor threw.");
- }
- unittest
- {
- version(testStdDateTime)
- {
- _assertPred!"=="(cast(TimeOfDay)SysTime(Date(1999, 7, 6)), TimeOfDay(0, 0, 0));
- _assertPred!"=="(cast(TimeOfDay)SysTime(Date(2000, 12, 31)), TimeOfDay(0, 0, 0));
- _assertPred!"=="(cast(TimeOfDay)SysTime(Date(2001, 1, 1)), TimeOfDay(0, 0, 0));
- _assertPred!"=="(cast(TimeOfDay)SysTime(DateTime(1999, 7, 6, 12, 10, 9)), TimeOfDay(12, 10, 9));
- _assertPred!"=="(cast(TimeOfDay)SysTime(DateTime(2000, 12, 31, 13, 11, 10)), TimeOfDay(13, 11, 10));
- _assertPred!"=="(cast(TimeOfDay)SysTime(DateTime(2001, 1, 1, 14, 12, 11)), TimeOfDay(14, 12, 11));
- _assertPred!"=="(cast(TimeOfDay)SysTime(Date(-1999, 7, 6)), TimeOfDay(0, 0, 0));
- _assertPred!"=="(cast(TimeOfDay)SysTime(Date(-2000, 12, 31)), TimeOfDay(0, 0, 0));
- _assertPred!"=="(cast(TimeOfDay)SysTime(Date(-2001, 1, 1)), TimeOfDay(0, 0, 0));
- _assertPred!"=="(cast(TimeOfDay)SysTime(DateTime(-1999, 7, 6, 12, 10, 9)), TimeOfDay(12, 10, 9));
- _assertPred!"=="(cast(TimeOfDay)SysTime(DateTime(-2000, 12, 31, 13, 11, 10)), TimeOfDay(13, 11, 10));
- _assertPred!"=="(cast(TimeOfDay)SysTime(DateTime(-2001, 1, 1, 14, 12, 11)), TimeOfDay(14, 12, 11));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cast(TimeOfDay)cst));
- //static assert(__traits(compiles, cast(TimeOfDay)ist));
- }
- }
- //Temporary hack until bug http://d.puremagic.com/issues/show_bug.cgi?id=4867 is fixed.
- //This allows assignment from const(SysTime) to SysTime.
- //It may be a good idea to keep it though, since casting from a type to itself
- //should be allowed, and it doesn't work without this opCast() since opCast()
- //has already been defined for other types.
- SysTime opCast(T)() const pure nothrow
- if(is(Unqual!T == SysTime))
- {
- return SysTime(_stdTime, _timezone);
- }
- /++
- Converts this $(D SysTime) to a string with the format
- YYYYMMDDTHHMMSS.FFFFFFFTZ (where F is fractional seconds and TZ is time
- zone).
- Note that the number of digits in the fractional seconds varies with the
- number of fractional seconds. It's a maximum of 7 (which would be
- hnsecs), but only has as many as are necessary to hold the correct value
- (so no trailing zeroes), and if there are no fractional seconds, then
- there is no decimal point.
- If this $(D SysTime)'s time zone is $(D LocalTime), then TZ is empty.
- If its time zone is $(D UTC), then it is "Z". Otherwise, it is the
- offset from UTC (e.g. +1:00 or -7:00). Note that the offset from UTC
- is $(I not) enough to uniquely identify the time zone.
- Time zone offsets will be in the form +HH:MM or -HH:MM.
- Examples:
- --------------------
- assert(SysTime(DateTime(2010, 7, 4, 7, 6, 12)).toISOString() ==
- "20100704T070612");
- assert(SysTime(DateTime(1998, 12, 25, 2, 15, 0),
- FracSec.from!"msecs"(24)).toISOString() ==
- "19981225T021500.024");
- assert(SysTime(DateTime(0, 1, 5, 23, 9, 59)).toISOString() ==
- "00000105T230959");
- assert(SysTime(DateTime(-4, 1, 5, 0, 0, 2),
- FracSec.from!"hnsecs"(520_920)).toISOString() ==
- "-00040105T000002.052092");
- --------------------
- +/
- string toISOString() const nothrow
- {
- try
- {
- immutable adjustedTime = adjTime;
- long hnsecs = adjustedTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1;
- if(hnsecs < 0)
- {
- hnsecs += convert!("hours", "hnsecs")(24);
- --days;
- }
- auto hour = splitUnitsFromHNSecs!"hours"(hnsecs);
- auto minute = splitUnitsFromHNSecs!"minutes"(hnsecs);
- auto second = splitUnitsFromHNSecs!"seconds"(hnsecs);
- auto dateTime = DateTime(Date(cast(int)days), TimeOfDay(cast(int)hour, cast(int)minute, cast(int)second));
- auto fracSecStr = fracSecToISOString(cast(int)hnsecs);
- if(_timezone is LocalTime())
- return dateTime.toISOString() ~ fracSecToISOString(cast(int)hnsecs);
- if(_timezone is UTC())
- return dateTime.toISOString() ~ fracSecToISOString(cast(int)hnsecs) ~ "Z";
- immutable utcOffset = cast(int)convert!("hnsecs", "minutes")(adjustedTime - stdTime);
- return dateTime.toISOString() ~ fracSecToISOString(cast(int)hnsecs) ~ SimpleTimeZone.toISOString(utcOffset);
- }
- catch(Exception e)
- assert(0, "format() threw.");
- }
- unittest
- {
- version(testStdDateTime)
- {
- //Test A.D.
- _assertPred!"=="(SysTime(DateTime.init, UTC()).toISOString(), "00010101T000000Z");
- _assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1), UTC()).toISOString(), "00010101T000000.0000001Z");
- _assertPred!"=="(SysTime(DateTime(9, 12, 4, 0, 0, 0)).toISOString(), "00091204T000000");
- _assertPred!"=="(SysTime(DateTime(99, 12, 4, 5, 6, 12)).toISOString(), "00991204T050612");
- _assertPred!"=="(SysTime(DateTime(999, 12, 4, 13, 44, 59)).toISOString(), "09991204T134459");
- _assertPred!"=="(SysTime(DateTime(9999, 7, 4, 23, 59, 59)).toISOString(), "99990704T235959");
- _assertPred!"=="(SysTime(DateTime(10000, 10, 20, 1, 1, 1)).toISOString(), "+100001020T010101");
- _assertPred!"=="(SysTime(DateTime(9, 12, 4, 0, 0, 0), FracSec.from!"msecs"(42)).toISOString(), "00091204T000000.042");
- _assertPred!"=="(SysTime(DateTime(99, 12, 4, 5, 6, 12), FracSec.from!"msecs"(100)).toISOString(), "00991204T050612.1");
- _assertPred!"=="(SysTime(DateTime(999, 12, 4, 13, 44, 59), FracSec.from!"usecs"(45020)).toISOString(), "09991204T134459.04502");
- _assertPred!"=="(SysTime(DateTime(9999, 7, 4, 23, 59, 59), FracSec.from!"hnsecs"(12)).toISOString(), "99990704T235959.0000012");
- _assertPred!"=="(SysTime(DateTime(10000, 10, 20, 1, 1, 1), FracSec.from!"hnsecs"(507890)).toISOString(), "+100001020T010101.050789");
- _assertPred!"=="(SysTime(DateTime(2012, 12, 21, 12, 12, 12),
- new SimpleTimeZone(-360)).toISOString(),
- "20121221T121212-06:00");
- _assertPred!"=="(SysTime(DateTime(2012, 12, 21, 12, 12, 12),
- new SimpleTimeZone(420)).toISOString(),
- "20121221T121212+07:00");
- //Test B.C.
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).toISOString(), "00001231T235959.9999999Z");
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1), UTC()).toISOString(), "00001231T235959.0000001Z");
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), UTC()).toISOString(), "00001231T235959Z");
- _assertPred!"=="(SysTime(DateTime(0, 12, 4, 0, 12, 4)).toISOString(), "00001204T001204");
- _assertPred!"=="(SysTime(DateTime(-9, 12, 4, 0, 0, 0)).toISOString(), "-00091204T000000");
- _assertPred!"=="(SysTime(DateTime(-99, 12, 4, 5, 6, 12)).toISOString(), "-00991204T050612");
- _assertPred!"=="(SysTime(DateTime(-999, 12, 4, 13, 44, 59)).toISOString(), "-09991204T134459");
- _assertPred!"=="(SysTime(DateTime(-9999, 7, 4, 23, 59, 59)).toISOString(), "-99990704T235959");
- _assertPred!"=="(SysTime(DateTime(-10000, 10, 20, 1, 1, 1)).toISOString(), "-100001020T010101");
- _assertPred!"=="(SysTime(DateTime(0, 12, 4, 0, 0, 0), FracSec.from!"msecs"(7)).toISOString(), "00001204T000000.007");
- _assertPred!"=="(SysTime(DateTime(-9, 12, 4, 0, 0, 0), FracSec.from!"msecs"(42)).toISOString(), "-00091204T000000.042");
- _assertPred!"=="(SysTime(DateTime(-99, 12, 4, 5, 6, 12), FracSec.from!"msecs"(100)).toISOString(), "-00991204T050612.1");
- _assertPred!"=="(SysTime(DateTime(-999, 12, 4, 13, 44, 59), FracSec.from!"usecs"(45020)).toISOString(), "-09991204T134459.04502");
- _assertPred!"=="(SysTime(DateTime(-9999, 7, 4, 23, 59, 59), FracSec.from!"hnsecs"(12)).toISOString(), "-99990704T235959.0000012");
- _assertPred!"=="(SysTime(DateTime(-10000, 10, 20, 1, 1, 1), FracSec.from!"hnsecs"(507890)).toISOString(), "-100001020T010101.050789");
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cast(TimeOfDay)cst));
- //static assert(__traits(compiles, cast(TimeOfDay)ist));
- //Verify Examples.
- assert(SysTime(DateTime(2010, 7, 4, 7, 6, 12)).toISOString() ==
- "20100704T070612");
- assert(SysTime(DateTime(1998, 12, 25, 2, 15, 0),
- FracSec.from!"msecs"(24)).toISOString() ==
- "19981225T021500.024");
- assert(SysTime(DateTime(0, 1, 5, 23, 9, 59)).toISOString() ==
- "00000105T230959");
- assert(SysTime(DateTime(-4, 1, 5, 0, 0, 2),
- FracSec.from!"hnsecs"(520_920)).toISOString() ==
- "-00040105T000002.052092");
- }
- }
- /++
- Converts this $(D SysTime) to a string with the format
- YYYY-MM-DDTHH:MM:SS.FFFFFFFTZ (where F is fractional seconds and TZ
- is the time zone).
- Note that the number of digits in the fractional seconds varies with the
- number of fractional seconds. It's a maximum of 7 (which would be
- hnsecs), but only has as many as are necessary to hold the correct value
- (so no trailing zeroes), and if there are no fractional seconds, then
- there is no decimal point.
- If this $(D SysTime)'s time zone is $(D LocalTime), then TZ is empty. If
- its time zone is $(D UTC), then it is "Z". Otherwise, it is the offset
- from UTC (e.g. +1:00 or -7:00). Note that the offset from UTC is
- $(I not) enough to uniquely identify the time zone.
- Time zone offsets will be in the form +HH:MM or -HH:MM.
- Examples:
- --------------------
- assert(SysTime(DateTime(2010, 7, 4, 7, 6, 12)).toISOExtString() ==
- "2010-07-04T07:06:12");
- assert(SysTime(DateTime(1998, 12, 25, 2, 15, 0),
- FracSec.from!"msecs"(24)).toISOExtString() ==
- "1998-12-25T02:15:00.024");
- assert(SysTime(DateTime(0, 1, 5, 23, 9, 59)).toISOExtString() ==
- "0000-01-05T23:09:59");
- assert(SysTime(DateTime(-4, 1, 5, 0, 0, 2),
- FracSec.from!"hnsecs"(520_920)).toISOExtString() ==
- "-0004-01-05T00:00:02.052092");
- --------------------
- +/
- string toISOExtString() const nothrow
- {
- try
- {
- immutable adjustedTime = adjTime;
- long hnsecs = adjustedTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1;
- if(hnsecs < 0)
- {
- hnsecs += convert!("hours", "hnsecs")(24);
- --days;
- }
- auto hour = splitUnitsFromHNSecs!"hours"(hnsecs);
- auto minute = splitUnitsFromHNSecs!"minutes"(hnsecs);
- auto second = splitUnitsFromHNSecs!"seconds"(hnsecs);
- auto dateTime = DateTime(Date(cast(int)days), TimeOfDay(cast(int)hour, cast(int)minute, cast(int)second));
- auto fracSecStr = fracSecToISOString(cast(int)hnsecs);
- if(_timezone is LocalTime())
- return dateTime.toISOExtString() ~ fracSecToISOString(cast(int)hnsecs);
- if(_timezone is UTC())
- return dateTime.toISOExtString() ~ fracSecToISOString(cast(int)hnsecs) ~ "Z";
- immutable utcOffset = cast(int)convert!("hnsecs", "minutes")(adjustedTime - stdTime);
- return dateTime.toISOExtString() ~ fracSecToISOString(cast(int)hnsecs) ~ SimpleTimeZone.toISOString(utcOffset);
- }
- catch(Exception e)
- assert(0, "format() threw.");
- }
- /++
- $(RED Scheduled for deprecation in November 2011.
- Please use toISOExtString instead.)
- +/
- alias toISOExtString toISOExtendedString;
- unittest
- {
- version(testStdDateTime)
- {
- //Test A.D.
- _assertPred!"=="(SysTime(DateTime.init, UTC()).toISOExtString(), "0001-01-01T00:00:00Z");
- _assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1), UTC()).toISOExtString(), "0001-01-01T00:00:00.0000001Z");
- _assertPred!"=="(SysTime(DateTime(9, 12, 4, 0, 0, 0)).toISOExtString(), "0009-12-04T00:00:00");
- _assertPred!"=="(SysTime(DateTime(99, 12, 4, 5, 6, 12)).toISOExtString(), "0099-12-04T05:06:12");
- _assertPred!"=="(SysTime(DateTime(999, 12, 4, 13, 44, 59)).toISOExtString(), "0999-12-04T13:44:59");
- _assertPred!"=="(SysTime(DateTime(9999, 7, 4, 23, 59, 59)).toISOExtString(), "9999-07-04T23:59:59");
- _assertPred!"=="(SysTime(DateTime(10000, 10, 20, 1, 1, 1)).toISOExtString(), "+10000-10-20T01:01:01");
- _assertPred!"=="(SysTime(DateTime(9, 12, 4, 0, 0, 0), FracSec.from!"msecs"(42)).toISOExtString(), "0009-12-04T00:00:00.042");
- _assertPred!"=="(SysTime(DateTime(99, 12, 4, 5, 6, 12), FracSec.from!"msecs"(100)).toISOExtString(), "0099-12-04T05:06:12.1");
- _assertPred!"=="(SysTime(DateTime(999, 12, 4, 13, 44, 59), FracSec.from!"usecs"(45020)).toISOExtString(), "0999-12-04T13:44:59.04502");
- _assertPred!"=="(SysTime(DateTime(9999, 7, 4, 23, 59, 59), FracSec.from!"hnsecs"(12)).toISOExtString(), "9999-07-04T23:59:59.0000012");
- _assertPred!"=="(SysTime(DateTime(10000, 10, 20, 1, 1, 1), FracSec.from!"hnsecs"(507890)).toISOExtString(), "+10000-10-20T01:01:01.050789");
- _assertPred!"=="(SysTime(DateTime(2012, 12, 21, 12, 12, 12),
- new SimpleTimeZone(-360)).toISOExtString(),
- "2012-12-21T12:12:12-06:00");
- _assertPred!"=="(SysTime(DateTime(2012, 12, 21, 12, 12, 12),
- new SimpleTimeZone(420)).toISOExtString(),
- "2012-12-21T12:12:12+07:00");
- //Test B.C.
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).toISOExtString(), "0000-12-31T23:59:59.9999999Z");
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1), UTC()).toISOExtString(), "0000-12-31T23:59:59.0000001Z");
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), UTC()).toISOExtString(), "0000-12-31T23:59:59Z");
- _assertPred!"=="(SysTime(DateTime(0, 12, 4, 0, 12, 4)).toISOExtString(), "0000-12-04T00:12:04");
- _assertPred!"=="(SysTime(DateTime(-9, 12, 4, 0, 0, 0)).toISOExtString(), "-0009-12-04T00:00:00");
- _assertPred!"=="(SysTime(DateTime(-99, 12, 4, 5, 6, 12)).toISOExtString(), "-0099-12-04T05:06:12");
- _assertPred!"=="(SysTime(DateTime(-999, 12, 4, 13, 44, 59)).toISOExtString(), "-0999-12-04T13:44:59");
- _assertPred!"=="(SysTime(DateTime(-9999, 7, 4, 23, 59, 59)).toISOExtString(), "-9999-07-04T23:59:59");
- _assertPred!"=="(SysTime(DateTime(-10000, 10, 20, 1, 1, 1)).toISOExtString(), "-10000-10-20T01:01:01");
- _assertPred!"=="(SysTime(DateTime(0, 12, 4, 0, 0, 0), FracSec.from!"msecs"(7)).toISOExtString(), "0000-12-04T00:00:00.007");
- _assertPred!"=="(SysTime(DateTime(-9, 12, 4, 0, 0, 0), FracSec.from!"msecs"(42)).toISOExtString(), "-0009-12-04T00:00:00.042");
- _assertPred!"=="(SysTime(DateTime(-99, 12, 4, 5, 6, 12), FracSec.from!"msecs"(100)).toISOExtString(), "-0099-12-04T05:06:12.1");
- _assertPred!"=="(SysTime(DateTime(-999, 12, 4, 13, 44, 59), FracSec.from!"usecs"(45020)).toISOExtString(), "-0999-12-04T13:44:59.04502");
- _assertPred!"=="(SysTime(DateTime(-9999, 7, 4, 23, 59, 59), FracSec.from!"hnsecs"(12)).toISOExtString(), "-9999-07-04T23:59:59.0000012");
- _assertPred!"=="(SysTime(DateTime(-10000, 10, 20, 1, 1, 1), FracSec.from!"hnsecs"(507890)).toISOExtString(), "-10000-10-20T01:01:01.050789");
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cast(TimeOfDay)cst));
- //static assert(__traits(compiles, cast(TimeOfDay)ist));
- //Verify Examples.
- assert(SysTime(DateTime(2010, 7, 4, 7, 6, 12)).toISOExtString() ==
- "2010-07-04T07:06:12");
- assert(SysTime(DateTime(1998, 12, 25, 2, 15, 0),
- FracSec.from!"msecs"(24)).toISOExtString() ==
- "1998-12-25T02:15:00.024");
- assert(SysTime(DateTime(0, 1, 5, 23, 9, 59)).toISOExtString() ==
- "0000-01-05T23:09:59");
- assert(SysTime(DateTime(-4, 1, 5, 0, 0, 2),
- FracSec.from!"hnsecs"(520_920)).toISOExtString() ==
- "-0004-01-05T00:00:02.052092");
- }
- }
- /++
- Converts this $(D SysTime) to a string with the format
- YYYY-Mon-DD HH:MM:SS.FFFFFFFTZ (where F is fractional seconds and TZ
- is the time zone).
- Note that the number of digits in the fractional seconds varies with the
- number of fractional seconds. It's a maximum of 7 (which would be
- hnsecs), but only has as many as are necessary to hold the correct value
- (so no trailing zeroes), and if there are no fractional seconds, then
- there is no decimal point.
- If this $(D SysTime)'s time zone is $(D LocalTime), then TZ is empty. If
- its time zone is $(D UTC), then it is "Z". Otherwise, it is the offset
- from UTC (e.g. +1:00 or -7:00). Note that the offset from UTC is
- $(I not) enough to uniquely identify the time zone.
- Time zone offsets will be in the form +HH:MM or -HH:MM.
- Examples:
- --------------------
- assert(SysTime(DateTime(2010, 7, 4, 7, 6, 12)).toSimpleString() ==
- "2010-Jul-04 07:06:12");
- assert(SysTime(DateTime(1998, 12, 25, 2, 15, 0),
- FracSec.from!"msecs"(24)).toSimpleString() ==
- "1998-Dec-25 02:15:00.024");
- assert(SysTime(DateTime(0, 1, 5, 23, 9, 59)).toSimpleString() ==
- "0000-Jan-05 23:09:59");
- assert(SysTime(DateTime(-4, 1, 5, 0, 0, 2),
- FracSec.from!"hnsecs"(520_920)).toSimpleString() ==
- "-0004-Jan-05 00:00:02.052092");
- --------------------
- +/
- string toSimpleString() const nothrow
- {
- try
- {
- immutable adjustedTime = adjTime;
- long hnsecs = adjustedTime;
- auto days = splitUnitsFromHNSecs!"days"(hnsecs) + 1;
- if(hnsecs < 0)
- {
- hnsecs += convert!("hours", "hnsecs")(24);
- --days;
- }
- auto hour = splitUnitsFromHNSecs!"hours"(hnsecs);
- auto minute = splitUnitsFromHNSecs!"minutes"(hnsecs);
- auto second = splitUnitsFromHNSecs!"seconds"(hnsecs);
- auto dateTime = DateTime(Date(cast(int)days), TimeOfDay(cast(int)hour, cast(int)minute, cast(int)second));
- auto fracSecStr = fracSecToISOString(cast(int)hnsecs);
- if(_timezone is LocalTime())
- return dateTime.toSimpleString() ~ fracSecToISOString(cast(int)hnsecs);
- if(_timezone is UTC())
- return dateTime.toSimpleString() ~ fracSecToISOString(cast(int)hnsecs) ~ "Z";
- immutable utcOffset = cast(int)convert!("hnsecs", "minutes")(adjustedTime - stdTime);
- return dateTime.toSimpleString() ~ fracSecToISOString(cast(int)hnsecs) ~ SimpleTimeZone.toISOString(utcOffset);
- }
- catch(Exception e)
- assert(0, "format() threw.");
- }
- unittest
- {
- version(testStdDateTime)
- {
- //Test A.D.
- _assertPred!"=="(SysTime(DateTime.init, UTC()).toString(), "0001-Jan-01 00:00:00Z");
- _assertPred!"=="(SysTime(DateTime(1, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1), UTC()).toString(), "0001-Jan-01 00:00:00.0000001Z");
- _assertPred!"=="(SysTime(DateTime(9, 12, 4, 0, 0, 0)).toSimpleString(), "0009-Dec-04 00:00:00");
- _assertPred!"=="(SysTime(DateTime(99, 12, 4, 5, 6, 12)).toSimpleString(), "0099-Dec-04 05:06:12");
- _assertPred!"=="(SysTime(DateTime(999, 12, 4, 13, 44, 59)).toSimpleString(), "0999-Dec-04 13:44:59");
- _assertPred!"=="(SysTime(DateTime(9999, 7, 4, 23, 59, 59)).toSimpleString(), "9999-Jul-04 23:59:59");
- _assertPred!"=="(SysTime(DateTime(10000, 10, 20, 1, 1, 1)).toSimpleString(), "+10000-Oct-20 01:01:01");
- _assertPred!"=="(SysTime(DateTime(9, 12, 4, 0, 0, 0), FracSec.from!"msecs"(42)).toSimpleString(), "0009-Dec-04 00:00:00.042");
- _assertPred!"=="(SysTime(DateTime(99, 12, 4, 5, 6, 12), FracSec.from!"msecs"(100)).toSimpleString(), "0099-Dec-04 05:06:12.1");
- _assertPred!"=="(SysTime(DateTime(999, 12, 4, 13, 44, 59), FracSec.from!"usecs"(45020)).toSimpleString(), "0999-Dec-04 13:44:59.04502");
- _assertPred!"=="(SysTime(DateTime(9999, 7, 4, 23, 59, 59), FracSec.from!"hnsecs"(12)).toSimpleString(), "9999-Jul-04 23:59:59.0000012");
- _assertPred!"=="(SysTime(DateTime(10000, 10, 20, 1, 1, 1), FracSec.from!"hnsecs"(507890)).toSimpleString(), "+10000-Oct-20 01:01:01.050789");
- _assertPred!"=="(SysTime(DateTime(2012, 12, 21, 12, 12, 12),
- new SimpleTimeZone(-360)).toSimpleString(),
- "2012-Dec-21 12:12:12-06:00");
- _assertPred!"=="(SysTime(DateTime(2012, 12, 21, 12, 12, 12),
- new SimpleTimeZone(420)).toSimpleString(),
- "2012-Dec-21 12:12:12+07:00");
- //Test B.C.
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).toSimpleString(), "0000-Dec-31 23:59:59.9999999Z");
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(1), UTC()).toSimpleString(), "0000-Dec-31 23:59:59.0000001Z");
- _assertPred!"=="(SysTime(DateTime(0, 12, 31, 23, 59, 59), UTC()).toSimpleString(), "0000-Dec-31 23:59:59Z");
- _assertPred!"=="(SysTime(DateTime(0, 12, 4, 0, 12, 4)).toSimpleString(), "0000-Dec-04 00:12:04");
- _assertPred!"=="(SysTime(DateTime(-9, 12, 4, 0, 0, 0)).toSimpleString(), "-0009-Dec-04 00:00:00");
- _assertPred!"=="(SysTime(DateTime(-99, 12, 4, 5, 6, 12)).toSimpleString(), "-0099-Dec-04 05:06:12");
- _assertPred!"=="(SysTime(DateTime(-999, 12, 4, 13, 44, 59)).toSimpleString(), "-0999-Dec-04 13:44:59");
- _assertPred!"=="(SysTime(DateTime(-9999, 7, 4, 23, 59, 59)).toSimpleString(), "-9999-Jul-04 23:59:59");
- _assertPred!"=="(SysTime(DateTime(-10000, 10, 20, 1, 1, 1)).toSimpleString(), "-10000-Oct-20 01:01:01");
- _assertPred!"=="(SysTime(DateTime(0, 12, 4, 0, 0, 0), FracSec.from!"msecs"(7)).toSimpleString(), "0000-Dec-04 00:00:00.007");
- _assertPred!"=="(SysTime(DateTime(-9, 12, 4, 0, 0, 0), FracSec.from!"msecs"(42)).toSimpleString(), "-0009-Dec-04 00:00:00.042");
- _assertPred!"=="(SysTime(DateTime(-99, 12, 4, 5, 6, 12), FracSec.from!"msecs"(100)).toSimpleString(), "-0099-Dec-04 05:06:12.1");
- _assertPred!"=="(SysTime(DateTime(-999, 12, 4, 13, 44, 59), FracSec.from!"usecs"(45020)).toSimpleString(), "-0999-Dec-04 13:44:59.04502");
- _assertPred!"=="(SysTime(DateTime(-9999, 7, 4, 23, 59, 59), FracSec.from!"hnsecs"(12)).toSimpleString(), "-9999-Jul-04 23:59:59.0000012");
- _assertPred!"=="(SysTime(DateTime(-10000, 10, 20, 1, 1, 1), FracSec.from!"hnsecs"(507890)).toSimpleString(), "-10000-Oct-20 01:01:01.050789");
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, cast(TimeOfDay)cst));
- //static assert(__traits(compiles, cast(TimeOfDay)ist));
- //Verify Examples.
- assert(SysTime(DateTime(2010, 7, 4, 7, 6, 12)).toSimpleString() ==
- "2010-Jul-04 07:06:12");
- assert(SysTime(DateTime(1998, 12, 25, 2, 15, 0),
- FracSec.from!"msecs"(24)).toSimpleString() ==
- "1998-Dec-25 02:15:00.024");
- assert(SysTime(DateTime(0, 1, 5, 23, 9, 59)).toSimpleString() ==
- "0000-Jan-05 23:09:59");
- assert(SysTime(DateTime(-4, 1, 5, 0, 0, 2),
- FracSec.from!"hnsecs"(520_920)).toSimpleString() ==
- "-0004-Jan-05 00:00:02.052092");
- }
- }
- /+
- Converts this $(D SysTime) to a string.
- +/
- //Due to bug http://d.puremagic.com/issues/show_bug.cgi?id=3715 , we can't
- //have versions of toString() with extra modifiers, so we define one version
- //with modifiers and one without.
- string toString()
- {
- return toSimpleString();
- }
- /++
- Converts this $(D SysTime) to a string.
- +/
- //Due to bug http://d.puremagic.com/issues/show_bug.cgi?id=3715 , we can't
- //have versions of toString() with extra modifiers, so we define one version
- //with modifiers and one without.
- string toString() const nothrow
- {
- return toSimpleString();
- }
- unittest
- {
- version(testStdDateTime)
- {
- auto st = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- const cst = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- //immutable ist = SysTime(DateTime(1999, 7, 6, 12, 30, 33));
- static assert(__traits(compiles, st.toString()));
- static assert(__traits(compiles, cst.toString()));
- //static assert(__traits(compiles, ist.toString()));
- }
- }
- /++
- Creates a $(D SysTime) from a string with the format
- YYYYMMDDTHHMMSS.FFFFFFFTZ (where F is fractional seconds is the time
- zone). Whitespace is stripped from the given string.
- The exact format is exactly as described in $(D toISOString) except that
- trailing zeroes are permitted - including having fractional seconds with
- all zeroes. However, a decimal point with nothing following it is
- invalid.
- If there is no time zone in the string, then $(D LocalTime) is used. If
- the time zone is "Z", then $(D UTC) is used. Otherwise, a
- $(D SimpleTimeZone) which corresponds to the given offset from UTC is
- used. If you wish the returned $(D SysTime) to be a particular time
- zone, then pass in that time zone and the $(D SysTime) to be returned
- will be converted to that time zone (though it will still be read in as
- whatever time zone is in its string).
- The accepted formats for time zone offsets
- are +H, -H, +HH, -HH, +H:MM, -H:MM, +HH:MM, and -HH:MM.
- Params:
- isoString = A string formatted in the ISO format for dates and times.
- tz = The time zone to convert the given time to (no
- conversion occurs if null).
- Throws:
- $(D DateTimeException) if the given string is not in the ISO format
- or if the resulting $(D SysTime) would not be valid.
- Examples:
- --------------------
- assert(SysTime.fromISOString("20100704T070612") ==
- SysTime(DateTime(2010, 7, 4, 7, 6, 12)));
- assert(SysTime.fromISOString("19981225T021500.007") ==
- SysTime(DateTime(1998, 12, 25, 2, 15, 0), FracSec.from!"msecs"(7)));
- assert(SysTime.fromISOString("00000105T230959.00002") ==
- SysTime(DateTime(0, 1, 5, 23, 9, 59), FracSec.from!"usecs"(20)));
- assert(SysTime.fromISOString("-00040105T000002") ==
- SysTime(DateTime(-4, 1, 5, 0, 0, 2)));
- assert(SysTime.fromISOString(" 20100704T070612 ") ==
- SysTime(DateTime(2010, 7, 4, 7, 6, 12)));
- assert(SysTime.fromISOString("20100704T070612Z") ==
- SysTime(DateTime(2010, 7, 4, 7, 6, 12), UTC()));
- assert(SysTime.fromISOString("20100704T070612-8:00") ==
- SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(-480)));
- assert(SysTime.fromISOString("20100704T070612+8:00") ==
- SysTime(DateTime(2010, 7, 3, 7, 6, 12), new SimpleTimeZone(480)));
- --------------------
- +/
- static SysTime fromISOString(S)(in S isoString, immutable TimeZone tz = null)
- if(isSomeString!S)
- {
- auto dstr = to!dstring(strip(isoString));
- immutable skipFirst = dstr.startsWith("+", "-") != 0;
- auto found = (skipFirst ? dstr[1..$] : dstr).find(".", "Z", "+", "-");
- auto dateTimeStr = dstr[0 .. $ - found[0].length];
- dstring fracSecStr;
- dstring zoneStr;
- if(found[1] != 0)
- {
- if(found[1] == 1)
- {
- auto foundTZ = found[0].find("Z", "+", "-");
- if(foundTZ[1] != 0)
- {
- fracSecStr = found[0][0 .. $ - foundTZ[0].length];
- zoneStr = foundTZ[0];
- }
- else
- fracSecStr = found[0];
- }
- else
- zoneStr = found[0];
- }
- try
- {
- auto dateTime = DateTime.fromISOString(dateTimeStr);
- auto fracSec = fracSecFromISOString(fracSecStr);
- Rebindable!(immutable TimeZone) parsedZone;
- if(zoneStr.empty)
- parsedZone = LocalTime();
- else if(zoneStr == "Z")
- parsedZone = UTC();
- else
- parsedZone = SimpleTimeZone.fromISOString(zoneStr);
- auto retval = SysTime(dateTime, fracSec, parsedZone);
- if(tz !is null)
- retval.timezone = tz;
- return retval;
- }
- catch(DateTimeException dte)
- throw new DateTimeException(format("Invalid ISO String: %s", isoString));
- }
- unittest
- {
- version(testStdDateTime)
- {
- assertThrown!DateTimeException(SysTime.fromISOString(""));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704000000"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704 000000"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704t000000"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000."));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000.A"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000.Z"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000.00000000"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000.00000000"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000+"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000-"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000:"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000-:"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000+:"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000-1:"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000+1:"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000+1:0"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000-24.00"));
- assertThrown!DateTimeException(SysTime.fromISOString("20100704T000000+24.00"));
- assertThrown!DateTimeException(SysTime.fromISOString("2010-07-0400:00:00"));
- assertThrown!DateTimeException(SysTime.fromISOString("2010-07-04 00:00:00"));
- assertThrown!DateTimeException(SysTime.fromISOString("2010-07-04t00:00:00"));
- assertThrown!DateTimeException(SysTime.fromISOString("2010-07-04T00:00:00."));
- assertThrown!DateTimeException(SysTime.fromISOString("2010-Jul-0400:00:00"));
- assertThrown!DateTimeException(SysTime.fromISOString("2010-Jul-04 00:00:00"));
- assertThrown!DateTimeException(SysTime.fromISOString("2010-Jul-04t00:00:00"));
- assertThrown!DateTimeException(SysTime.fromISOString("2010-Jul-04T00:00:00"));
- assertThrown!DateTimeException(SysTime.fromISOString("2010-Jul-04 00:00:00."));
- assertThrown!DateTimeException(SysTime.fromISOString("2010-12-22T172201"));
- assertThrown!DateTimeException(SysTime.fromISOString("2010-Dec-22 17:22:01"));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201"), SysTime(DateTime(2010, 12, 22, 17, 22, 01)));
- _assertPred!"=="(SysTime.fromISOString("19990706T123033"), SysTime(DateTime(1999, 7, 6, 12, 30, 33)));
- _assertPred!"=="(SysTime.fromISOString("-19990706T123033"), SysTime(DateTime(-1999, 7, 6, 12, 30, 33)));
- _assertPred!"=="(SysTime.fromISOString("+019990706T123033"), SysTime(DateTime(1999, 7, 6, 12, 30, 33)));
- _assertPred!"=="(SysTime.fromISOString("19990706T123033 "), SysTime(DateTime(1999, 7, 6, 12, 30, 33)));
- _assertPred!"=="(SysTime.fromISOString(" 19990706T123033"), SysTime(DateTime(1999, 7, 6, 12, 30, 33)));
- _assertPred!"=="(SysTime.fromISOString(" 19990706T123033 "), SysTime(DateTime(1999, 7, 6, 12, 30, 33)));
- _assertPred!"=="(SysTime.fromISOString("19070707T121212.0"), SysTime(DateTime(1907, 07, 07, 12, 12, 12)));
- _assertPred!"=="(SysTime.fromISOString("19070707T121212.0000000"), SysTime(DateTime(1907, 07, 07, 12, 12, 12)));
- _assertPred!"=="(SysTime.fromISOString("19070707T121212.0000001"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"hnsecs"(1)));
- _assertPred!"=="(SysTime.fromISOString("19070707T121212.000001"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"usecs"(1)));
- _assertPred!"=="(SysTime.fromISOString("19070707T121212.0000010"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"usecs"(1)));
- _assertPred!"=="(SysTime.fromISOString("19070707T121212.001"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"msecs"(1)));
- _assertPred!"=="(SysTime.fromISOString("19070707T121212.0010000"), SysTime(DateTime(1907, 07, 07, 12, 12, 12), FracSec.from!"msecs"(1)));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201Z"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), UTC()));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201-1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-60)));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201-1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-60)));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201-1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-90)));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201-8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(-480)));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201+1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(60)));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201+1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(60)));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201+1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(90)));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201+8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), new SimpleTimeZone(480)));
- _assertPred!"=="(SysTime.fromISOString("20101103T065106.57159Z"), SysTime(DateTime(2010, 11, 3, 6, 51, 6), FracSec.from!"hnsecs"(5715900), UTC()));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201.23412Z"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(2_341_200), UTC()));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201.23112-1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(2_311_200), new SimpleTimeZone(-60)));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201.45-1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(4_500_000), new SimpleTimeZone(-60)));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201.1-1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(1_000_000), new SimpleTimeZone(-90)));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201.55-8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(5_500_000), new SimpleTimeZone(-480)));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201.1234567+1:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(1_234_567), new SimpleTimeZone(60)));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201.0+1"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(0), new SimpleTimeZone(60)));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201.0000000+1:30"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(0), new SimpleTimeZone(90)));
- _assertPred!"=="(SysTime.fromISOString("20101222T172201.45+8:00"), SysTime(DateTime(2010, 12, 22, 17, 22, 01), FracSec.from!"hnsecs"(4_500_000), new SimpleTimeZone(480)));
- //Verify Examples.
- assert(SysTime.fromISOString("20100704T070612") == SysTime(DateTime(2010, 7, 4, 7, 6, 12)));
- assert(SysTime.fromISOString("19981225T021500.007") == SysTime(DateTime(1998, 12, 25, 2, 15, 0), FracSec.from!"msecs"(7)));
- assert(SysTime.fromISOString("00000105T230959.00002") == SysTime(DateTime(0, 1, 5, 23, 9, 59), FracSec.from!"usecs"(20)));
- assert(SysTime.fromISOString("-00040105T000002") == SysTime(DateTime(-4, 1, 5, 0, 0, 2)));
- assert(SysTime.fromISOString(" 20100704T070612 ") == SysTime(DateTime(2010, 7, 4, 7, 6, 12)));
- assert(SysTime.fromISOString("20100704T070612Z") == SysTime(DateTime(2010, 7, 4, 7, 6, 12), UTC()));
- assert(SysTime.fromISOString("20100704T070612-8:00") == SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(-480)));
- assert(SysTime.fromISOString("20100704T070612+8:00") == SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(480)));
- }
- }
- /++
- Creates a $(D SysTime) from a string with the format
- YYYY-MM-DDTHH:MM:SS.FFFFFFFTZ (where F is fractional seconds is the
- time zone). Whitespace is stripped from the given string.
- The exact format is exactly as described in $(D toISOExtString)
- except that trailing zeroes are permitted - including having fractional
- seconds with all zeroes. However, a decimal point with nothing following
- it is invalid.
- If there is no time zone in the string, then $(D LocalTime) is used. If
- the time zone is "Z", then $(D UTC) is used. Otherwise, a
- $(D SimpleTimeZone) which corresponds to the given offset from UTC is
- used. If you wish the returned $(D SysTime) to be a particular time
- zone, then pass in that time zone and the $(D SysTime) to be returned
- will be converted to that time zone (though it will still be read in as
- whatever time zone is in its string).
- The accepted formats for time zone offsets
- are +H, -H, +HH, -HH, +H:MM, -H:MM, +HH:MM, and -HH:MM.
- Params:
- isoString = A string formatted in the ISO Extended format for dates
- and times.
- tz = The time zone to convert the given time to (no
- conversion occurs if null).
- Throws:
- $(D DateTimeException) if the given string is not in the ISO format
- or if the resulting $(D SysTime) would not be valid.
- Examples:
- --------------------
- assert(SysTime.fromISOExtString("2010-07-04T07:06:12") ==
- SysTime(DateTime(2010, 7, 4, 7, 6, 12)));
- assert(SysTime.fromISOExtString("1998-12-25T02:15:00.007") ==
- SysTime(DateTime(1998, 12, 25, 2, 15, 0), FracSec.from!"msecs"(7)));
- assert(SysTime.fromISOExtString("0000-01-05T23:09:59.00002") ==
- SysTime(DateTime(0, 1, 5, 23, 9, 59), FracSec.from!"usecs"(20)));
- assert(SysTime.fromISOExtString("-0004-01-05T00:00:02") ==
- SysTime(DateTime(-4, 1, 5, 0, 0, 2)));
- assert(SysTime.fromISOExtString(" 2010-07-04T07:06:12 ") ==
- SysTime(DateTime(2010, 7, 4, 7, 6, 12)));
- assert(SysTime.fromISOExtString("2010-07-04T07:06:12Z") ==
- SysTime(DateTime(2010, 7, 4, 7, 6, 12), UTC()));
- assert(SysTime.fromISOExtString("2010-07-04T07:06:12-8:00") ==
- SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(-480)));
- assert(SysTime.fromISOExtString("2010-07-04T07:06:12+8:00") ==
- SysTime(DateTime(2010, 7, 4, 7, 6, 12), new SimpleTimeZone(480)));
- --------------------
- +/
- static SysTime fromISOExtString(S)(in S isoExtString, immutable TimeZone tz = null)
- if(isSomeString!(S))
- {
- auto dstr = to!dstring(strip(isoExtString));
- auto tIndex = dstr.stds_indexOf("T");
- enforce(tIndex != -1, new DateTimeException(format("Invalid ISO Extended String: %s", isoExtString)));
- auto found = dstr[tIndex + 1 .. $].find(".", "Z", "+", "-");
- auto dateTimeStr = dstr[0 .. $ - found[0].length];
- dstring fracSecStr;
- dstring zoneStr;
- if(found[1] != 0)
- {
- if(found[1] == 1)
- {
- auto foundTZ = found[0].find("Z", "+", "-");
- if(foundTZ[1] != 0)
- {
- fracSecStr = found[0][0 .. $ - foundTZ[0].length];
- zoneStr = foundTZ[0];
- }
- else
- fracSecStr = found[0];
- }
- else
- zoneStr = found[0];
- }
- try
- {
- auto dateTime = DateTime.fromISOExtString(dateTimeStr);
- auto fracSec = fracSecFromISOString(fracSecStr);
- Rebindable!(immutable TimeZone) parsedZone;
- if(zoneStr.empty)
- parsedZone = LocalTime();
- else if(zoneStr == "Z")
- parsedZone = UTC();
- else
- parsedZone = SimpleTimeZone.fromISOString(zoneStr);
- auto retval = SysTime(dateTime, fracSec, parsedZone);
- if(tz !is null)
- retval.timezone = tz;
- return retval;
- }
- catch(DateTimeException dte)
- throw new DateTimeException(format("Invalid ISO Extended String: %s", isoExtString));
- }
- /++
- $(RED Scheduled for deprecation in November 2011.
- Please use fromISOExtString instead.)
- +/
- static SysTime fromISOExtendedString(S)(in S isoExtString, immutable TimeZone tz = null)
- if(isSomeString!(S))
- {
- pragma(msg, softDeprec!("2.053", "November 2011", "fromISOExtendedString", "fromISOExtString"));
- return fromISOExtString!string(isoExtString, tz);
- }
- unittest
- {
- version(testStdDateTime)
- {
- assertThrown!DateTimeException(SysTime.fromISOExtString(""));
- assertThrown!DateTimeException(SysTime.fromISOExtString("20100704000000"));
- assertThrown!DateTimeException(SysTime.fromISOExtString("20100704 000000"));
- assertThrown!DateTimeException(SysTime.fromISOExtString("20100704t000000"));
- assertThrown!DateTimeException(SysTime.fromISOExtString("20100704T000000."));
- assertThrown!DateTimeException(SysTime.fromISOExtString("20100704T000000.0"));
- assertThrown!DateTimeException(SysTime.fromISOExtString("2010-07:0400:00:00"));
- assertThrown!DateTimeException(SysTime.fromISOExtString("2010-07-04 00:00:00"));
- assertThrown!DateTimeException(SysTime.fromISOExtString("2010-07-04 00:00:00"));
- assertThrown!DateTimeException(SysTime.fromISOExtString("2010-07-04t00:00:00"));
- assertThrown!DateTimeException(SysTime.fromIS