小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
最近在开发wireshark的Lua脚本插件,主要是进行自定义的协议解析,其中涉及到要将数据包的捕获时间这一Field展示出来的需求。不过数据直接解析出来是时间戳的形式,不方便客户阅读(刚刚产品经理过来告诉我其实没有这个需求,不过你做了就做了吧...艹),因此需要定义一个函数完成时间戳转换为日期式时间的功能。
好了,直接进入代码环节。Let's go!
-- 定义将时间戳转换为日期式时间的方法
function stamp2date(offset)
local stamp_time = tvb(offset,4) -- 这条代码你可以理解为在我的应用场景里获取时间戳的一行代码,看不懂没关系,是wireshark的lua脚本专用接口
return os.date("%Y-%m-%d %H:%M:S",stamp_time) -- 本文核心,使用os.date(format,stampTime)方法将时间戳转换为指定格式的日期,本例中将返回一个2021-09-26 16:26:32格式的数据
end
os.date(format,stampTime) 是Lua自带的一个方法,也正是本文用来将时间戳转换为任意自定义格式日期的方法,具体使用方法如上述代码所示,下面详细介绍一下该方法;
该方法涉及到两个参数,format和stampTime:
-
format: 自定义的日期表现格式,可使用字符如下:
字符 意义 示例 os.date("%a") abbreviated weekday name Sun os.date("%A") full weekday name Sunday os.date("%b") abbreviated month name Jul os.date("%B") full month name July os.date("%c") date and time 07/27/14 17:42:09 os.date("%d") day of the month 27 os.date("%H") hour, using a 24-hour clock (23) [00-23] 17 os.date("%I") hour, using a 12-hour clock (11) [01-12] 5 os.date("%M") minute (48) [00-59] 42 os.date("%m") month (09) [01-12] 7 os.date("%p") either "am" or "pm" (pm) PM os.date("%S") second (10) [00-61] 9 os.date("%w") weekday (3) [0-6 = Sunday-Saturday] 0 os.date("%x") date 07/27/14 os.date("%X") time(e.g., 23:48:10) 17:42:09 os.date("%Y") full year (2016) 2016 os.date("%y") two-digit year (98) [00-99] 16 -
stampTime: 待转换的整型时间戳数据;
综上,就是在Lua语言中将时间戳转换为日期的方法了,如果您还有任何问题都可以私信或者留言。
如果觉得本文有一丁丁用的话希望点赞留言(:
对本文有任何意见或建议烦请私信或者留言,还望各位不吝赐教。