本文へ移動
Hikari リファレンス

std:time リファレンス

import time := "std:time" で取得する日時モジュール。Date / Time / Instant / Duration の 4 型と、現在時刻の取得・構築・解析を提供する。

Friday

Friday
Friday: Weekday

曜日を表す Variant 値 (金曜)。

>>> time.Friday
Friday

Monday

Monday
Monday: Weekday

曜日を表す Variant 値 (月曜)。

>>> time.Monday
Monday

Saturday

Saturday
Saturday: Weekday

曜日を表す Variant 値 (土曜)。

>>> time.Saturday
Saturday

Sunday

Sunday
Sunday: Weekday

曜日を表す Variant 値 (日曜)。

>>> time.Sunday
Sunday

Thursday

Thursday
Thursday: Weekday

曜日を表す Variant 値 (木曜)。

>>> time.Thursday
Thursday

Tuesday

Tuesday
Tuesday: Weekday

曜日を表す Variant 値 (火曜)。

>>> time.Tuesday
Tuesday

Wednesday

Wednesday
Wednesday: Weekday

曜日を表す Variant 値 (水曜)。

>>> time.Wednesday
Wednesday

date

date(rec)
date: { { year: Int, month: Int, day: Int |} | Result(Date) }

{year, month, day} から Date を構築する。

>>> time.date({ year := 2024, month := 1, day := 1 |})
Ok(2024-01-01)

days

days(n)
days: { Int | Duration }

n 日 (24h 固定) の Duration を返す。

>>> time.days(1)
Duration(24h0m0s)

from_epoch_ms

from_epoch_ms(n)
from_epoch_ms: { Int | Instant }

epoch ミリ秒 Int から Instant を構築する。

>>> time.from_epoch_ms(0)
1970-01-01T00:00:00Z

hours

hours(n)
hours: { Int | Duration }

n 時間の Duration を返す。

>>> time.hours(2)
Duration(2h0m0s)

millis

millis(n)
millis: { Int | Duration }

n ミリ秒の Duration を返す。

>>> time.millis(1500)
Duration(0h0m1s500ms)

minutes

minutes(n)
minutes: { Int | Duration }

n 分の Duration を返す。

>>> time.minutes(5)
Duration(0h5m0s)

now

now()
now: { Effect(Instant, Time) }

現在時刻 (UTC) を Instant で返す。

効果ハンドラーの操作である。handle の操作スロットに now と書いて横取りできる(language-spec.md §17.9)。

>>> print (time.now().epoch_ms! >= 0)
true

of

of(rec)
of: { { year: Int, month: Int, day: Int |} | Result(Instant) }

UTC 暦レコードから Instant を構築する。

>>> time.of({ year := 2024, month := 1, day := 1 |})
Ok(2024-01-01T00:00:00Z)

parse

parse(layout, text)
parse: { String, String | Result(Instant) }

layout に従って text を読み Instant を返す。解釈するのは %Y %m %d %H %M %S %L %z と
%% ・リテラルで、未対応ディレクティブは Err にする (整形側の「リテラル通過」と違う —
読み取りでは黙って進むと入力の不一致を見逃す)。%z があればオフセットを読んで絶対時刻に
まとめる。省略したフィールドは 1970-01-01 00:00:00.000 を既定値とする。レイアウトを読み
切っても text が残っていれば不一致とする (末尾のゴミを黙って受理しない)。

>>> time.parse("%Y-%m-%d", "2024-03-15")
Ok(2024-03-15T00:00:00Z)

parse_date

parse_date(text)
parse_date: { String | Result(Date) }

ISO YYYY-MM-DD を解析し Date を返す。

>>> time.parse_date("2024-01-01")
Ok(2024-01-01)

parse_iso

parse_iso(text)
parse_iso: { String | Result(Instant) }

RFC3339 文字列を解析し絶対時刻 (Instant) へまとめる。

>>> time.parse_iso("2024-01-01T00:00:00Z")
Ok(2024-01-01T00:00:00Z)

parse_time

parse_time(text)
parse_time: { String | Result(Time) }

ISO HH:MM:SS[.SSS] を解析し Time を返す。

>>> time.parse_time("05:30:00")
Ok(05:30:00)

seconds

seconds(n)
seconds: { Int | Duration }

n 秒の Duration を返す。

>>> time.seconds(90)
Duration(0h1m30s)

time_of

time_of(rec)
time_of: { { hour: Int |} | Result(Time) }

{hour, minute?, second?, milli?} から Time を構築する。

>>> time.time_of({ hour := 5, minute := 30 |})
Ok(05:30:00)

today

today()
today: { Effect(Date, Time) }

現在の UTC 日付を Date で返す。

効果ハンドラーの操作である。handle の操作スロットに today と書いて横取りできる(language-spec.md §17.9)。

