将字符串日期转换为时间戳。
2015-6-8 14:49:26
收藏:0
阅读:297
评论:5
有没有简单的方法可以将 RFC HTTP 日期转换为 Lua 时间戳?
将 "Sat, 29 Oct 1994 19:43:31 GMT"
转换为 783467011
。
原文链接 https://stackoverflow.com/questions/4105012
点赞
stackoverflow用户227513
修正 lhf 的示例代码以考虑时区,因为 os.time() 没有指定时区的方法。也假设所有输入都以 GMT 结尾,因为这仅适用于 GMT。
s="Sat, 29 Oct 1994 19:43:31 GMT"
p="%a+, (%d+) (%a+) (%d+) (%d+):(%d+):(%d+) GMT"
day,month,year,hour,min,sec=s:match(p)
MON={Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9,Oct=10,Nov=11,Dec=12}
month=MON[month]
offset=os.time()-os.time(os.date("!*t"))+3600 --加上 GMT+1 的时区偏移量
print(os.time({day=day,month=month,year=year,hour=hour,min=min,sec=sec})+offset)
这样会得到 783478211。我们将使用 os.date("!%c") 进行验证,因为 ! 会使输出在 UTC 而不是本地时区。
print(os.date("!%c",783478211))
--> Sat Oct 29 20:43:31 1994
2011-01-05 05:00:26
stackoverflow用户246603
如果你需要将值转换为 Unix 时间戳,代码如下:
-- 假设日期格式为:yyyy-mm-dd hh:mm:ss
local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)"
local timeToConvert = "2011-01-01 01:30:33"
local runyear, runmonth, runday, runhour, runminute, runseconds = timeToConvert:match(pattern)
local convertedTimestamp = os.time({year = runyear, month = runmonth, day = runday, hour = runhour, min = runminute, sec = runseconds})
2011-05-05 21:46:50
stackoverflow用户728891
使用 luadate,您可以使用 luarocks 安装它。
date = require 'date'
local d1 = date('Sat, 29 Oct 1994 19:43:31 GMT')
local seconds = date.diff(d1, date.epoch()):spanseconds()
print(seconds)
2013-11-18 07:12:12
stackoverflow用户11330890
Arrowmaster 的回答较完美,如果考虑夏令时。同时使用数组似乎更加简洁。
s="Sat, 29 Oct 1994 19:43:31 GMT"
p="%a+, (%d+) (%a+) (%d+) (%d+):(%d+):(%d+) GMT"
date={}
date['day'],date['month'],date['year'],date['hour'],date['min'],date['sec']=s:match(p)
MON={Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9,Oct=10,Nov=11,Dec=12}
date['month']=MON[date['month']]
date["isdst"] = false -- 新代码
offset=os.time()-os.time(os.date("!*t"))
print(os.time(date)+offset)
2020-06-12 04:24:11
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
下面的代码执行了以上操作,但它没有处理时区:
s="Sat, 29 Oct 1994 19:43:31 GMT" p="%a+, (%d+) (%a+) (%d+) (%d+):(%d+):(%d+) (%a+)" day,month,year,hour,min,sec,tz=s:match(p) MON={Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9,Oct=10,Nov=11,Dec=12} month=MON[month] print(os.time({tz=tz,day=day,month=month,year=year,hour=hour,min=min,sec=sec}))
但它却打印出了 783467011。下面的代码告诉我们 1288374211 是另一个日期:
print(os.date("%c",1288374211)) --> Fri Oct 29 15:43:31 2010 print(os.date("%c",783467011)) --> Sat Oct 29 19:43:31 1994