os.timeとos.date
現在の時刻を取得します。
「os.timeとos.date」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。
時刻が重要な理由
プログラムでは、現在の時刻が必要になることがよくあります。ゲームではスコアを記録した時刻を保存し、ログファイルでは各イベントに時刻を付け、リマインダーアプリでは期限までの残り時間を数えます。
Lua では、組み込みの os ライブラリに時刻を扱う機能があります。中心となるのは os.time と os.date です。このレッスンでは、この2つを学びます。
os.time は数値を返す
引数なしで os.time() を呼び出すと、現在の時刻を1つの数値として返します。
この数値は、過去の固定された基準時点(エポック)から経過した秒数です。単なる整数なので、保存、比較、計算ができます。
local now = os.time()
print(now)
print(type(now))エポック
ほとんどのシステムでは、エポックは UTC の 1970年1月1日 0時0分です。つまり、os.time() はその時点から何秒経過したかを示します。
1700000000 のような大きな数値でも正常です。1秒ごとに1ずつ増えるため、2つの時点を比較するのに適しています。
local seconds = os.time()
print("Seconds since 1970:", seconds)os.date はテキストを返す
秒数だけでは読みにくいものです。os.date() は時刻を人間に読みやすいテキストに変換します。
引数なしで呼び出すと、システムのローカル設定を使って、現在の日付と時刻を表す読みやすい文字列を返します。
print(os.date())書式を指定した os.date
通常は、os.date に書式文字列を渡します。% で始まる特殊なコードが、日付の各部分に置き換えられます。
%Y は4桁の年、%m は月、%d は日を表します。それ以外のテキストはそのまま残ります。
print(os.date("Year: %Y"))
print(os.date("%Y-%m-%d"))時刻と日付を組み合わせる
os.date には2番目の引数として時刻の数値を渡せます。os.time の結果を渡すと、その正確な時点を指定した書式に変換できます。
2番目の引数を省略すると現在の時刻が使われるため、次の2つの呼び出しは同じ瞬間を表します。
local t = os.time()
print(os.date("%Y-%m-%d", t))ローカル時刻と UTC
デフォルトでは、os.date はローカルのタイムゾーンを使います。UTC(協定世界時)を使うには、書式文字列の先頭に感嘆符 ! を付けます。
これは、世界中で使われるサーバーやアプリで重要です。全員が同じ時計を基準にできるからです。
print("Local:", os.date("%H:%M"))
print("UTC: ", os.date("!%H:%M"))テーブル形式
書式として "*t" を渡すと、os.date は文字列ではなくテーブルを返します。
このテーブルには、year、month、day、hour、min、sec などの名前付きフィールドがあります。必要な部分を1つだけ取り出したい場合に便利です。
local d = os.date("*t")
print(d.year, d.month, d.day)
print(d.hour, d.min, d.sec)1つのフィールドを読み取る
テーブル形式では名前付きフィールドが得られるため、現在の月だけ、または現在の時刻だけを簡単に取り出せます。
UTC 版のテーブルを取得するには !*t を使います。各フィールドは、条件式で使える単純な数値です。
local d = os.date("*t")
if d.hour < 12 then
print("Good morning")
else
print("Good afternoon")
endテーブルから os.time を使う
os.time は逆方向にも使えます。year、month、day を含むテーブルを渡すと、その日付に対応する秒数を返します。
これにより、指定した任意のカレンダー上の日付の時刻値を作成できます。
local t = os.time({year=2020, month=1, day=1, hour=0})
print(t)
print(os.date("%Y-%m-%d", t))往復変換
2つの形式の間を自由に変換できます。os.time はテーブルを数値に変換し、os.date("*t", n) は数値をテーブルに戻します。
この往復変換は、後のレッスンで学ぶ日付計算の基礎になります。
local n = os.time({year=2021, month=6, day=15})
local back = os.date("*t", n)
print(back.year, back.month, back.day)理解度チェック
2つの主な関数についての理解度を確認しましょう。
まとめ
os.time() は、エポックからの経過秒数として現在の時刻を返します。os.date() は、% の書式コードを使って時刻をテキストに変換したり、"*t" を使ってテーブルに変換したりします。
UTC にするには ! を追加し、特定の瞬間を書式化するには2番目の引数として時刻の数値を渡します。これらを組み合わせれば、Lua で必要になるほとんどの日付処理に対応できます。
よくある質問
「os.timeとos.date」レッスンは無料ですか?
はい。「os.timeとos.date」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。
「os.timeとos.date」で何を学びますか?
現在の時刻を取得します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Lua Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「os.timeとos.date」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLua Academyレッスンでコードを書いて実行できますか?
はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- os.timeとos.date
- 日付をフォーマットする
- 時間の算術演算
- 期間を測定する