0Pricing
Lua Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. os.timeとos.date
  2. 日付をフォーマットする
  3. 時間の算術演算
  4. 期間を測定する
← Lua Academyに戻る