背景
小组内计划采用air800的定位功能制作一款带定位功能的自行车码表,能够实时将定位信息传递到服务器进行保存并由手机端拉取数据进行查看。
服务端采用的百度鹰眼服务,上传数据时需要同时上传位置点的时间戳,在air800模块的示例代码及库文件中并没有直接读取时间戳的函数,所以自己写了一遍,随手一写,也许有错误。今天的时间戳是正确的,明年的就不知道了,总之,思路是有了的。
实现
air800的misc.lua库文件中提供了getclock函数,能够返回table类型的数据,包含了年月日时分秒这么几个字段,时间戳可以使用这几个字段进行计算反推。
--[[
函数名:getclock
功能 :获取系统时间表
参数 :无
返回值:table类型的时间,例如{year=2017,month=2,day=14,hour=14,min=19,sec=23}
]]
function getclock()
return os.date("*t")
end
通过getclock函数返回的时间信息,首先计算出距离1970年1月1日过去多少天,之后根据天数计算出秒数,再加上今天过去的秒数即可。代码如下:
--[[
函数名:gettimestamp
功能 :根据时间表计算出时间戳
参数 :系统时间table
返回值:无
]]
function gettimestamp( time_table )
-- 定义每个月的天数,注意:闰年2月份有29天
local mon_days={31,28,31,30,31,30,31,31,30,31,30,31}
-- 从1970年1月1日至今过去多少天的计算
-- 由于闰年是4年一次,所以将年数除以4取商得到共有多少闰年周期
-- 每个闰年周期是1461天,以此计算过去闰年周期中的天数
local days=(time_table["year"]- 1970)/4 * 1461
-- 剩余年数,除掉闰年周期以外剩下的年份
local last_years=(time_table["year"]-1970)%4
-- 如果剩余1年或两年,则直接将年数*365天即可
if last_years == 1 or last_years == 2 then
days = days + 365 * last_years
-- 如果剩余3年,则这3年中必有一年时闰年,所以需要+1天
elseif last_years == 3 then
days = days + 365 *3 +1
-- 剩余0年,刚好除尽,如2018年,则不需要加天数
else
print("nc")
end
-- 计算本年度已过去的天数,按月天数累计即可
-- 注意lua编程语言中下标从1开始,不是从0开始
for i=1,(time_table["month"]-1) do
days = days + mon_days[i]
end
-- 如果今年时闰年而且当前月份大于2,则天数+1
if time_table["year"]%4==0 and time_table["month"] > 2 then
days = days + 1
end
-- 加上本月已过的天数
days = days + time_table["day"]-1
-- 将天数转化为秒数输出
local timestamp = days*24*60*60
+ time_table["hour"]*60*60
+ time_table["min"] * 60
+ time_table["sec"]
- 8*60*60
print(timestamp)
print("------------------------------")
end