1181254a7Smrg // Written in the D programming language 2181254a7Smrg 3181254a7Smrg /++ 4*b1e83836Smrg $(SCRIPT inhibitQuickIndex = 1;) 5181254a7Smrg 6*b1e83836Smrg Phobos provides the following functionality for time: 7*b1e83836Smrg 8*b1e83836Smrg $(DIVC quickindex, 9*b1e83836Smrg $(BOOKTABLE , 10*b1e83836Smrg $(TR $(TH Functionality) $(TH Symbols) 11*b1e83836Smrg ) 12*b1e83836Smrg $(TR 13*b1e83836Smrg $(TD Points in Time) 14*b1e83836Smrg $(TD 15*b1e83836Smrg $(REF_ALTTEXT Date, Date, std, datetime, date)$(NBSP) 16*b1e83836Smrg $(REF_ALTTEXT TimeOfDay, TimeOfDay, std, datetime, date)$(NBSP) 17*b1e83836Smrg $(REF_ALTTEXT DateTime, DateTime, std, datetime, date)$(NBSP) 18*b1e83836Smrg $(REF_ALTTEXT SysTime, SysTime, std, datetime, systime)$(NBSP) 19*b1e83836Smrg ) 20*b1e83836Smrg ) 21*b1e83836Smrg $(TR 22*b1e83836Smrg $(TD Timezones) 23*b1e83836Smrg $(TD 24*b1e83836Smrg $(REF_ALTTEXT TimeZone, TimeZone, std, datetime, timezone)$(NBSP) 25*b1e83836Smrg $(REF_ALTTEXT UTC, UTC, std, datetime, timezone)$(NBSP) 26*b1e83836Smrg $(REF_ALTTEXT LocalTime, LocalTime, std, datetime, timezone)$(NBSP) 27*b1e83836Smrg $(REF_ALTTEXT PosixTimeZone, PosixTimeZone, std, datetime, timezone)$(NBSP) 28*b1e83836Smrg $(REF_ALTTEXT WindowsTimeZone, WindowsTimeZone, std, datetime, timezone)$(NBSP) 29*b1e83836Smrg $(REF_ALTTEXT SimpleTimeZone, SimpleTimeZone, std, datetime, timezone)$(NBSP) 30*b1e83836Smrg ) 31*b1e83836Smrg ) 32*b1e83836Smrg $(TR 33*b1e83836Smrg $(TD Intervals and Ranges of Time) 34*b1e83836Smrg $(TD 35*b1e83836Smrg $(REF_ALTTEXT Interval, Interval, std, datetime, interval)$(NBSP) 36*b1e83836Smrg $(REF_ALTTEXT PosInfInterval, PosInfInterval, std, datetime, interval)$(NBSP) 37*b1e83836Smrg $(REF_ALTTEXT NegInfInterval, NegInfInterval, std, datetime, interval)$(NBSP) 38*b1e83836Smrg ) 39*b1e83836Smrg ) 40*b1e83836Smrg $(TR 41*b1e83836Smrg $(TD Durations of Time) 42*b1e83836Smrg $(TD 43*b1e83836Smrg $(REF_ALTTEXT Duration, Duration, core, time)$(NBSP) 44*b1e83836Smrg $(REF_ALTTEXT weeks, weeks, core, time)$(NBSP) 45*b1e83836Smrg $(REF_ALTTEXT days, days, core, time)$(NBSP) 46*b1e83836Smrg $(REF_ALTTEXT hours, hours, core, time)$(NBSP) 47*b1e83836Smrg $(REF_ALTTEXT minutes, minutes, core, time)$(NBSP) 48*b1e83836Smrg $(REF_ALTTEXT seconds, seconds, core, time)$(NBSP) 49*b1e83836Smrg $(REF_ALTTEXT msecs, msecs, core, time)$(NBSP) 50*b1e83836Smrg $(REF_ALTTEXT usecs, usecs, core, time)$(NBSP) 51*b1e83836Smrg $(REF_ALTTEXT hnsecs, hnsecs, core, time)$(NBSP) 52*b1e83836Smrg $(REF_ALTTEXT nsecs, nsecs, core, time)$(NBSP) 53*b1e83836Smrg ) 54*b1e83836Smrg ) 55*b1e83836Smrg $(TR 56*b1e83836Smrg $(TD Time Measurement and Benchmarking) 57*b1e83836Smrg $(TD 58*b1e83836Smrg $(REF_ALTTEXT MonoTime, MonoTime, core, time)$(NBSP) 59*b1e83836Smrg $(REF_ALTTEXT StopWatch, StopWatch, std, datetime, stopwatch)$(NBSP) 60*b1e83836Smrg $(REF_ALTTEXT benchmark, benchmark, std, datetime, stopwatch)$(NBSP) 61*b1e83836Smrg ) 62*b1e83836Smrg ) 63*b1e83836Smrg )) 64*b1e83836Smrg 65*b1e83836Smrg This functionality is separated into the following modules 66*b1e83836Smrg 67181254a7Smrg $(UL 68*b1e83836Smrg $(LI $(MREF std, datetime, date) for points in time without timezones.) 69*b1e83836Smrg $(LI $(MREF std, datetime, timezone) for classes which represent timezones.) 70*b1e83836Smrg $(LI $(MREF std, datetime, systime) for a point in time with a timezone.) 71*b1e83836Smrg $(LI $(MREF std, datetime, interval) for types which represent series of points in time.) 72*b1e83836Smrg $(LI $(MREF std, datetime, stopwatch) for measuring time.) 73181254a7Smrg ) 74181254a7Smrg 75181254a7Smrg See_Also: 76*b1e83836Smrg $(DDLINK intro-to-datetime, Introduction to std.datetime, 77*b1e83836Smrg Introduction to std.datetime)<br> 78181254a7Smrg $(HTTP en.wikipedia.org/wiki/ISO_8601, ISO 8601)<br> 79181254a7Smrg $(HTTP en.wikipedia.org/wiki/Tz_database, 80181254a7Smrg Wikipedia entry on TZ Database)<br> 81181254a7Smrg $(HTTP en.wikipedia.org/wiki/List_of_tz_database_time_zones, 82181254a7Smrg List of Time Zones)<br> 83181254a7Smrg 84181254a7Smrg License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). 85*b1e83836Smrg Authors: $(HTTP jmdavisprog.com, Jonathan M Davis) and Kato Shoichi 86*b1e83836Smrg Source: $(PHOBOSSRC std/datetime/package.d) 87181254a7Smrg +/ 88181254a7Smrg module std.datetime; 89181254a7Smrg 90*b1e83836Smrg /// Get the current time from the system clock 91*b1e83836Smrg @safe unittest 92*b1e83836Smrg { 93*b1e83836Smrg import std.datetime.systime : SysTime, Clock; 94*b1e83836Smrg 95*b1e83836Smrg SysTime currentTime = Clock.currTime(); 96*b1e83836Smrg } 97*b1e83836Smrg 98*b1e83836Smrg /** 99*b1e83836Smrg Construct a specific point in time without timezone information 100*b1e83836Smrg and get its ISO string. 101*b1e83836Smrg */ 102*b1e83836Smrg @safe unittest 103*b1e83836Smrg { 104*b1e83836Smrg import std.datetime.date : DateTime; 105*b1e83836Smrg 106*b1e83836Smrg auto dt = DateTime(2018, 1, 1, 12, 30, 10); 107*b1e83836Smrg assert(dt.toISOString() == "20180101T123010"); 108*b1e83836Smrg assert(dt.toISOExtString() == "2018-01-01T12:30:10"); 109*b1e83836Smrg } 110*b1e83836Smrg 111*b1e83836Smrg /** 112*b1e83836Smrg Construct a specific point in time in the UTC timezone and 113*b1e83836Smrg add two days. 114*b1e83836Smrg */ 115*b1e83836Smrg @safe unittest 116*b1e83836Smrg { 117*b1e83836Smrg import std.datetime.systime : SysTime; 118*b1e83836Smrg import std.datetime.timezone : UTC; 119*b1e83836Smrg import core.time : days; 120*b1e83836Smrg 121*b1e83836Smrg auto st = SysTime(DateTime(2018, 1, 1, 12, 30, 10), UTC()); 122*b1e83836Smrg assert(st.toISOExtString() == "2018-01-01T12:30:10Z"); 123*b1e83836Smrg st += 2.days; 124*b1e83836Smrg assert(st.toISOExtString() == "2018-01-03T12:30:10Z"); 125*b1e83836Smrg } 126*b1e83836Smrg 127181254a7Smrg public import core.time; 128181254a7Smrg public import std.datetime.date; 129181254a7Smrg public import std.datetime.interval; 130181254a7Smrg public import std.datetime.systime; 131181254a7Smrg public import std.datetime.timezone; 132181254a7Smrg 133181254a7Smrg import core.exception : AssertError; 134181254a7Smrg import std.functional : unaryFun; 135181254a7Smrg import std.traits; 136181254a7Smrg import std.typecons : Flag, Yes, No; 137181254a7Smrg 138181254a7Smrg 139181254a7Smrg // Verify module example. 140181254a7Smrg @safe unittest 141181254a7Smrg { 142181254a7Smrg auto currentTime = Clock.currTime(); 143181254a7Smrg auto timeString = currentTime.toISOExtString(); 144181254a7Smrg auto restoredTime = SysTime.fromISOExtString(timeString); 145181254a7Smrg } 146181254a7Smrg 147181254a7Smrg // Verify Examples for core.time.Duration which couldn't be in core.time. 148181254a7Smrg @safe unittest 149181254a7Smrg { 150181254a7Smrg assert(std.datetime.Date(2010, 9, 7) + dur!"days"(5) == 151181254a7Smrg std.datetime.Date(2010, 9, 12)); 152181254a7Smrg 153181254a7Smrg assert(std.datetime.Date(2010, 9, 7) - std.datetime.Date(2010, 10, 3) == 154181254a7Smrg dur!"days"(-26)); 155181254a7Smrg } 156181254a7Smrg 157181254a7Smrg @safe unittest 158181254a7Smrg { 159181254a7Smrg import std.traits : hasUnsharedAliasing; 160*b1e83836Smrg /* https://issues.dlang.org/show_bug.cgi?id=6642 */ 161181254a7Smrg static assert(!hasUnsharedAliasing!Date); 162181254a7Smrg static assert(!hasUnsharedAliasing!TimeOfDay); 163181254a7Smrg static assert(!hasUnsharedAliasing!DateTime); 164181254a7Smrg static assert(!hasUnsharedAliasing!SysTime); 165181254a7Smrg } 166