os.time 与 os.date
获取当前时间。
os.time 与 os.date 是 CoddyKit 上的免费 Lua Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Lua Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Lua Academy 课程共包含 4 节课。
时间为何重要
程序经常需要知道当前时间。游戏会记录您得分的时间,日志文件会为每个事件添加时间戳,提醒应用会倒数到截止时间。
Lua 将时间工具放在内置的 os 库中。两个核心工具是 os.time 和 os.date。在本课中,您将分别了解它们。
os.time 返回一个数字
不带参数的 os.time() 会将当前时刻作为一个数字返回。
这个数字表示自过去某个固定时刻(纪元)以来经过的秒数。它只是一个整数,因此您可以存储它、比较它,或者用它进行计算。
local now = os.time()
print(now)
print(type(now))纪元
在大多数系统中,纪元是 UTC 时间 1970 年 1 月 1 日午夜。因此,os.time() 会告诉您从那时起经过了多少秒。
像 1700000000 这样的大数字很正常。它每秒增加一,因此非常适合比较两个时刻。
local seconds = os.time()
print("Seconds since 1970:", seconds)os.date 返回文本
原始的秒数很难阅读。os.date() 会将时间转换为便于人类阅读的文本。
不带参数调用时,它会使用系统的本地设置,返回描述当前日期和时间的可读字符串。
print(os.date())带格式的 os.date
通常,您会向 os.date 传入一个格式字符串。以 % 开头的特殊代码会被替换为日期的各个部分。
%Y 表示四位数年份,%m 表示月份,%d 表示日期。其他文本会保持原样。
print(os.date("Year: %Y"))
print(os.date("%Y-%m-%d"))组合时间和日期
os.date 可以接收第二个参数:一个时间数字。将 os.time 的结果传给它,就能格式化那个确切的时刻。
没有第二个参数时,它会使用当前时间,因此下面两次调用描述的是同一个时刻。
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 的字段。当您只需要其中一个部分时,这种形式非常方便。
local d = os.date("*t")
print(d.year, d.month, d.day)
print(d.hour, d.min, d.sec)读取一个字段
由于表格形式提供了命名字段,因此只获取当前月份或当前小时非常容易。
使用 !*t 可以获取 UTC 版本的表。每个字段都是可以在条件中使用的普通数字。
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))往返转换
您可以在两种形式之间自由转换: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)快速检查
测试一下您对这两个主要函数的理解。
回顾
os.time() 会将当前时刻表示为自纪元起经过的秒数。os.date() 会使用 % 格式代码将时间转换为文本,或者使用 "*t" 将其转换为表。
添加 ! 可使用 UTC,并将时间数字作为第二个参数传入,以格式化特定时刻。它们结合起来,几乎可以满足 Lua 中所有日期相关的需求。
常见问题解答
「os.time 与 os.date」课时是免费的吗?
是的 — 「os.time 与 os.date」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Lua Academy 课程的其余内容,请升级到 CoddyKit PRO。 Lua Academy 课程共包含 4 节课。
「os.time 与 os.date」这节课中我会学到什么?
获取当前时间。 你通过在浏览器中直接运行的动手代码来练习 Lua Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Lua Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Lua Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「os.time 与 os.date」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Lua Academy 课中编写并运行代码吗?
能。每节 Lua Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。