1 // Written in the D programming language 2 3 /++ 4 $(SCRIPT inhibitQuickIndex = 1;) 5 6 Phobos provides the following functionality for time: 7 8 $(DIVC quickindex, 9 $(BOOKTABLE , 10 $(TR $(TH Functionality) $(TH Symbols) 11 ) 12 $(TR 13 $(TD Points in Time) 14 $(TD 15 $(REF_ALTTEXT Clock, Clock, std, datetime, systime)$(NBSP) 16 $(REF_ALTTEXT Date, Date, std, datetime, date)$(NBSP) 17 $(REF_ALTTEXT TimeOfDay, TimeOfDay, std, datetime, date)$(NBSP) 18 $(REF_ALTTEXT DateTime, DateTime, std, datetime, date)$(NBSP) 19 $(REF_ALTTEXT SysTime, SysTime, std, datetime, systime)$(NBSP) 20 ) 21 ) 22 $(TR 23 $(TD $(MREF_ALTTEXT Timezones, std, datetime, timezone)) 24 $(TD 25 $(REF_ALTTEXT TimeZone, TimeZone, std, datetime, timezone)$(NBSP) 26 $(REF_ALTTEXT UTC, UTC, std, datetime, timezone)$(NBSP) 27 $(REF_ALTTEXT LocalTime, LocalTime, std, datetime, timezone)$(NBSP) 28 $(REF_ALTTEXT PosixTimeZone, PosixTimeZone, std, datetime, timezone)$(NBSP) 29 $(REF_ALTTEXT WindowsTimeZone, WindowsTimeZone, std, datetime, timezone)$(NBSP) 30 $(REF_ALTTEXT SimpleTimeZone, SimpleTimeZone, std, datetime, timezone)$(NBSP) 31 ) 32 ) 33 $(TR 34 $(TD Intervals and Ranges of Time) 35 $(TD 36 $(REF_ALTTEXT Interval, Interval, std, datetime, interval)$(NBSP) 37 $(REF_ALTTEXT PosInfInterval, PosInfInterval, std, datetime, interval)$(NBSP) 38 $(REF_ALTTEXT NegInfInterval, NegInfInterval, std, datetime, interval)$(NBSP) 39 ) 40 ) 41 $(TR 42 $(TD $(MREF_ALTTEXT Durations of Time, core, time)) 43 $(TD 44 $(REF_ALTTEXT Duration, Duration, core, time)$(NBSP) 45 $(REF_ALTTEXT weeks, weeks, core, time)$(NBSP) 46 $(REF_ALTTEXT days, days, core, time)$(NBSP) 47 $(REF_ALTTEXT hours, hours, core, time)$(NBSP) 48 $(REF_ALTTEXT minutes, minutes, core, time)$(NBSP) 49 $(REF_ALTTEXT seconds, seconds, core, time)$(NBSP) 50 $(REF_ALTTEXT msecs, msecs, core, time)$(NBSP) 51 $(REF_ALTTEXT usecs, usecs, core, time)$(NBSP) 52 $(REF_ALTTEXT hnsecs, hnsecs, core, time)$(NBSP) 53 $(REF_ALTTEXT nsecs, nsecs, core, time)$(NBSP) 54 ) 55 ) 56 $(TR 57 $(TD Time Measurement and Benchmarking) 58 $(TD 59 $(REF_ALTTEXT MonoTime, MonoTime, core, time)$(NBSP) 60 $(REF_ALTTEXT StopWatch, StopWatch, std, datetime, stopwatch)$(NBSP) 61 $(REF_ALTTEXT benchmark, benchmark, std, datetime, stopwatch)$(NBSP) 62 ) 63 ) 64 )) 65 66 This functionality is separated into the following modules: 67 68 $(UL 69 $(LI $(MREF std, datetime, date) for points in time without timezones.) 70 $(LI $(MREF std, datetime, timezone) for classes which represent timezones.) 71 $(LI $(MREF std, datetime, systime) for a point in time with a timezone.) 72 $(LI $(MREF std, datetime, interval) for types which represent series of points in time.) 73 $(LI $(MREF std, datetime, stopwatch) for measuring time.) 74 ) 75 76 See_Also: 77 $(MREF core, time)$(BR) 78 $(DDLINK intro-to-datetime, Introduction to std.datetime, 79 Introduction to std.datetime)<br> 80 $(HTTP en.wikipedia.org/wiki/ISO_8601, ISO 8601)<br> 81 $(HTTP en.wikipedia.org/wiki/Tz_database, 82 Wikipedia entry on TZ Database)<br> 83 $(HTTP en.wikipedia.org/wiki/List_of_tz_database_time_zones, 84 List of Time Zones)<br> 85 86 License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). 87 Authors: $(HTTP jmdavisprog.com, Jonathan M Davis) and Kato Shoichi 88 Source: $(PHOBOSSRC std/datetime/package.d) 89 +/ 90 module std.datetime; 91 92 /// Get the current time from the system clock. 93 @safe unittest 94 { 95 import std.datetime.systime : SysTime, Clock; 96 97 SysTime currentTime = Clock.currTime(); 98 } 99 100 /** 101 Construct a specific point in time without timezone information 102 and get its ISO string. 103 */ 104 @safe unittest 105 { 106 import std.datetime.date : DateTime; 107 108 auto dt = DateTime(2018, 1, 1, 12, 30, 10); 109 assert(dt.toISOString() == "20180101T123010"); 110 assert(dt.toISOExtString() == "2018-01-01T12:30:10"); 111 } 112 113 /** 114 Construct a specific point in time in the UTC timezone and 115 add two days. 116 */ 117 @safe unittest 118 { 119 import std.datetime.systime : SysTime; 120 import std.datetime.timezone : UTC; 121 import core.time : days; 122 123 auto st = SysTime(DateTime(2018, 1, 1, 12, 30, 10), UTC()); 124 assert(st.toISOExtString() == "2018-01-01T12:30:10Z"); 125 st += 2.days; 126 assert(st.toISOExtString() == "2018-01-03T12:30:10Z"); 127 } 128 129 public import core.time; 130 public import std.datetime.date; 131 public import std.datetime.interval; 132 public import std.datetime.systime; 133 public import std.datetime.timezone; 134 135 import core.exception : AssertError; 136 import std.functional : unaryFun; 137 import std.traits; 138 import std.typecons : Flag, Yes, No; 139 140 141 // Verify module example. 142 @safe unittest 143 { 144 auto currentTime = Clock.currTime(); 145 auto timeString = currentTime.toISOExtString(); 146 auto restoredTime = SysTime.fromISOExtString(timeString); 147 } 148 149 // Verify Examples for core.time.Duration which couldn't be in core.time. 150 @safe unittest 151 { 152 assert(std.datetime.Date(2010, 9, 7) + dur!"days"(5) == 153 std.datetime.Date(2010, 9, 12)); 154 155 assert(std.datetime.Date(2010, 9, 7) - std.datetime.Date(2010, 10, 3) == 156 dur!"days"(-26)); 157 } 158 159 @safe unittest 160 { 161 import std.traits : hasUnsharedAliasing; 162 /* https://issues.dlang.org/show_bug.cgi?id=6642 */ 163 static assert(!hasUnsharedAliasing!Date); 164 static assert(!hasUnsharedAliasing!TimeOfDay); 165 static assert(!hasUnsharedAliasing!DateTime); 166 static assert(!hasUnsharedAliasing!SysTime); 167 }