時刻#

時刻クラス#

時刻を表現するための以下のクラスがあります。

型 意味
INSTANT タイムゾーンに依存しない瞬間
TIME UTCオフセットが付いた時刻
LOCAL_TIME タイムゾーンが不明な時刻

INSTANTは、UNIX時間(1970-01-01T00:00:00Zからの経過時間)を、整数である秒数および、整数であるナノ秒によって保持します。

TIMEは、INSTANTに加えて、UTCからの時差を保持することで、地球上の特定の場所における時計の値を表します。

LOCAL_TIMEは、地球上の特定の場所における1970-01-01T00:00:00からの経過時間を、整数である秒数および、整数であるナノ秒によって保持します。

固定の時刻によるインスタンスの生成#

INSTANT.of(epochSeconds: NUMBER[; nanosecondsOfSecond: NUMBER]): INSTANT

TIME.of(epochSeconds: NUMBER[; nanosecondsOfSecond: NUMBER]; offsetSeconds: NUMBER): TIME

LOCAL_TIME.of(epochSeconds: NUMBER[; nanosecondsOfSecond: NUMBER]): LOCAL_TIME

epochSecondsおよびnanosecondsOfSecondをUNIX秒と解釈することによりINSTANTを生成します。

epochSecondsが小数である場合、小数部はnanosecondsOfSecondに分配されます。

nanosecondsOfSecondおよびoffsetSecondsが小数である場合、整数に丸められます。

nanosecondsOfSecondが0~999_999_999の範囲外の値である場合、epochSecondsに繰り上げ・繰り下げが発生します。

$ xa 'INSTANT.of(981173106)'
# 2001-02-03T04:05:06Z

$ xa 'INSTANT.of(981173106.125)'
# 2001-02-03T04:05:06.125Z

$ xa 'INSTANT.of(981173106; 125_000_000)'
# 2001-02-03T04:05:06.125Z

$ xa 'TIME.of(981173106; 0)'
# 2001-02-03T04:05:06Z

$ xa 'TIME.of(981173106.125; 3600)'
# 2001-02-03T05:05:06.125+01:00

$ xa 'TIME.of(981173106; 125_000_000; -3600 * 5)'
# 2001-02-02T23:05:06.125-05:00

$ xa 'LOCAL_TIME.of(981173106)'
# 2001-02-03T04:05:06

$ xa 'LOCAL_TIME.of(981173106.125)'
# 2001-02-03T04:05:06.125

$ xa 'LOCAL_TIME.of(981173106; 125_000_000)'
# 2001-02-03T04:05:06.125

時刻表記によるインスタンスの生成#

INSTANT.parse(text: STRING): INSTANT

TIME.parse(text: STRING): TIME

LOCAL_TIME.parse(text: STRING): LOCAL_TIME

textを時刻を表す文字列と解釈して時刻オブジェクトを生成します。

年月日を表す[0-9]{4}-[0-9]{2}-[0-9]{2}は、必ず含まれなければなりません。

時分秒を表すT[0-9]{2}:[0-9]{2}:[0-9]{2}は、省略するとT00:00:00とみなされます。

ナノ秒を表す.[0-9]{1,9}は、省略すると0とみなされます。

時分秒を省略した場合は、必ずナノ秒も省略しなければなりません。

ナノ秒の末尾の0は、任意の個数、省略できます。

タイムゾーンを表すZおよびUTCオフセット表記[+-][0-9]{2}:[0-9]{2}の必要性は、時刻クラスごとに次のようになります。

クラス タイムゾーン表記
INSTANT 省略可能なZ
TIME ZまたはUTCオフセット表記
LOCAL_TIME 常に省略
$ xa 'INSTANT.parse("2001-02-03")'
# 2001-02-03T00:00:00Z

$ xa 'INSTANT.parse("2001-02-03T04:05:06")'
# 2001-02-03T04:05:06Z

$ xa 'INSTANT.parse("2001-02-03T04:05:06.007")'
# 2001-02-03T04:05:06.007Z

$ xa 'INSTANT.parse("2001-02-03T04:05:06.007008009Z")'
# 2001-02-03T04:05:06.007008009Z

$ xa 'TIME.parse("2001-02-03Z")'
# 2001-02-03T00:00:00Z

$ xa 'TIME.parse("2001-02-03T04:05:06+10:00")'
# 2001-02-03T04:05:06+10:00

$ xa 'TIME.parse("2001-02-03T04:05:06.007-10:11")'
# 2001-02-03T04:05:06.007-10:11

$ xa 'TIME.parse("2001-02-03T04:05:06.007008009+10:11")'
# 2001-02-03T04:05:06.007008009+10:11

$ xa 'LOCAL_TIME.parse("2001-02-03")'
# 2001-02-03T00:00:00

$ xa 'LOCAL_TIME.parse("2001-02-03T04:05:06")'
# 2001-02-03T04:05:06

$ xa 'LOCAL_TIME.parse("2001-02-03T04:05:06.007")'
# 2001-02-03T04:05:06.007

$ xa 'LOCAL_TIME.parse("2001-02-03T04:05:06.007008009")'
# 2001-02-03T04:05:06.007008009

現在の時刻に基づいたインスタンスの生成#

INSTANT.now(): INSTANT

TIME.now(): TIME

LOCAL_TIME.now(): LOCAL_TIME

各種 now 関数により、システムの現在時刻に基づいたインスタンスを生成できます。

INSTANTの内容はシステムのタイムゾーンに依存せず、TIMEおよびLOCAL_TIMEの内容はシステムのタイムゾーンに依存します。

文字列化#

時刻のクラスを文字列化すると、ISO形式をベースとした文字列表記に変換されます。

タイムゾーン表記は、クラスによって異なります。

クラス タイムゾーン表記
INSTANT 常にZ
TIME ZまたはUTCオフセット表記
LOCAL_TIME なし

秒までは常に表記されますが、秒未満は必要に応じて無表記・3桁・6桁・9桁で表します。

$ xa 'INSTANT.parse("2001-02-03")'
# 2001-02-03T00:00:00Z

$ xa 'INSTANT.parse("2001-02-03T04:05:06")'
# 2001-02-03T04:05:06Z

$ xa 'INSTANT.parse("2001-02-03T04:05:06.007")'
# 2001-02-03T04:05:06.007Z

$ xa 'INSTANT.parse("2001-02-03T04:05:06.0078")'
# 2001-02-03T04:05:06.007800Z

$ xa 'INSTANT.parse("2001-02-03T04:05:06.007008009")'
# 2001-02-03T04:05:06.007008009Z

$ xa 'TIME.parse("2001-02-03T04:05:06.007008009+03:00")'
# 2001-02-03T04:05:06.007008009+03:00

$ xa 'LOCAL_TIME.parse("2001-02-03T04:05:06.007008009")'
# 2001-02-03T04:05:06.007008009

その他の組み込みメンバ#

NOW: 現在時刻の取得#

NOW(): BIG

現在時刻をUnix秒で返します。

Unix秒は、1970-01-01T00:00:00Zを基準とする整数の秒数です。

秒未満は切り捨てられます。