時刻#
時刻クラス#
時刻を表現するための以下のクラスがあります。
| 型 | 意味 |
|---|---|
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を基準とする整数の秒数です。
秒未満は切り捨てられます。