xref: /netbsd-src/external/gpl3/gcc/dist/libphobos/src/std/datetime/package.d (revision b1e838363e3c6fc78a55519254d99869742dd33c)
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&#46;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