ESP8266实现SNTP获取时间戳并转化为北京时间
原本项目中只需要获取时间戳,然而我自己折腾自己,想把时间转为北京时间这样,可以在作日志时可以更加准确,由于自带的晶振总会出现偏差,所以从网络获取的时间就相对而言准确很多。废话不多说,直接上手。
首先编译固件,不仅仅需要SNTP模块,同时还需要rtctime来进行时间戳的转化,写起来会很快。
编译后:
获得相应的固件,直接
下载进板子,然后上代码,由于时间戳转化来为时间时英国时间需要进行换算,中国与英国相差8个小时,所以稍微处理一下,时间就可以转化出来。
function GetNetTime()
sntp.sync({"0.nodemcu.pool.ntp.org"},
function(sec, usec, server, info)
-- print('sync', sec, usec, server)
tm = rtctime.epoch2cal(sec)
if tm["hour"]<=16 then
tm["hour"]=tm["hour"]+8
else
tm["hour"]=tm["hour"]-16
tm["day"]=tm["day"]+1
end
print(string.format("%04d/%02d/%02d %02d:%02d:%02d", tm["year"], tm["mon"], tm["day"], tm["hour"], tm["min"], tm["sec"]))
end,
function()
print("get time error")
end)
return 0
end
结果还是很满意的,时间转化可能还有BUG先就这样。代码的初始选哟连接WIFI等等的操作直接省略,由于同步相对较慢,需要等待一会才能输出 。