2

如何从 linux 时间戳中获取当前时间?我可以得到年、月、日、分和秒,但不能得到小时。有什么帮助吗?

当前代码:

local secondsPassed = os ~= nil and os.time() or tick()
local year = 1970 + math.floor(secondsPassed / (86400 * 365.25))
local days = math.floor((secondsPassed % (365.25 * 86400)) / 86400)
days = days + (year - 2011)
local minutes = math.floor((secondsPassed % 3600) / 60)
local seconds = math.floor(secondsPassed % 60)

破碎的:

local hours = math.floor((secondsPassed % 86400) / 3600)-- +1
4

2 回答 2

4

这里有几个问题:

  • UNIX 时间相对于格林威治标准时间 1970 年 1 月 1 日午夜。如果您不在格林威治标准时间,您将看到取决于您所在时区的偏移量。如果您所在的地区采用夏令时,则此偏移量将根据日期以一种可能相当复杂的方式发生变化。

  • 年份不是 365.25 天。根据年份,它们有 365 天或 366 天长。(这甚至不平均为 365.25;由于特殊情况下可被 100 和 400 整除的年份,平均为 365.2425。)

除非出于某种原因您不能使用 Luadatetime模块,否则我强烈建议您这样做,而不是尝试自己重新创建它们。

于 2012-12-21T21:57:13.560 回答
0

你超级亲密。到目前为止,我的时间正确:

当地小时 = math.floor((secondsPassed % 86400) / 1440) + 1

于 2015-06-06T04:11:35.967 回答