std.time

時刻と期間。Time(ある瞬間)と Duration(長さ)は別の型で、 Time + Time のような意味のない計算は書けない。

import std.time;
var t = time.date(2026, 8, 15)!;
print(t.format("YYYY/MM/DD"));   // 2026/08/15
time.now time.monotonic time.date time.datetime time.parse time.seconds time.minutes time.hours time.days Time.format Time.year Time.month Time.day Time.hour Time.minute Time.second Time.weekday Time.to_local Time.to_utc Time.compare Duration.seconds Duration.minutes Duration.hours Duration.days Duration.compare

関数

time.now() → Time

いまの時刻。

var now = time.now();
print(now.year() >= 2026);   // true
time.monotonic() → Duration

起動してからの経過。時計合わせの影響を受けないので、時間を測るのに使う。

var start = time.monotonic();
sleep(0.2);
print(time.monotonic().seconds() > start.seconds());   // true
time.date(y: int, mo: int, d: int) → Time?

年月日から作る。ありえない日付なら none。

yint年
moint月(1〜12)
dint日(1〜31)
print(time.date(2026, 8, 15)!.format("YYYY-MM-DD"));   // 2026-08-15
print(time.date(2026, 2, 30) == none);                 // true
time.datetime(y: int, mo: int, d: int, h: int, mi: int, s: int) → Time?

年月日と時分秒から作る。ありえない日時なら none。

var t = time.datetime(2026, 8, 15, 12, 34, 56)!;
print(t.format("hh:mm:ss"));   // 12:34:56(UTC で持つ)
time.parse(s: string, format: string) → Time?

文字列から読む。書式に合わなければ none。

sstring読む文字列
formatstring書式。format() と同じ記号(YYYY MM DD hh mm ss)
var t = time.parse("2026-08-15 12:00:00", "YYYY-MM-DD hh:mm:ss")!;
print(t.hour());   // 12
time.seconds(v: float) → Duration

秒から Duration を作る。

print(time.seconds(90.0).minutes());   // 1.5
time.minutes(v: float) → Duration

分から Duration を作る。

print(time.minutes(2.0).seconds());   // 120.0
time.hours(v: float) → Duration

時から Duration を作る。

print(time.hours(1.0).minutes());   // 60.0
time.days(v: float) → Duration

日から Duration を作る。

print(time.days(1.0).hours());   // 24.0

Time

ある瞬間。中では UTC で持っている。

Time - Time で Duration、Time + Duration で Time になる。

Time.format(f: string) → string

書式に沿って文字列にする。

fstringYYYY 年 / MM 月 / DD 日 / hh 時 / mm 分 / ss 秒 / SSS ミリ秒
var t = time.datetime(2026, 8, 15, 12, 34, 56)!;
print(t.format("YYYY/MM/DD hh:mm:ss"));   // 2026/08/15 12:34:56
Time.year() → int

年。

print(time.date(2026, 8, 15)!.year());   // 2026
Time.month() → int

月(1〜12)。

print(time.date(2026, 8, 15)!.month());   // 8
Time.day() → int

日(1〜31)。

print(time.date(2026, 8, 15)!.day());   // 15
Time.hour() → int

時(0〜23)。

print(time.datetime(2026, 8, 15, 12, 34, 56)!.hour());   // 12
Time.minute() → int

分(0〜59)。

print(time.datetime(2026, 8, 15, 12, 34, 56)!.minute());   // 34
Time.second() → int

秒(0〜59)。

print(time.datetime(2026, 8, 15, 12, 34, 56)!.second());   // 56
Time.weekday() → int

曜日。0(日)〜 6(土)。

print(time.date(2026, 8, 15)!.weekday());   // 6(土曜)
Time.to_local() → Time

表示を地域時刻に切り替える。人に見せるときに使う。

指している瞬間は変わらないので、引き算や比較の結果は同じになる。

var t = time.datetime(2026, 8, 15, 12, 0, 0)!;   // UTC の 12:00
print(t.to_local().format("YYYY-MM-DD hh:mm"));  // 地域時刻(日本なら 2026-08-15 21:00)
print((t.to_local() - t).seconds());             // 0.0(同じ瞬間)
Time.to_utc() → Time

表示を UTC に戻す。記録に残すときに使う。何度呼んでも結果は変わらない。

var t = time.datetime(2026, 8, 15, 12, 0, 0)!;
print(t.to_local().to_utc().format("hh:mm"));   // 12:00
Time.compare(other: Time) → int

並べ替えのための比較。早い方が小さい。

var a = time.date(2026, 1, 1)!;
var b = time.date(2026, 8, 15)!;
print(a.compare(b));   // -1

Duration

時間の長さ。

Duration + Duration は Duration。Time との足し引きもできる。

Duration.seconds() → float

秒に直す。

print(time.minutes(1.0).seconds());   // 60.0
Duration.minutes() → float

分に直す。

print(time.hours(1.0).minutes());   // 60.0
Duration.hours() → float

時に直す。

print(time.days(1.0).hours());   // 24.0
Duration.days() → float

日に直す。

print(time.hours(36.0).days());   // 1.5
Duration.compare(other: Duration) → int

並べ替えのための比較。短い方が小さい。

print(time.seconds(1.0).compare(time.minutes(1.0)));   // -1