>>> print (time.today().year! >= 2020)
true

Date メソッド

add_days

date.add_days(n)
add_days: { Int | Date }

n 日加算した Date。

>>> d := time.date({ year := 2024, month := 3, day := 15 |}).unwrap!
>>> d.add_days(1)
2024-03-16

add_months

date.add_months(n)
add_months: { Int | Date }

n ヶ月加算 (月末クランプ)。

>>> d := time.date({ year := 2024, month := 3, day := 15 |}).unwrap!
>>> d.add_months(1)
2024-04-15

add_years

date.add_years(n)
add_years: { Int | Date }

n 年加算 (月末クランプ)。

>>> d := time.date({ year := 2024, month := 3, day := 15 |}).unwrap!
>>> d.add_years(1)
2025-03-15

at

date.at(time)
at: { Time | Instant }

time (Time) と結合し UTC で Instant にする。

>>> d := time.date({ year := 2024, month := 3, day := 15 |}).unwrap!
>>> tm := time.time_of({ hour := 9, minute := 30 |}).unwrap!
>>> d.at(tm)
2024-03-15T09:30:00Z

compare

date.compare(other)
compare: { Date | Ordering }

日付の全順序。

>>> d := time.date({ year := 2024, month := 3, day := 15 |}).unwrap!
>>> d2 := time.date({ year := 2024, month := 3, day := 20 |}).unwrap!
>>> d.compare(d2)
Less

day

date.day!
day: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> d := time.date({ year := 2024, month := 3, day := 15 |}).unwrap!
>>> d.day!
15

day_of_year

date.day_of_year!
day_of_year: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> d := time.date({ year := 2024, month := 3, day := 15 |}).unwrap!
>>> d.day_of_year!
75

format

date.format(layout)
format: { String | String }

strftime 風に整形する。時刻フィールドは 0 とみなす。

>>> d := time.date({ year := 2024, month := 3, day := 15 |}).unwrap!
>>> d.format("%Y/%m/%d (%a)")
"2024/03/15 (Fri)"

month

date.month!
month: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> d := time.date({ year := 2024, month := 3, day := 15 |}).unwrap!
>>> d.month!
3

to_iso

date.to_iso!
to_iso: { String }

YYYY-MM-DD で整形する。

>>> d := time.date({ year := 2024, month := 3, day := 15 |}).unwrap!
>>> d.to_iso!
"2024-03-15"

weekday

date.weekday!
weekday: { Weekday }

曜日タグ (Monday..Sunday)。

>>> d := time.date({ year := 2024, month := 3, day := 15 |}).unwrap!
>>> d.weekday!
Friday

year

date.year!
year: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> d := time.date({ year := 2024, month := 3, day := 15 |}).unwrap!
>>> d.year!
2024

Duration メソッド

add

dur.add(o)
add: { Duration | Duration }

期間同士の加算。

>>> dur := time.hours(2)
>>> dur.add(time.minutes(30))
Duration(2h30m0s)

as_days

dur.as_days!
as_days: { Int }

期間の総量 (Int、0 方向 truncate)。

>>> dur := time.hours(2)
>>> dur.as_days!
0

as_hours

dur.as_hours!
as_hours: { Int }

期間の総量 (Int、0 方向 truncate)。

>>> dur := time.hours(2)
>>> dur.as_hours!
2

as_millis

dur.as_millis!
as_millis: { Int }

期間の総量 (Int、0 方向 truncate)。

>>> dur := time.hours(2)
>>> dur.as_millis!
7200000

as_minutes

dur.as_minutes!
as_minutes: { Int }

期間の総量 (Int、0 方向 truncate)。

>>> dur := time.hours(2)
>>> dur.as_minutes!
120

as_seconds

dur.as_seconds!
as_seconds: { Int }

期間の総量 (Int、0 方向 truncate)。

>>> dur := time.hours(2)
>>> dur.as_seconds!
7200

compare

dur.compare(other)
compare: { Duration | Ordering }

期間の全順序。

>>> dur := time.hours(2)
>>> dur.compare(time.minutes(30))
Greater

negate

dur.negate!
negate: { Duration }

符号反転した Duration。

>>> dur := time.hours(2)
>>> dur.negate!
Duration(-2h0m0s)

sub

dur.sub(o)
sub: { Duration | Duration }

期間同士の減算。

>>> dur := time.hours(2)
>>> dur.sub(time.minutes(30))
Duration(1h30m0s)

Instant メソッド

add

inst.add(dur)
add: { Duration | Instant }

dur (Duration) を加算した Instant。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.add(time.hours(1))
2024-03-15T11:20:30.250Z

add_days

inst.add_days(n)
add_days: { Int | Instant }

