Report a bug
If you spot a problem with this page, click here to create a GitHub issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
a local clone.
mir.timestamp
Timestamp
- class
DateTimeException
: object.Exception; -
- pure nothrow @nogc @safe this(string
msg
, stringfile
= __FILE__, size_tline
= __LINE__, ThrowablenextInChain
= null);
pure nothrow @nogc @safe this(stringmsg
, ThrowablenextInChain
, stringfile
= __FILE__, size_tline
= __LINE__);
- struct
Timestamp
; - Timestamp
Note The component values in the binary encoding are always in UTC, while components in the text encoding are in the local time! This means that transcoding requires a conversion between UTC and local time.
Timestamp
precision is up to picosecond (second/10^12).- enum
Precision
: ubyte; -
year
month
day
minute
second
fraction
- pure @nogc @safe this(scope const(char)[]
str
); - Examples:
assert(Timestamp("2010-07-04") == Timestamp(2010, 7, 4)); assert(Timestamp("20100704") == Timestamp(2010, 7, 4)); assert(Timestamp(2021, 01, 29, 12, 42, 44).withOffset(7 * 60 + 30) == Timestamp.fromISOString("20210129T201244+0730")); static assert(Timestamp(2021, 01, 29, 4, 42, 44).withOffset(- (7 * 60 + 30)) == Timestamp.fromISOExtString("2021-01-28T21:12:44-07:30")); assert(Timestamp("T0740Z") == Timestamp.onlyTime(7, 40)); assert(Timestamp("T074030Z") == Timestamp.onlyTime(7, 40, 30)); assert(Timestamp("T074030.056Z") == Timestamp.onlyTime(7, 40, 30, -3, 56)); assert(Timestamp("07:40Z") == Timestamp.onlyTime(7, 40)); assert(Timestamp("07:40:30Z") == Timestamp.onlyTime(7, 40, 30)); assert(Timestamp("T07:40:30.056Z") == Timestamp.onlyTime(7, 40, 30, -3, 56));
- short
year
; - Year
- Precision
precision
; - ubyte
month
; - MonthIf the value equals to thero then this and all the following members are undefined.
- ubyte
day
; - DayIf the value equals to thero then this and all the following members are undefined.
- ubyte
hour
; - Hour
- ubyte
minute
; - Minute
Note the field is implemented as property.
- ubyte
second
; - Second
Note the field is implemented as property.
- byte
fractionExponent
;
ulongfractionCoefficient
; - FractionThe
fractionExponent
andfractionCoefficient
denote the fractional seconds of the timestamp as a decimal value The fractional seconds’ value is coefficient * 10 ^ exponent. It must be greater than or equal to zero and less than 1. A missing coefficient defaults to zero. Fractions whose coefficient is zero and exponent is greater than -1 are ignored. 'fractionCoefficient' allowed values are [0 ... 10^12-1]. 'fractionExponent' allowed values are [-12 ... 0].Note the fields are implemented as property.
- pure nothrow @nogc @safe this(short
year
); - pure nothrow @nogc @safe this(short
year
, ubytemonth
); - pure nothrow @nogc @safe this(short
year
, ubytemonth
, ubyteday
); - pure nothrow @nogc @safe this(short
year
, ubytemonth
, ubyteday
, ubytehour
, ubyteminute
); - pure nothrow @nogc @safe this(short
year
, ubytemonth
, ubyteday
, ubytehour
, ubyteminute
, ubytesecond
); - pure nothrow @nogc @safe this(short
year
, ubytemonth
, ubyteday
, ubytehour
, ubyteminute
, ubytesecond
, bytefractionExponent
, ulongfractionCoefficient
); - static pure nothrow @nogc @safe Timestamp
onlyTime
(ubytehour
, ubyteminute
); - static pure nothrow @nogc @safe Timestamp
onlyTime
(ubytehour
, ubyteminute
, ubytesecond
); - static pure nothrow @nogc @safe Timestamp
onlyTime
(ubytehour
, ubyteminute
, ubytesecond
, bytefractionExponent
, ulongfractionCoefficient
); - this(Date)(const Date
datetime
)
if (Date.stringof == "Date" || Date.stringof == "date"); - Examples:
import mir.date : Date; auto dt = Date(1982, 4, 1); Timestamp ts = dt; assert(ts.opCmp(ts) == 0); assert(dt.toISOExtString == ts.toString); assert(dt == cast(Date) ts);
Examples:import std.datetime.date : Date; auto dt = Date(1982, 4, 1); Timestamp ts = dt; assert(dt.toISOExtString == ts.toString); assert(dt == cast(Date) ts);
- this(TimeOfDay)(const TimeOfDay
timeOfDay
)
if (TimeOfDay.stringof == "TimeOfDay"); - Examples:
import std.datetime.date : TimeOfDay; auto dt = TimeOfDay(7, 14, 30); Timestamp ts = dt; assert(dt.toISOExtString ~ "Z" == ts.toString); assert(dt == cast(TimeOfDay) ts);
- this(DateTime)(const DateTime
datetime
)
if (DateTime.stringof == "DateTime"); - Examples:
import std.datetime.date : DateTime; auto dt = DateTime(1982, 4, 1, 20, 59, 22); Timestamp ts = dt; assert(dt.toISOExtString ~ "Z" == ts.toString); assert(dt == cast(DateTime) ts);
- this(SysTime)(const SysTime
systime
)
if (SysTime.stringof == "SysTime"); - Examples:
import core.time : hnsecs, minutes; import std.datetime.date : DateTime; import std.datetime.timezone : SimpleTimeZone; import std.datetime.systime : SysTime; auto dt = DateTime(1982, 4, 1, 20, 59, 22); auto tz = new immutable SimpleTimeZone(-330.minutes); auto st = SysTime(dt, 1234567.hnsecs, tz); Timestamp ts = st; assert(st.toISOExtString == ts.toString); assert(st == cast(SysTime) ts);
- this(Duration)(const Duration
duration
)
if (Duration.stringof == "Duration"); - Creates a fake timestamp from a Duration using total!"hnsecs" method. For positive and zero timestamps the format is wwww-dd-88Thh:mm:ss.nnnnnnn and for negative timestamps wwww-dd-99Thh:mm:ss.nnnnnnn.Examples:
import core.time : Duration, weeks, days, hours, minutes, seconds, hnsecs; auto duration = 5.weeks + 2.days + 7.hours + 40.minutes + 4.seconds + 9876543.hnsecs; Timestamp ts = duration; assert(ts.toISOExtString == `0005-02-88T07:40:04.9876543Z`); assert(duration == cast(Duration) ts); duration = -duration; ts = Timestamp(duration); assert(ts.toISOExtString == `0005-02-99T07:40:04.9876543Z`); assert(duration == cast(Duration) ts); assert(Timestamp(Duration.zero).toISOExtString == `0000-00-88T00:00:00.0000000Z`);
- const T
opCast
(T)()
if (__traits(hasMember, T, "AllowedTypes")); - Decomposes Timestamp to an algebraic type. Supported types up to T.stringof equivalence:
- Year
- YearMonth
- YearMonthDay
- Date
- date
- TimeOfDay
- DateTime
- SysTime
- Timestamp as fallback type
Throws:an exception if timestamp cannot be converted to an algebraic type and there is no Timestamp type in the Algebraic set.Examples:import core.time : hnsecs, minutes, Duration; import mir.algebraic; import mir.date: Date; // Can be other Date type as well import std.datetime.date : TimeOfDay, DateTime; import std.datetime.systime : SysTime; import std.datetime.timezone: UTC, SimpleTimeZone; alias A = Variant!(Date, TimeOfDay, DateTime, Duration, SysTime, Timestamp, string); // non-date-time types is OK assert(cast(A) Timestamp(1023) == Timestamp(1023)); // Year isn't represented in the algebraic, use fallback type assert(cast(A) Timestamp.onlyTime(7, 40, 30) == TimeOfDay(7, 40, 30)); assert(cast(A) Timestamp(1982, 4, 1, 20, 59, 22) == DateTime(1982, 4, 1, 20, 59, 22)); auto dt = DateTime(1982, 4, 1, 20, 59, 22); auto tz = new immutable SimpleTimeZone(-330.minutes); auto st = SysTime(dt, 1234567.hnsecs, tz); assert(cast(A) Timestamp(st) == st);
- const T
opCast
(T)()
if (T.stringof == "Year" || T.stringof == "YearMonth" || T.stringof == "YearMonthDay" || T.stringof == "Date" || T.stringof == "date" || T.stringof == "TimeOfDay" || T.stringof == "Duration" || T.stringof == "DateTime" || T.stringof == "SysTime"); - Casts timestamp to a date-time type.Supported types up to T.stringof equivalence:
- Year
- YearMonth
- YearMonthDay
- Date
- date
- TimeOfDay
- DateTime
- SysTime
- const pure nothrow @nogc @property @safe long
getFraction
(int digits)()
if (digits >= 1 && (digits <= 12)); - const pure nothrow @nogc @property @safe bool
isOnlyTime
(); - Returns:true if timestamp represent a time only value.
- const pure nothrow @nogc @safe int
opCmp
(Timestamprhs
); - const pure nothrow @nogc @safe Timestamp
withOffset
(shortminutes
); - Attaches local offset, doesn't adjust other fields. Local-time offsets may be represented as either hour*60+minute offsets from UTC, or as the zero to denote a local time of UTC. They are required on timestamps with time and are not allowed on date values.
- alias
toString
= .Timestamp.toISOStringImp!true.toISOStringImp;
aliastoISOExtString
= .Timestamp.toISOStringImp!true.toISOStringImp; - Converts this Timestamp to a string with the format yyyy-mm-ddThh:mm:ss[.mmm]±hh:mm.If w writer is set, the resulting string will be written directly to it.Returns:A string when not using an output range; void otherwise.Examples:
assert(Timestamp.init.toString == "0000T"); assert(Timestamp(2010, 7, 4).toString == "2010-07-04"); assert(Timestamp(1998, 12, 25).toString == "1998-12-25"); assert(Timestamp(0, 1, 5).toString == "0000-01-05"); assert(Timestamp(-4, 1, 5).toString == "-0004-01-05"); // yyyy-mm-ddThh:mm:ss[.mmm]±hh:mm assert(Timestamp(2021).toString == "2021T"); assert(Timestamp(2021, 01).toString == "2021-01T", Timestamp(2021, 01).toString); assert(Timestamp(2021, 01, 29).toString == "2021-01-29"); assert(Timestamp(2021, 01, 29, 19, 42).toString == "2021-01-29T19:42Z"); assert(Timestamp(2021, 01, 29, 12, 42, 44).withOffset(7 * 60).toString == "2021-01-29T19:42:44+07", Timestamp(2021, 01, 29, 12, 42, 44).withOffset(7 * 60).toString); assert(Timestamp(2021, 01, 29, 12, 42, 44).withOffset(7 * 60 + 30).toString == "2021-01-29T20:12:44+07:30"); assert(Timestamp.onlyTime(7, 40).toString == "07:40Z"); assert(Timestamp.onlyTime(7, 40, 30).toString == "07:40:30Z"); assert(Timestamp.onlyTime(7, 40, 30, -3, 56).toString == "07:40:30.056Z");
Examples:// Test A.D. assert(Timestamp(9, 12, 4).toISOExtString == "0009-12-04"); assert(Timestamp(99, 12, 4).toISOExtString == "0099-12-04"); assert(Timestamp(999, 12, 4).toISOExtString == "0999-12-04"); assert(Timestamp(9999, 7, 4).toISOExtString == "9999-07-04"); assert(Timestamp(10000, 10, 20).toISOExtString == "+10000-10-20"); // Test B.C. assert(Timestamp(0, 12, 4).toISOExtString == "0000-12-04"); assert(Timestamp(-9, 12, 4).toISOExtString == "-0009-12-04"); assert(Timestamp(-99, 12, 4).toISOExtString == "-0099-12-04"); assert(Timestamp(-999, 12, 4).toISOExtString == "-0999-12-04"); assert(Timestamp(-9999, 7, 4).toISOExtString == "-9999-07-04"); assert(Timestamp(-10000, 10, 20).toISOExtString == "-10000-10-20"); assert(Timestamp.onlyTime(7, 40).toISOExtString == "07:40Z"); assert(Timestamp.onlyTime(7, 40, 30).toISOExtString == "07:40:30Z"); assert(Timestamp.onlyTime(7, 40, 30, -3, 56).toISOExtString == "07:40:30.056Z"); const cdate = Timestamp(1999, 7, 6); immutable idate = Timestamp(1999, 7, 6); assert(cdate.toISOExtString == "1999-07-06"); assert(idate.toISOExtString == "1999-07-06");
- alias
toISOString
= .Timestamp.toISOStringImp!false.toISOStringImp; - Converts this Timestamp to a string with the format YYYYMMDDThhmmss±hhmm.If w writer is set, the resulting string will be written directly to it.Returns:A string when not using an output range; void otherwise.Examples:
assert(Timestamp.init.toISOString == "0000T"); assert(Timestamp(2010, 7, 4).toISOString == "20100704"); assert(Timestamp(1998, 12, 25).toISOString == "19981225"); assert(Timestamp(0, 1, 5).toISOString == "00000105"); assert(Timestamp(-4, 1, 5).toISOString == "-00040105"); // YYYYMMDDThhmmss±hhmm assert(Timestamp(2021).toISOString == "2021T"); assert(Timestamp(2021, 01).toISOString == "2021-01T"); // always extended assert(Timestamp(2021, 01, 29).toISOString == "20210129"); assert(Timestamp(2021, 01, 29, 19, 42).toISOString == "20210129T1942Z"); assert(Timestamp(2021, 01, 29, 12, 42, 44).withOffset(7 * 60).toISOString == "20210129T194244+07"); assert(Timestamp(2021, 01, 29, 12, 42, 44).withOffset(7 * 60 + 30).toISOString == "20210129T201244+0730"); static assert(Timestamp(2021, 01, 29, 12, 42, 44).withOffset(7 * 60 + 30).toISOString == "20210129T201244+0730"); assert(Timestamp.onlyTime(7, 40).toISOString == "T0740Z"); assert(Timestamp.onlyTime(7, 40, 30).toISOString == "T074030Z"); assert(Timestamp.onlyTime(7, 40, 30, -3, 56).toISOString == "T074030.056Z");
- const pure nothrow @nogc @safe long
toUnixTime
(); - Examples:
assert(Timestamp(1970, 1, 1).toUnixTime == 0); assert(Timestamp(2007, 12, 22, 8, 14, 45).toUnixTime == 1_198_311_285); assert(Timestamp(2007, 12, 22, 8, 14, 45).withOffset(90).toUnixTime == 1_198_311_285); assert(Timestamp(1969, 12, 31, 23, 59, 59).toUnixTime == -1);
- static pure nothrow @nogc @safe Timestamp
fromUnixTime
(longtime
); - Examples:
import mir.format; assert(Timestamp.fromUnixTime(0) == Timestamp(1970, 1, 1, 0, 0, 0)); assert(Timestamp.fromUnixTime(1_198_311_285) == Timestamp(2007, 12, 22, 8, 14, 45)); assert(Timestamp.fromUnixTime(-1) == Timestamp(1969, 12, 31, 23, 59, 59));
- pure nothrow @nogc @safe void
addMinutes
(shortminutes
); - Helpfer for time zone offsets
- alias
fromISOString
= .Timestamp.fromISOStringImpl!false.fromISOStringImpl(C)(scope const(C)[] str) if (isSomeChar!C); - Creates a Timestamp from a string with the format `YYYYMMDDThhmmss±hhmm or its leading part allowed by the standard.or its leading part allowed by the standard.Parameters:
const(C)[] str A string formatted in the way that .Timestamp.toISOExtString formats dates. Timestamp value (optional) result value. Throws:DateTimeException if the given string is not in the correct format. Two arguments overload is nothrow.Returns:bool on success for two arguments overload, and the resulting timestamp for single argument overdload.Examples:assert(Timestamp.fromISOString("20100704") == Timestamp(2010, 7, 4)); assert(Timestamp.fromISOString("19981225") == Timestamp(1998, 12, 25)); assert(Timestamp.fromISOString("00000105") == Timestamp(0, 1, 5)); // assert(Timestamp.fromISOString("-00040105") == Timestamp(-4, 1, 5)); assert(Timestamp(2021) == Timestamp.fromISOString("2021")); assert(Timestamp(2021) == Timestamp.fromISOString("2021T")); // assert(Timestamp(2021, 01) == Timestamp.fromISOString("2021-01")); // assert(Timestamp(2021, 01) == Timestamp.fromISOString("2021-01T")); assert(Timestamp(2021, 01, 29) == Timestamp.fromISOString("20210129")); assert(Timestamp(2021, 01, 29, 19, 42) == Timestamp.fromISOString("20210129T1942")); assert(Timestamp(2021, 01, 29, 19, 42) == Timestamp.fromISOString("20210129T1942Z")); assert(Timestamp(2021, 01, 29, 19, 42, 12) == Timestamp.fromISOString("20210129T194212")); assert(Timestamp(2021, 01, 29, 19, 42, 12, -3, 67) == Timestamp.fromISOString("20210129T194212.067Z")); assert(Timestamp(2021, 01, 29, 12, 42, 44).withOffset(7 * 60) == Timestamp.fromISOString("20210129T194244+07")); assert(Timestamp(2021, 01, 29, 12, 42, 44).withOffset(7 * 60 + 30) == Timestamp.fromISOString("20210129T201244+0730")); static assert(Timestamp(2021, 01, 29, 12, 42, 44).withOffset(7 * 60 + 30) == Timestamp.fromISOString("20210129T201244+0730")); static assert(Timestamp(2021, 01, 29, 4, 42, 44).withOffset(- (7 * 60 + 30)) == Timestamp.fromISOString("20210128T211244-0730"));
- alias
fromISOExtString
= .Timestamp.fromISOStringImpl!true.fromISOStringImpl(C)(scope const(C)[] str) if (isSomeChar!C); - Creates a Timestamp from a string with the format yyyy-mm-ddThh:mm:ss[.mmm]±hh:mm or its leading part allowed by the standard.Parameters:
const(C)[] str A string formatted in the way that .Timestamp.toISOExtString formats dates. Timestamp value (optional) result value. Throws:DateTimeException if the given string is not in the correct format. Two arguments overload is nothrow.Returns:bool on success for two arguments overload, and the resulting timestamp for single argument overdload.Examples:assert(Timestamp.fromISOExtString("2010-07-04") == Timestamp(2010, 7, 4)); assert(Timestamp.fromISOExtString("1998-12-25") == Timestamp(1998, 12, 25)); assert(Timestamp.fromISOExtString("0000-01-05") == Timestamp(0, 1, 5)); assert(Timestamp.fromISOExtString("-0004-01-05") == Timestamp(-4, 1, 5)); assert(Timestamp(2021) == Timestamp.fromISOExtString("2021")); assert(Timestamp(2021) == Timestamp.fromISOExtString("2021T")); assert(Timestamp(2021, 01) == Timestamp.fromISOExtString("2021-01")); assert(Timestamp(2021, 01) == Timestamp.fromISOExtString("2021-01T")); assert(Timestamp(2021, 01, 29) == Timestamp.fromISOExtString("2021-01-29")); assert(Timestamp(2021, 01, 29, 19, 42) == Timestamp.fromISOExtString("2021-01-29T19:42")); assert(Timestamp(2021, 01, 29, 19, 42) == Timestamp.fromISOExtString("2021-01-29T19:42Z")); assert(Timestamp(2021, 01, 29, 19, 42, 12) == Timestamp.fromISOExtString("2021-01-29T19:42:12")); assert(Timestamp(2021, 01, 29, 19, 42, 12, -3, 67) == Timestamp.fromISOExtString("2021-01-29T19:42:12.067Z")); assert(Timestamp(2021, 01, 29, 12, 42, 44).withOffset(7 * 60) == Timestamp.fromISOExtString("2021-01-29T19:42:44+07")); assert(Timestamp(2021, 01, 29, 12, 42, 44).withOffset(7 * 60 + 30) == Timestamp.fromISOExtString("2021-01-29T20:12:44+07:30")); static assert(Timestamp(2021, 01, 29, 12, 42, 44).withOffset(7 * 60 + 30) == Timestamp.fromISOExtString("2021-01-29T20:12:44+07:30")); static assert(Timestamp(2021, 01, 29, 4, 42, 44).withOffset(- (7 * 60 + 30)) == Timestamp.fromISOExtString("2021-01-28T21:12:44-07:30"));
- pure nothrow @nogc @safe bool
fromString
(C)(scope const(C)[]str
, out Timestampvalue
);
pure @safe TimestampfromString
(C)(scope const(C)[]str
)
if (isSomeChar!C); - Creates a Timestamp from a string with the format YYYY-MM-DD, YYYYMMDD, or YYYY-Mon-DD.Parameters:
const(C)[] str
A string formatted in the way that .Timestamp.toISOExtString and .Timestamp.toISOString format dates. The function is case sensetive. Timestamp value
(optional) result value. Throws:DateTimeException if the given string is not in the correct format. Two arguments overload is nothrow.Returns:bool on success for two arguments overload, and the resulting timestamp for single argument overdload. - const pure nothrow @nogc @property @safe bool
isDuration
(); - const pure nothrow @nogc @property @safe bool
isNegativeDuration
();
Copyright © 2016-2022 by Ilya Yaroshenko | Page generated by
Ddoc on Tue Jan 11 06:37:14 2022