std.date
日付を表現する形式は幾つかあります。この
date モジュールでは、
その変換の中心となる型 d_time を定め、
他のフォーマットへ/から の変換を実装します。
日付はグレゴリオ歴で計算されます。
Source:std/date.d
References:
Gregorian calendar (Wikipedia)
License:Boost License 1.0
Authors:Walter Bright
- d_time は1970年1月1日からの
経過時間を表す符号付き数です。
負の値は1970年より前を表します。時間の単位は Ticks です。
Ticks はミリ秒か、それより小さい時間間隔です。
普通の算術演算(加算、減算など)は d_time に対して行うことができます。
例えば経過時間を Ticks 単位で得るには、終了時の
d_time から開始時の d_time を引けばよいです。
- d_timeが有効な時点を表現していないことを示す値です
- 時刻を構成要素ごとに分解して表現した構造体です
- year の "nan" 値としては int.min を使います
- 1..12
- 1..31
- 0..23
- 0..59
- 0..59
- 0..999
- 0: 指定なし, 1..7: 日曜..土曜
- -1200..1200 のタイムゾーン指定
- 文字列 s[] をパースして Date インスタンスに格納します
- この実装で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
hourFromTime(d_time
time);
- time の hour(時) を計算します。
Parameters:
d_time time |
hour を計算したい time |
Returns:
0 から 23 の値
int
minFromTime(d_time
time);
- time の minute(分) を計算します。
Parameters:
d_time time |
minute を計算したい time |
Returns:
0 から 59 の値
int
secFromTime(d_time
time);
- time の second(秒) を計算します。
Parameters:
d_time time |
second を計算したい time |
Returns:
0 から 59 の値
int
msFromTime(d_time
time);
- time の milisecond(ミリ秒) を計算します。
Parameters:
d_time time |
millisecond を計算したい time |
Returns:
0 から 999 の値
uint
daysInYear(uint
year);
- 指定の年 year の日数を返します。
閏年なら366、その他の年は365を返します。
Parameters:
Returns:
365 か 366
int
dayFromYear(int
year);
- 1970年1月1日から、
指定の年の1月1日までの日数を計算して返します。
Parameters:
Returns:
日数
Example:
writeln(dayFromYear(1970)); writeln(dayFromYear(1971)); writeln(dayFromYear(1972));
int
yearFromTime(d_time
t);
- d_time t から年を計算します。
bool
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 の整数を返します。
- 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 |
年 |
int 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:
string
UTCtoString(d_time
time);
- UTC の 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;
lNow = std.date.getUTCtime();
lNowString = std.date.UTCtoString(lNow);
deprecated alias
toString;
- UTCtoString の別名 (非推奨)
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で指定します。出力はローカル時間になります。
- 日時を表した文字列 s を解析し、d_time を返します。
もし文字列が有効な日時を表していなければ、d_time.nan が返ります。
- 現在の時刻をUTCで取得します。
- DOSファイルの date/time 形式をあらわす型
d_time
toDtime(DosFileTime
time);
- DOS形式のファイル日時からd_timeへ変換します。
DosFileTime
toDosFileTime(d_time
t);
- d_timeからDOS形式のファイル日時へ変換します。
ulong[]
benchmark(fun...)(uint
times, uint[]
result = null);
- スピードの評価の比較のためのコードのベンチマークを行います
Parameters:
fun |
呼び出し可能オブジェクトへのエイリアス(関数名など)の列。
引数無しで呼び出し可能なオブジェクトを指定します。 |
times |
それぞれの関数を実行する回数 |
result |
返値を格納するオプショナルな領域。null
が指定された場合は適切に新しい領域が確保されます。 |
Returns:
n 個の uint。i 番目のスロットには
i番目の関数を times 回実行するのにかかった時間がミリ秒単位で格納されます。
Example:
int a;
void f0() { }
void f1() { auto b = a; }
void f2() { auto b = to!(string)(a); }
auto r = benchmark!(f0, f1, f2)(10_000_000);