n 日加算した Instant。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.add_days(1)
2024-03-16T10:20:30.250Z

add_months

inst.add_months(n)
add_months: { Int | Instant }

n ヶ月加算 (日は月末クランプ)。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.add_months(1)
2024-04-15T10:20:30.250Z

add_years

inst.add_years(n)
add_years: { Int | Instant }

n 年加算 (月末クランプ)。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.add_years(1)
2025-03-15T10:20:30.250Z

compare

inst.compare(other)
compare: { Instant | Ordering }

epoch ミリ秒の全順序。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst2 := time.of({ year := 2024, month := 3, day := 16 |}).unwrap!
>>> inst.compare(inst2)
Less

date

inst.date!
date: { Date }

日付部 (UTC) を Date で返す。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.date!
2024-03-15

day

inst.day!
day: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.day!
15

day_of_year

inst.day_of_year!
day_of_year: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.day_of_year!
75

diff

inst.diff(other)
diff: { Instant | Duration }

self − other を Duration で返す。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst2 := time.of({ year := 2024, month := 3, day := 16 |}).unwrap!
>>> inst2.diff(inst)
Duration(13h39m29s750ms)

epoch_ms

inst.epoch_ms!
epoch_ms: { Int }

epoch ミリ秒。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.epoch_ms!
1710498030250

format

inst.format(layout)
format: { String | String }

strftime 風に整形する (UTC)。

>>> inst := time.of({ year := 2024, month := 3, day := 15 |}).unwrap!
>>> inst.format("%Y/%m/%d")
"2024/03/15"

format_at

inst.format_at(layout, offset_min)
format_at: { String, Int | String }

offset_min の壁掛け時刻として strftime 風に整形する。%z はそのオフセットになる。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20 |}).unwrap!
>>> inst.format_at("%Y-%m-%d %H:%M %z", 540)
"2024-03-15 19:20 +0900"

hour

inst.hour!
hour: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.hour!
10

millisecond

inst.millisecond!
millisecond: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.millisecond!
250

minute

inst.minute!
minute: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.minute!
20

month

inst.month!
month: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.month!
3

second

inst.second!
second: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.second!
30

sub

inst.sub(dur)
sub: { Duration | Instant }

dur (Duration) を減算した Instant。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.sub(time.hours(1))
2024-03-15T09:20:30.250Z

time

inst.time!
time: { Time }

時刻部 (UTC) を Time で返す。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.time!
10:20:30.250

to_iso

inst.to_iso!
to_iso: { String }

RFC3339・UTC・末尾 Z で整形する。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.to_iso!
"2024-03-15T10:20:30.250Z"

to_iso_at

inst.to_iso_at(offset_min)
to_iso_at: { Int | String }

RFC3339・末尾 ±HH:MM (固定オフセット)。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.to_iso_at(540)
"2024-03-15T19:20:30.250+09:00"

weekday

inst.weekday!
weekday: { Weekday }

曜日タグ (Monday..Sunday)。

>>> inst := time.of({ year := 2024, month := 3, day := 15 |}).unwrap!
>>> inst.weekday!
Friday

year

inst.year!
year: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> inst := time.of({ year := 2024, month := 3, day := 15, hour := 10, minute := 20, second := 30, milli := 250 |}).unwrap!
>>> inst.year!
2024

Time メソッド

compare

tm.compare(other)
compare: { Time | Ordering }

時刻の全順序。

>>> tm := time.time_of({ hour := 9, minute := 30 |}).unwrap!
>>> tm2 := time.time_of({ hour := 10 |}).unwrap!
>>> tm.compare(tm2)
Less

format

tm.format(layout)
format: { String | String }

strftime 風に整形する。日付フィールドは 1970-01-01 とみなす。

>>> tm := time.time_of({ hour := 10, minute := 20, second := 30 |}).unwrap!
>>> tm.format("%H:%M:%S")
"10:20:30"

hour

tm.hour!
hour: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> tm := time.time_of({ hour := 9, minute := 30 |}).unwrap!
>>> tm.hour!
9

millisecond

tm.millisecond!
millisecond: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> tm := time.time_of({ hour := 9, minute := 30 |}).unwrap!
>>> tm.millisecond!
0

minute

tm.minute!
minute: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> tm := time.time_of({ hour := 9, minute := 30 |}).unwrap!
>>> tm.minute!
30

second

tm.second!
second: { Int }

UTC 解釈の暦/時刻フィールド (Int)。

>>> tm := time.time_of({ hour := 9, minute := 30 |}).unwrap!
>>> tm.second!
0

to_iso

tm.to_iso!
to_iso: { String }

HH:MM:SS[.SSS] で整形する。

>>> tm := time.time_of({ hour := 9, minute := 30 |}).unwrap!
>>> tm.to_iso!
"09:30:00"