在 Lua 中获取特定的 UTC 日期和时间
2017-4-25 2:57:18
收藏:0
阅读:169
评论:2
作为示例,我想在 LUA 中获取(UTC)+0000 UTC日期和时间。
我知道有一些关于此的答案,但没有一个是我的答案。解决此问题的一般方法是找到本地时间,然后加上或减去UTC数,但是我不知道我的操作系统时区,因为我的程序可以在不同的位置运行,而我无法从我的开发环境获取时区。
简言之,我如何使用 LUA 函数获取 UTC 0 日期和时间?
点赞
用户30900
我计算了世界协调时间 (UTC) 与本地时间之间的差异,这里有一个简单的 Time 类,可以将这个差异应用于存储在 from_lua_time 中的 UTC 时间。通过使用 os.date('!*t', time) 在 UTC 时间上运行来取消应用偏移量。
-- 添加到本地时间以将其转换为 UTC 时间所需的秒数。
-- 我们需要手动计算偏移量,因为 lua 不会为时间戳保留时区信息。
-- 为了保证可重复性的结果,Time 类将 epoch 纳秒存储在 UTC 中。
-- 参考 https://stackoverflow.com/a/43601438/30900
local utc_seconds_shift = (function()
local ts = os.time()
local utc_date = os.date('!*t', ts)
local utc_time = os.time(utc_date)
local local_date = os.date('*t', ts)
local local_time = os.time(local_date)
return local_time - utc_time
end)()
-- Time 类的元表。
local Time = {}
-- 私有函数,用于创建具有正确元表设置的新时间实例。
function Time:new()
local o = {}
setmetatable(o, self)
self.__index = self
self.nanos = 0
return o
end
-- 将 Lua 时间戳 (假设为本地时间) 和可选的纳秒时间解析为 Time 类。
function from_lua_time(lua_ts)
-- 克隆是因为 os.time 会更改输入表。
local clone = {
year = lua_ts.year,
month = lua_ts.month,
day = lua_ts.day,
hour = lua_ts.hour,
min = lua_ts.min,
sec = lua_ts.sec,
isdst = lua_ts.isdst,
wday = lua_ts.wday,
yday = lua_ts.yday
}
local epoch_secs = os.time(clone) + utc_seconds_shift
local nanos = lua_ts.nanosec or 0
local t = Time:new()
local secs = epoch_secs * 1000000000
t.nanos = secs + nanos
return t
end
function Time:to_lua_time()
local t = os.date('!*t', math.floor(self.nanos / 1000000000))
t.yday, t.wday, t.isdst = nil, nil, nil
t.nanosec = self.nanos % 1000000000
return t
end
2020-04-24 04:01:36
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

如果您需要生成 EPG,那么:
local timestamp = os.time() local dt1 = os.date( "!*t", timestamp ) -- UTC local dt2 = os.date( "*t" , timestamp ) -- local local shift_h = dt2.hour - dt1.hour + (dt1.isdst and 1 or 0) -- 如果是夏令时则加 1 小时 local shift_m = 100 * (dt2.min - dt1.min) / 60 print( os.date("%Y%m%d%H%M%S ", timestamp) .. string.format('%+05d' , shift_h*100 + shift_m ))