Sntp.sync()忽略服务器

我一直在尝试与ntp服务器同步时间,但是nodemcu似乎忽略了服务器参数。

-- sync.lua
sntp.sync("fr.pool.ntp.org", function()
  tm = rtctime.epoch2cal(rtctime.get())
  print(string.format("%04d/%02d/%02d %02d:%02d:%02d", tm["year"], tm["mon"], tm["day"], tm["hour"], tm["min"], tm["sec"]))
end)

执行结果..

> dofile('sync.lua')
> 2017/05/22 21:38:39

时间响应是unix纪元时间(https://www.epochconverter.com/)。它应该是服务器参数时间(在本例中为法国)吗?我尝试了几个不同的服务器(即http://www.pool.ntp.org/zone/europe),但响应仍然相同。

有什么建议吗?谢谢!

点赞
用户131929
用户131929

行为正确。如果您想使用时区,您需要所谓的 “tz数据库”中的时区文件。每个tz文件包含(除其他信息外)转换,例如夏令时,并且还记录闰秒。

这里有一个在NodeMCU仓库中处理时区的示例

tz = require('tz')
tz.setzone('eastern')
sntp.sync(nil, function(now)
  local tm = rtctime.epoch2cal(now + tz.getoffset(now))
  print(string.format("%04d/%02d/%02d %02d:%02d:%02d", tm["year"], tm["mon"], tm["day"], tm["hour"], tm["min"], tm["sec"]))
end)

所以,您需要tz.lua以及您感兴趣的时区的时区文件(例如示例中的“eastern”)。

2017-05-23 18:47:47