コンテンツにスキップ

OS時間

標準Lua os時間関数。タイムスタンプ、日付フォーマット、時間計算のための実際のウォールクロック時間を提供。

グローバルosテーブル。requireは不要。

os.time()
os.date()
os.clock()
os.difftime()

Unixタイムスタンプ(1970年1月1日UTC以降の秒数)を取得:

-- 現在のタイムスタンプ
local now = os.time() -- 1718462445
-- 特定の日時
local t = os.time({
year = 2024,
month = 12,
day = 25,
hour = 10,
min = 30,
sec = 0
})

シグネチャ: os.time([spec]) -> number

パラメータ:

フィールドデフォルト説明
yearnumber現在の年4桁の年(例: 2024)
monthnumber現在の月月 1-12
daynumber現在の日日 1-31
hournumber0時 0-23
minnumber0分 0-59
secnumber0秒 0-59

引数なしで呼び出すと、現在のUnixタイムスタンプを返す。

テーブルで呼び出すと、不足しているフィールドは上記のデフォルト値を使用。yearmonthdayフィールドは指定されない場合、現在の日付がデフォルト。

-- 日付のみ(時間はデフォルトで深夜0時)
os.time({year = 2024, month = 6, day = 15})
-- 部分的(現在の年/月を補完)
os.time({day = 1}) -- 現在の月の1日

タイムスタンプを文字列にフォーマットするか、日付テーブルを返す:

local now = os.time()

— デフォルトフォーマット os.date() — “Sat Jun 15 14:30:45 2024”

— カスタムフォーマット os.date(“%Y-%m-%d”, now) — “2024-06-15” os.date(“%H:%M:%S”, now) — “14:30:45” os.date(“%Y-%m-%dT%H:%M:%S”, now) — “2024-06-15T14:30:45”

— UTC時間(フォーマットの前に!を付ける) os.date(”!%Y-%m-%d %H:%M:%S”, now) — ローカルの代わりにUTC

— 日付テーブル local t = os.date(“*t”, now)

シグネチャ: os.date([format], [timestamp]) -> string | table

パラメータデフォルト説明
formatstring"%c"フォーマット文字列、テーブルには"*t"
timestampnumber現在時刻フォーマットするUnixタイムスタンプ
コード出力
%Y4桁の年2024
%y2桁の年24
%m月 (01-12)06
%d日 (01-31)15
%H24時間制の時 (00-23)14
%I12時間制の時 (01-12)02
%M分 (00-59)30
%S秒 (00-59)45
%pAM/PMPM
%A曜日名Saturday
%a曜日略称Sat
%B月名June
%b月略称Jun
%w曜日 (0-6, 日曜=0)6
%j年間日 (001-366)167
%U週番号 (00-53)24
%zタイムゾーンオフセット-0700
%Zタイムゾーン名PDT
%c完全な日時Sat Jun 15 14:30:45 2024
%x日付のみ06/15/24
%X時刻のみ14:30:45
%%リテラル%%

フォーマットが"*t"の場合、テーブルを返す:

local t = os.date("*t")
フィールド説明
yearnumber4桁の年2024
monthnumber月 (1-12)6
daynumber日 (1-31)15
hournumber時 (0-23)14
minnumber分 (0-59)30
secnumber秒 (0-59)45
wdaynumber曜日 (1-7, 日曜=1)7
ydaynumber年間日 (1-366)167
isdstboolean夏時間false

UTC日付テーブルには"!*t"を使用。

Luaランタイム開始からの経過秒数を取得:

local start = os.clock()
-- 作業を実行
for i = 1, 1000000 do end
local elapsed = os.clock() - start
print(string.format("Took %.3f seconds", elapsed))

シグネチャ: os.clock() -> number

2つのタイムスタンプ間の差を秒で取得:

local t1 = os.time({year = 2024, month = 1, day = 1})
local t2 = os.time({year = 2024, month = 12, day = 31})
local diff = os.difftime(t2, t1) -- t2 - t1
local days = diff / 86400
print(days) -- 365

シグネチャ: os.difftime(t2, t1) -> number

パラメータ説明
t2number後のタイムスタンプ
t1number前のタイムスタンプ

秒単位でt2 - t1を返す。t1 > t2の場合は負になる。

ランタイムを識別する定数:

os.platform -- "wippy"