ESP8266实现SNTP获取时间戳并转化为北京时间

原本项目中只需要获取时间戳,然而我自己折腾自己,想把时间转为北京时间这样,可以在作日志时可以更加准确,由于自带的晶振总会出现偏差,所以从网络获取的时间就相对而言准确很多。废话不多说,直接上手。

首先编译固件,不仅仅需要SNTP模块,同时还需要rtctime来进行时间戳的转化,写起来会很快。

ESP8266实现SNTP获取时间戳并转化为北京时间_第1张图片

 编译后:

获得相应的固件,直接 ESP8266实现SNTP获取时间戳并转化为北京时间_第2张图片

下载进板子,然后上代码,由于时间戳转化来为时间时英国时间需要进行换算,中国与英国相差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

ESP8266实现SNTP获取时间戳并转化为北京时间_第3张图片

结果还是很满意的,时间转化可能还有BUG先就这样。代码的初始选哟连接WIFI等等的操作直接省略,由于同步相对较慢,需要等待一会才能输出 。

你可能感兴趣的:(ESP8266实现SNTP获取时间戳并转化为北京时间)