std.date
日付を表現する形式は幾つかあります。この date では、 その変換の中心となる型 d_time を定め、他のフォーマット へ/から の変換を実装します。 日付はグレゴリオ歴で計算されます。References:
Gregorian calendar (Wikipedia)
License:
Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at Boost License 1.0)
Authors:
Walter Bright
- alias d_time;
- d_time
は1970年1月1日からの経過時間を表す符号付き数です。
負の値は1970年より前を表します。時間の単位は Tick です. Tick
はミリ秒か、それより小さい時間間隔です。
普通の算術演算(加算、減算など)は d_time に対して行うことができます。 例えば経過時間を Ticks 単位で得るには、終了時の d_time から開始時の d_time を引けばよいです。
- const d_time d_time_nan;
- d_timeが有効な時点を表現していないことを示す値です
- struct Date;
- 時刻を構成要素ごとに分解して表現した構造体です
- int year;
- year の "nan" 値としては int.min を使います
- int month;
- 1..12
- int day;
- 1..31
- int hour;
- 0..23
- int minute;
- 0..59
- int second;
- 0..59
- int ms;
- 0..999
- int weekday;
- 0: 指定なし, 1..7: 日曜..土曜
- int tzcorrection;
- -1200..1200 のタイムゾーン指定
- void parse(string s);
- 文字列 s[] をパースして Date インスタンスに格納します
- TicksPerSecond
- この実装で1秒が何Ticksであるかを示す定数。少なくとも1000。
- void toISO8601YearWeek(d_time t, out int year, out int week);
- t から年と週 [1..53] を計算します。ISO 8601 では、年の最初の週とは、
1月4日を含む週のことです。週の始まりは月曜日とします。
References:
ISO 8601 (Wikipedia)
- int YearFromTime(d_time t);
- d_time t から年を計算します。
- int inLeapYear(d_time t);
- d_time t がうるう年かどうかを判定します。
うるう年は、4で割り切れる年のうち、400で割り切れない00で終わる年を 除いたものです。
Returns:
うるう年なら非0
References:
Wikipedia
- int MonthFromTime(d_time t);
- d_time t から月を計算します。
Returns:
0 から 11 の整数を返します。 0 が一月、11が十二月を表します。
- int DateFromTime(d_time t);
- d_time t から日を計算します。
Returns:
1 から 31 の整数を返します。
- int WeekDay(d_time t);
- d_time t から曜日を計算します。
Returns:
0 から 6 の整数を返します。0 が日曜日で、 6 が土曜日を表します。
- d_time UTCtoLocalTime(d_time t);
- UTCからローカルタイムへ変換します。
- d_time LocalTimetoUTC(d_time t);
- ローカルタイムからUTCへ変換します。
- int DateFromNthWeekdayOfMonth(int year, int month, int weekday, int n);
- 月の第n weekday曜日という指定から、日 1..31
の値を計算します。
Params:
int year year int month month, 1..12 int weekday 曜日。0..6 が Sunday..Saturday に対応 int n 1..5 によって、第n weekday曜日を指定します。 また、5 は "月の最後のweekday曜日" も意味します。
Returns:
指定月の第n weekday曜日が 1..31 のいずれの日であるかを返します。
- int DaysInMonth(int year, int month);
- 月の日数を返します。
Params:
int month 1..12
- string toString(d_time time);
- time を "Www Mmm dd hh:mm:ss GMT+-TZ yyyy"
形式の文字列へ変換します。
例えば "Tue Apr 02 02:04:57 GMT-0800 1996" など。
なお、timeが不正値つまり d_date.nan の時は、
"Invalid date" という文字列が返ります。
Example:
d_time lNow; char[] lNowString; // UTCで現在の日時を取得 lNow = std.date.getUTCtime(); // 現地時間に変換して表示 lNowString = std.date.toString(lNow);
- string toUTCString(d_time t);
- t を "Www, dd Mmm yyyy hh:mm:ss UTC" 形式の文字列へ変換します。
tが不正値の時は、"Invalid date" が返ります。
- string toDateString(d_time time);
- time の日付部分をを "Www Mmm dd yyyy" 形式の文字列へ変換します。
例えば "Tue Apr 02 1996" など。
なお、timeが不正値の時は、"Invalid date" が返ります。
- string toTimeString(d_time time);
- time の時刻部分を "hh:mm:ss GMT+-TZ" 形式の文字列へ変換します。
例えば "02:04:57 GMT-0800" など。
なお、timeが不正値の時は、"Invalid date" が返ります。
入力はUTCで指定します。出力はローカル時間になります。
- d_time parse(string s);
- 日時を表した文字列 s を解析し、d_time を返します。
もし文字列が有効な日時を表していなければ、d_time.nan が返ります。
- d_time getUTCtime();
- 現在の時刻をUTCで取得します。
- typedef DosFileTime;
- DOSファイルの date/time 形式をあらわす型
- d_time toDtime(DosFileTime time);
- DOS形式のファイル日時からd_timeへ変換します。
- DosFileTime toDosFileTime(d_time t);
- d_timeからDOS形式のファイル日時へ変換します。