AM Daemon ライブラリリファレンス
DateTime.h
[詳解]
1 /// @file
2 /// @brief マイクロ秒精度の日付時刻を表す構造体 DateTime のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_UTIL_DATETIME_H
7 #define AMDAEMON_UTIL_DATETIME_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/util/TimeSpan.h"
11 
12 #include <chrono>
13 #include <string>
14 #include <cstdint>
15 #include <ctime>
16 
17 namespace amdaemon
18 {
19 namespace util
20 {
21 /// @addtogroup g_util
22 /// @{
23 
24  //--------------------
25  // DateTime 構造体定義
26  //--------------------
27 
28  /// @brief マイクロ秒精度の日付時刻を表す構造体 DateTime のヘッダ。
29  /// @note memcpy 可能。
30  ///
31  /// 内部値として西暦1年1月1日0時0分0秒からの経過マイクロ秒数値を持つ。
32  /// この値の基準時刻(ローカル、UTC等)については関知しないため、利用側で定めること。
33  ///
34  /// UNIXタイムスタンプ値を用いてインスタンスを生成する各静的メンバ関数には、
35  /// 基準時刻をUTCとするかローカルとするか選択するための引数が用意されている。
36  /// いずれも引数指定を省略した場合はローカルを基準とする。
37  struct DateTime
38  {
39  /// 内部値の表現型。
40  typedef std::uint64_t value_type;
41 
42  /// 個別要素値の表現型。
43  typedef std::int32_t part_type;
44 
45  /// @brief 西暦1年1月1日0時0分0秒からの経過マイクロ秒数値。
46  /// @attention
47  /// std::time 関数が返す std::time_t 値とは異なる。
48  /// std::time_t 値からの変換は静的メンバ関数 #make(std::time_t, bool) で行うこと。
49  value_type value;
50 
51  /// @brief 表現可能な最小値を持つ日付時刻値を取得する。
52  /// @return 最小の日付時刻値。
53  static const DateTime& min();
54 
55  /// @brief 表現可能な最大値を持つ日付時刻値を取得する。
56  /// @return 最大の日付時刻値。
57  static const DateTime& max();
58 
59  /// @brief エポックを表すUTC(世界協定時刻)の日付時刻値を取得する。
60  /// @return エポックを表すUTC(世界協定時刻)の日付時刻値。
61  static const DateTime& epoch();
62 
63  /// @brief 現在日時を表す日付時刻値を取得する。
64  /// @param[in] utc
65  /// UTC(世界協定時刻)の日付時刻値を作成するならば true 。
66  /// ローカルの日付時刻値を作成するならば false (既定値)。
67  /// @return 現在日時を表す日付時刻値。
68  static DateTime now(bool utc = false);
69 
70  /// @brief 現在日の0時0分0秒を表す日付時刻値を取得する。
71  /// @param[in] utc
72  /// UTC(世界協定時刻)の日付時刻値を作成するならば true 。
73  /// ローカルの日付時刻値を作成するならば false (既定値)。
74  /// @return 現在日の0時0分0秒を表す日付時刻値。
75  static DateTime today(bool utc = false)
76  {
77  return now(utc).getDate();
78  }
79 
80  /// @brief 日付時刻値を問題なく作成可能な値であるか否かを調べる。
81  /// @param[in] year 年。 1 以上 max().year() 以下。
82  /// @param[in] month 月。 1 以上 12 以下。
83  /// @param[in] day 日。 1 以上かつ月の日数以下。
84  /// @param[in] hour 時。 0 以上 23 以下。
85  /// @param[in] minute 分。 0 以上 59 以下。
86  /// @param[in] second 秒。 0 以上 59 以下。
87  /// @param[in] millisecond ミリ秒。 0 以上 999 以下。
88  /// @param[in] microsecond マイクロ秒。 0 以上 999 以下。
89  /// @retval true 作成可能である場合。
90  /// @retval false 作成不可能である場合。
91  /// @see make(part_type, part_type, part_type, part_type, part_type, part_type, part_type, part_type)
92  ///
93  /// この関数が true を返す場合、同じ引数を静的メンバ関数
94  /// make(part_type, part_type, part_type, part_type, part_type, part_type, part_type, part_type)
95  /// に渡すことで、例外を発生させることなく日付時刻値を作成可能であることが保証される。
96  static bool canMake(
97  part_type year,
98  part_type month,
99  part_type day,
100  part_type hour,
101  part_type minute,
102  part_type second = 0,
103  part_type millisecond = 0,
104  part_type microsecond = 0);
105 
106  /// @brief 日付と時刻を表す値から日付時刻値を作成する。
107  /// @param[in] year 年。 1 以上 max().year() 以下。
108  /// @param[in] month 月。 1 以上 12 以下。
109  /// @param[in] day 日。 1 以上かつ月の日数以下。
110  /// @param[in] hour 時。 0 以上 23 以下。
111  /// @param[in] minute 分。 0 以上 59 以下。
112  /// @param[in] second 秒。 0 以上 59 以下。
113  /// @param[in] millisecond ミリ秒。 0 以上 999 以下。
114  /// @param[in] microsecond マイクロ秒。 0 以上 999 以下。
115  /// @return 作成された日付時刻値。
116  /// @see canMake(part_type, part_type, part_type, part_type, part_type, part_type, part_type, part_type)
117  ///
118  /// @exception Exception
119  /// - 引数 year に 0 以下もしくは max().year() より大きい値を指定した場合。
120  /// - 引数 month に 0 以下もしくは 13 以上の値を指定した場合。
121  /// - 引数 day に 0 以下もしくは月の日数を超える値を指定した場合。
122  /// - 引数 hour に負数もしくは 24 以上の値を指定した場合。
123  /// - 引数 minute に負数もしくは 60 以上の値を指定した場合。
124  /// - 引数 second に負数もしくは 60 以上の値を指定した場合。
125  /// - 引数 millisecond に負数もしくは 1000 以上の値を指定した場合。
126  /// - 引数 microsecond に負数もしくは 1000 以上の値を指定した場合。
127  /// - 内部値に変換した値が表現可能範囲に収まらない場合。
128  static DateTime make(
129  part_type year,
130  part_type month,
131  part_type day,
132  part_type hour,
133  part_type minute,
134  part_type second = 0,
135  part_type millisecond = 0,
136  part_type microsecond = 0);
137 
138  /// @brief 日付時刻値を問題なく作成可能な値であるか否かを調べる。
139  /// @param[in] year 年。 1 以上 max().year() 以下。
140  /// @param[in] month 月。 1 以上 12 以下。
141  /// @param[in] day 日。 1 以上かつ月の日数以下。
142  /// @retval true 作成可能である場合。
143  /// @retval false 作成不可能である場合。
144  /// @see make(part_type, part_type, part_type)
145  ///
146  /// この関数が true を返す場合、同じ引数を静的メンバ関数
147  /// make(part_type, part_type, part_type)
148  /// に渡すことで、例外を発生させることなく日付時刻値を作成可能であることが保証される。
149  static bool canMake(part_type year, part_type month, part_type day)
150  {
151  return canMake(year, month, day, 0, 0);
152  }
153 
154  /// @brief 日付を表す値から日付時刻値を作成する。
155  /// @param[in] year 年。 1 以上 max().year() 以下。
156  /// @param[in] month 月。 1 以上 12 以下。
157  /// @param[in] day 日。 1 以上かつ月の日数以下。
158  /// @return 作成された日付時刻値。
159  /// @see canMake(part_type, part_type, part_type)
160  ///
161  /// @exception Exception
162  /// - 引数 year に 0 以下もしくは max().year() より大きい値を指定した場合。
163  /// - 引数 month に 0 以下もしくは 13 以上の値を指定した場合。
164  /// - 引数 day に 0 以下もしくは月の日数を超える値を指定した場合。
165  /// - 内部値に変換した値が表現可能範囲に収まらない場合。
166  ///
167  /// make(year, month, day, 0, 0) と等価。
168  static DateTime make(part_type year, part_type month, part_type day)
169  {
170  return make(year, month, day, 0, 0);
171  }
172 
173  /// @brief 日付時刻値を問題なく作成可能なタイムポイント値であるか否かを調べる。
174  /// @param[in] timePoint システムクロックのタイムポイント値。
175  /// @param[in] utc
176  /// UTC(世界協定時刻)の日付時刻値を作成するならば true 。
177  /// ローカルの日付時刻値を作成するならば false (既定値)。
178  /// @retval true 作成可能である場合。
179  /// @retval false 作成不可能である場合。
180  /// @see make(const std::chrono::system_clock::time_point&, bool)
181  ///
182  /// この関数が true を返す場合、同じ引数を静的メンバ関数
183  /// make(const std::chrono::system_clock::time_point&, bool)
184  /// に渡すことで、例外を発生させることなく日付時刻値を作成可能であることが保証される。
185  static bool canMake(
186  const std::chrono::system_clock::time_point& timePoint,
187  bool utc = false);
188 
189  /// @brief タイムポイント値から日付時刻値を作成する。
190  /// @param[in] timePoint システムクロックのタイムポイント値。
191  /// @param[in] utc
192  /// UTC(世界協定時刻)の日付時刻値を作成するならば true 。
193  /// ローカルの日付時刻値を作成するならば false (既定値)。
194  /// @return 作成された日付時刻値。
195  /// @see canMake(const std::chrono::system_clock::time_point&, bool)
196  ///
197  /// @exception Exception
198  /// 内部値に変換した値が表現可能範囲に収まらない場合。
199  static DateTime make(
200  const std::chrono::system_clock::time_point& timePoint,
201  bool utc = false);
202 
203  /// @brief 日付時刻値を問題なく作成可能なUNIXタイムスタンプ値であるか否かを調べる。
204  /// @param[in] timeStamp UNIXタイムスタンプ値。
205  /// @param[in] utc
206  /// UTC(世界協定時刻)の日付時刻値を作成するならば true 。
207  /// ローカルの日付時刻値を作成するならば false (既定値)。
208  /// @retval true 作成可能である場合。
209  /// @retval false 作成不可能である場合。
210  /// @see make(std::time_t, bool)
211  ///
212  /// この関数が true を返す場合、同じ引数を静的メンバ関数
213  /// make(std::time_t, bool)
214  /// に渡すことで、例外を発生させることなく日付時刻値を作成可能であることが保証される。
215  static bool canMake(std::time_t timeStamp, bool utc = false);
216 
217  /// @brief UNIXタイムスタンプ値から日付時刻値を作成する。
218  /// @param[in] timeStamp UNIXタイムスタンプ値。
219  /// @param[in] utc
220  /// UTC(世界協定時刻)の日付時刻値を作成するならば true 。
221  /// ローカルの日付時刻値を作成するならば false (既定値)。
222  /// @return 作成された日付時刻値。
223  /// @see canMake(std::time_t, bool)
224  ///
225  /// @exception Exception
226  /// 内部値に変換した値が表現可能範囲に収まらない場合。
227  static DateTime make(std::time_t timeStamp, bool utc = false);
228 
229  /// @brief 日付時刻値を問題なく作成可能な std::tm 構造体値であるか否かを調べる。
230  /// @param[in] tm std::tm 構造体値。夏時間情報は無視される。
231  /// @retval true 作成可能である場合。
232  /// @retval false 作成不可能である場合。
233  /// @see make(const std::tm&)
234  ///
235  /// この関数が true を返す場合、同じ引数を静的メンバ関数
236  /// make(const std::tm&)
237  /// に渡すことで、例外を発生させることなく日付時刻値を作成可能であることが保証される。
238  static bool canMake(const std::tm& tm);
239 
240  /// @brief std::tm 構造体値から日付時刻値を作成する。
241  /// @param[in] tm std::tm 構造体値。夏時間情報は無視される。
242  /// @return 作成された日付時刻値。
243  /// @see canMake(const std::tm&)
244  ///
245  /// @exception Exception
246  /// - 引数 tm のいずれかのメンバ値が有効範囲外である場合。
247  /// - 内部値に変換した値が表現可能範囲に収まらない場合。
248  static DateTime make(const std::tm& tm);
249 
250  /// @brief DateTime 値に TimeSpan 値を加算する。
251  /// @param[in] dt 加算対象。
252  /// @param[in] span 加算値。
253  /// @return 加算結果の日付時刻値。
254  ///
255  /// @exception Exception
256  /// 演算結果値が表現可能範囲に収まらない場合。
257  static DateTime add(const DateTime& dt, const TimeSpan& span);
258 
259  /// @brief DateTime 値から TimeSpan 値を減算する。
260  /// @param[in] dt 減算対象。
261  /// @param[in] span 減算値。
262  /// @return 減算結果の日付時刻値。
263  ///
264  /// @exception Exception
265  /// 演算結果値が表現可能範囲に収まらない場合。
266  static DateTime subtract(const DateTime& dt, const TimeSpan& span);
267 
268  /// @brief DateTime 値から別の DateTime 値を減算して時間間隔を算出する。
269  /// @param[in] dt1 減算対象。
270  /// @param[in] dt2 減算値。
271  /// @return 減算結果の時間間隔値。
272  ///
273  /// @exception Exception
274  /// 演算結果値が表現可能範囲に収まらない場合。
275  static TimeSpan subtract(const DateTime& dt1, const DateTime& dt2);
276 
277  /// @brief 指定した年が閏年であるか否かを取得する。
278  /// @param[in] year 年。 1 以上 max().year() 以下。
279  /// @retval true 閏年である場合。
280  /// @retval false 閏年ではない場合。
281  ///
282  /// @exception Exception
283  /// 引数 year に 0 以下もしくは max().year() より大きい値を指定した場合。
284  static bool isLeapYear(part_type year);
285 
286  /// @brief 指定した年月の日数を取得する。
287  /// @param[in] year 年。 1 以上 max().year() 以下。
288  /// @param[in] month 月。 1 以上 12 以下。
289  /// @return 指定した年月の日数。 28 以上 31 以下。
290  ///
291  /// @exception Exception
292  /// - 引数 year に 0 以下もしくは max().year() より大きい値を指定した場合。
293  /// - 引数 month に 0 以下もしくは 13 以上の値を指定した場合。
294  static part_type getDaysOf(part_type year, part_type month);
295 
296  /// @brief 指定したUTC日付時刻値のUNIXタイムスタンプを表す時間間隔値を算出する。
297  /// @param[in] utcTime UTC日付時刻値。既定では現在日時を用いる。
298  /// @return UNIXタイムスタンプを表す時間間隔値。
299  ///
300  /// @exception Exception
301  /// - 演算結果値が表現可能範囲に収まらない場合。
302  /// - 引数 utcTime がエポックより過去である場合。
303  ///
304  /// UTCにおけるエポックからの経過時間を算出して返す。
305  /// 引数 utcTime の基準時刻がUTCである前提で計算する。
306  static TimeSpan calcUnixTimestampOf(const DateTime& utcTime = now(true));
307 
308  /// @brief 日時表現における年を取得する。
309  /// @return 年。
310  part_type year() const;
311 
312  /// @brief 日時表現における月を取得する。
313  /// @return 月。
314  part_type month() const;
315 
316  /// @brief 日時表現における日を取得する。
317  /// @return 日。
318  part_type day() const;
319 
320  /// @brief 日時表現における時を取得する。
321  /// @return 時。
322  part_type hour() const;
323 
324  /// @brief 日時表現における分を取得する。
325  /// @return 分。
326  part_type minute() const;
327 
328  /// @brief 日時表現における秒を取得する。
329  /// @return 秒。
330  part_type second() const;
331 
332  /// @brief 日時表現におけるミリ秒を取得する。
333  /// @return ミリ秒。
334  part_type millisecond() const;
335 
336  /// @brief 日時表現におけるマイクロ秒を取得する。
337  /// @return マイクロ秒。
338  part_type microsecond() const;
339 
340  /// @brief 日時表現における曜日を表す数値を取得する。
341  /// @return 曜日を表す数値。 0 が日曜、 6 が土曜。
342  part_type week() const;
343 
344  /// @brief 1年1月1日からの通算日数を取得する。
345  /// @return 1年1月1日からの通算日数。
346  value_type getTotalDays() const;
347 
348  /// @brief 時刻部分を0時0分0秒にした日付時刻値を取得する。
349  /// @return 時刻部分を0時0分0秒にした日付時刻値。
350  DateTime getDate() const;
351 
352  /// @brief 日時表現における各要素値をまとめて取得する。
353  /// @param[in] year 年の設定先。取得しないならば nullptr 。
354  /// @param[in] month 月の設定先。取得しないならば nullptr 。
355  /// @param[in] day 日の設定先。取得しないならば nullptr 。
356  /// @param[in] hour 時の設定先。取得しないならば nullptr 。
357  /// @param[in] minute 分の設定先。取得しないならば nullptr 。
358  /// @param[in] second 秒の設定先。取得しないならば nullptr 。
359  /// @param[in] millisecond ミリ秒の設定先。取得しないならば nullptr 。
360  /// @param[in] microsecond マイクロ秒の設定先。取得しないならば nullptr 。
361  void getParts(
362  part_type* year,
363  part_type* month = nullptr,
364  part_type* day = nullptr,
365  part_type* hour = nullptr,
366  part_type* minute = nullptr,
367  part_type* second = nullptr,
368  part_type* millisecond = nullptr,
369  part_type* microsecond = nullptr) const;
370 
371  /// @brief 文字列表現値を作成する。
372  /// @param[in] format フォーマット文字列。
373  /// @return 文字列表現値。
374  ///
375  /// 引数 format には下記のフォーマット文字列と任意の文字列の組み合わせを指定する。
376  /// 大文字と小文字は区別されることに注意。
377  ///
378  /// - "%Y" -- 年。
379  /// - "%y" -- 年の下2桁。
380  /// - "%M" -- 月。
381  /// - "%D" -- 日。
382  /// - "%h" -- 時。
383  /// - "%m" -- 分。
384  /// - "%s" -- 秒。
385  /// - "%i" -- ミリ秒。
386  /// - "%u" -- マイクロ秒。
387  /// - "%w" -- 英語略式の曜日。 "Sun" 等。
388  /// - "%W" -- 日本語の曜日。 "日" 等。
389  /// - "%x" -- "%Y/%02M/%02D" と等価。
390  /// - "%X" -- "%02h:%02m:%02s" と等価。
391  /// - "%t" -- "%x %X" と等価。
392  /// - "%v" -- value 値そのもの。
393  /// - "%%" -- 文字 '%' 。
394  ///
395  /// 数値を表すフォーマット文字列は、1文字目の '%' の直後に幅指定を行う事ができる。
396  /// 幅指定は「数字」か、「文字 '0' + 数字」の形式で指定でき、例えば次のようになる。
397  ///
398  /// - "%2s" -- 最小2文字幅になるよう先頭に空白文字が付与される。
399  /// - "%02s" -- 最小2文字幅になるよう先頭に文字 '0' が付与される。
400  ///
401  /// 引数 format に nullptr を指定した場合、 "%t" を指定したものとして扱う。
402  std::wstring toString(const wchar_t* format = nullptr) const;
403 
404  /// @brief 加算代入演算子のオーバロード。
405  /// @param[in] r 右辺値。
406  /// @return 自身の参照。
407  ///
408  /// @exception Exception
409  /// 演算結果値が表現可能範囲に収まらない場合。
411  {
412  return (*this = add(*this, r));
413  }
414 
415  /// @brief 減算代入演算子のオーバロード。
416  /// @param[in] r 右辺値。
417  /// @return 自身の参照。
418  ///
419  /// @exception Exception
420  /// 演算結果値が表現可能範囲に収まらない場合。
422  {
423  return (*this = subtract(*this, r));
424  }
425  };
426 
427 /// @}
428 
429  //--------------------
430  // インライン関数定義
431  //--------------------
432 
433  /// @brief 加算演算子のオーバロード。
434  /// @param[in] l 左辺値。
435  /// @param[in] r 右辺値。
436  /// @return 演算結果値。
437  /// @relatesalso DateTime
438  ///
439  /// @exception Exception
440  /// 演算結果値が表現可能範囲に収まらない場合。
441  inline DateTime operator+(const DateTime& l, const TimeSpan& r)
442  {
443  return DateTime::add(l, r);
444  }
445 
446  /// @brief 減算演算子のオーバロード。
447  /// @param[in] l 左辺値。
448  /// @param[in] r 右辺値。
449  /// @return 演算結果値。
450  /// @relatesalso DateTime
451  ///
452  /// @exception Exception
453  /// 演算結果値が表現可能範囲に収まらない場合。
454  inline DateTime operator-(const DateTime& l, const TimeSpan& r)
455  {
456  return DateTime::subtract(l, r);
457  }
458 
459  /// @brief 減算演算子のオーバロード。
460  /// @param[in] l 左辺値。
461  /// @param[in] r 右辺値。
462  /// @return 演算結果値。
463  /// @relatesalso DateTime
464  ///
465  /// @exception Exception
466  /// 演算結果値が表現可能範囲に収まらない場合。
467  inline TimeSpan operator-(const DateTime& l, const DateTime& r)
468  {
469  return DateTime::subtract(l, r);
470  }
471 
472  /// @brief 等価比較演算子のオーバロード。
473  /// @param[in] l 左辺値。
474  /// @param[in] r 右辺値。
475  /// @return 比較結果値。
476  /// @relatesalso DateTime
477  inline bool operator==(const DateTime& l, const DateTime& r)
478  {
479  return (l.value == r.value);
480  }
481 
482  /// @brief 非等価比較演算子のオーバロード。
483  /// @param[in] l 左辺値。
484  /// @param[in] r 右辺値。
485  /// @return 比較結果値。
486  /// @relatesalso DateTime
487  inline bool operator!=(const DateTime& l, const DateTime& r)
488  {
489  return !(l == r);
490  }
491 
492  /// @brief 小なり比較演算子のオーバロード。
493  /// @param[in] l 左辺値。
494  /// @param[in] r 右辺値。
495  /// @return 比較結果値。
496  /// @relatesalso DateTime
497  inline bool operator<(const DateTime& l, const DateTime& r)
498  {
499  return (l.value < r.value);
500  }
501 
502  /// @brief 大なり比較演算子のオーバロード。
503  /// @param[in] l 左辺値。
504  /// @param[in] r 右辺値。
505  /// @return 比較結果値。
506  /// @relatesalso DateTime
507  inline bool operator>(const DateTime& l, const DateTime& r)
508  {
509  return (r < l);
510  }
511 
512  /// @brief 小なり等価比較演算子のオーバロード。
513  /// @param[in] l 左辺値。
514  /// @param[in] r 右辺値。
515  /// @return 比較結果値。
516  /// @relatesalso DateTime
517  inline bool operator<=(const DateTime& l, const DateTime& r)
518  {
519  return !(r < l);
520  }
521 
522  /// @brief 大なり等価比較演算子のオーバロード。
523  /// @param[in] l 左辺値。
524  /// @param[in] r 右辺値。
525  /// @return 比較結果値。
526  /// @relatesalso DateTime
527  inline bool operator>=(const DateTime& l, const DateTime& r)
528  {
529  return !(l < r);
530  }
531 } // namespace util
532 } // namespace amdaemon
533 
534 #endif // AMDAEMON_UTIL_DATETIME_H
static DateTime now(bool utc=false)
現在日時を表す日付時刻値を取得する。
bool operator>=(const DateTime &l, const DateTime &r)
大なり等価比較演算子のオーバロード。
Definition: DateTime.h:527
static const DateTime & max()
表現可能な最大値を持つ日付時刻値を取得する。
static part_type getDaysOf(part_type year, part_type month)
指定した年月の日数を取得する。
std::int32_t part_type
個別要素値の表現型。
Definition: DateTime.h:43
static DateTime make(part_type year, part_type month, part_type day, part_type hour, part_type minute, part_type second=0, part_type millisecond=0, part_type microsecond=0)
日付と時刻を表す値から日付時刻値を作成する。
value_type value
西暦1年1月1日0時0分0秒からの経過マイクロ秒数値。
Definition: DateTime.h:49
static const DateTime & epoch()
エポックを表すUTC(世界協定時刻)の日付時刻値を取得する。
part_type minute() const
日時表現における分を取得する。
static DateTime subtract(const DateTime &dt, const TimeSpan &span)
DateTime 値から TimeSpan 値を減算する。
bool operator<(const DateTime &l, const DateTime &r)
小なり比較演算子のオーバロード。
Definition: DateTime.h:497
static bool canMake(part_type year, part_type month, part_type day, part_type hour, part_type minute, part_type second=0, part_type millisecond=0, part_type microsecond=0)
日付時刻値を問題なく作成可能な値であるか否かを調べる。
static TimeSpan calcUnixTimestampOf(const DateTime &utcTime=now(true))
指定したUTC日付時刻値のUNIXタイムスタンプを表す時間間隔値を算出する。
value_type getTotalDays() const
1年1月1日からの通算日数を取得する。
part_type second() const
日時表現における秒を取得する。
DateTime & operator+=(const TimeSpan &r)
加算代入演算子のオーバロード。
Definition: DateTime.h:410
bool operator==(const DateTime &l, const DateTime &r)
等価比較演算子のオーバロード。
Definition: DateTime.h:477
static bool isLeapYear(part_type year)
指定した年が閏年であるか否かを取得する。
Daemonライブラリの環境定義を行うヘッダ。
DateTime operator+(const DateTime &l, const TimeSpan &r)
加算演算子のオーバロード。
Definition: DateTime.h:441
bool operator!=(const DateTime &l, const DateTime &r)
非等価比較演算子のオーバロード。
Definition: DateTime.h:487
DateTime operator-(const DateTime &l, const TimeSpan &r)
減算演算子のオーバロード。
Definition: DateTime.h:454
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
part_type year() const
日時表現における年を取得する。
DateTime & operator-=(const TimeSpan &r)
減算代入演算子のオーバロード。
Definition: DateTime.h:421
std::wstring toString(const wchar_t *format=nullptr) const
文字列表現値を作成する。
マイクロ秒精度の日付時刻を表す構造体 DateTime のヘッダ。
Definition: DateTime.h:37
part_type week() const
日時表現における曜日を表す数値を取得する。
part_type millisecond() const
日時表現におけるミリ秒を取得する。
static DateTime make(part_type year, part_type month, part_type day)
日付を表す値から日付時刻値を作成する。
Definition: DateTime.h:168
DateTime getDate() const
時刻部分を0時0分0秒にした日付時刻値を取得する。
static const DateTime & min()
表現可能な最小値を持つ日付時刻値を取得する。
std::uint64_t value_type
内部値の表現型。
Definition: DateTime.h:40
bool operator<=(const DateTime &l, const DateTime &r)
小なり等価比較演算子のオーバロード。
Definition: DateTime.h:517
static DateTime today(bool utc=false)
現在日の0時0分0秒を表す日付時刻値を取得する。
Definition: DateTime.h:75
static DateTime add(const DateTime &dt, const TimeSpan &span)
DateTime 値に TimeSpan 値を加算する。
part_type microsecond() const
日時表現におけるマイクロ秒を取得する。
bool operator>(const DateTime &l, const DateTime &r)
大なり比較演算子のオーバロード。
Definition: DateTime.h:507
part_type day() const
日時表現における日を取得する。
マイクロ秒精度の時間間隔を表す構造体 TimeSpan のヘッダ。
part_type hour() const
日時表現における時を取得する。
static bool canMake(part_type year, part_type month, part_type day)
日付時刻値を問題なく作成可能な値であるか否かを調べる。
Definition: DateTime.h:149
void getParts(part_type *year, part_type *month=nullptr, part_type *day=nullptr, part_type *hour=nullptr, part_type *minute=nullptr, part_type *second=nullptr, part_type *millisecond=nullptr, part_type *microsecond=nullptr) const
日時表現における各要素値をまとめて取得する。
マイクロ秒精度の時間間隔を表す構造体。
Definition: TimeSpan.h:29
part_type month() const
日時表現における月を取得する。