【发布时间】:2017-10-25 06:31:59
【问题描述】:
我有一块 ESP8266 NodeMCU 板。我已经在上面加载了基于 NodeMCU Lua 的固件,并且需要准确的时间来安排一些功能。我使用他们的云服务和以下模块构建了二进制文件:rtctime、sntp、cron 等等。
如何使用sntp 模块设置当地时间?我的本地时间与 UTC 有 19800(5.5 小时 IST)的偏移量。
我无法在sntp.setoffset(offset) 调用中设置此偏移量
> sntp.setoffset(19800)
> sntp.getoffset()
88
>
为什么getoffset 打印88?
更新:在sntp.sync() 的成功回调中使用rtctime.set(seconds_since_unix_epoch) 将RTC 设置为本地时间可以正常工作。
function sntp_sync_time()
sntp.sync(nil, function(sec, usec, server, info) rtctime.set(sec + 19800) end, sntp_sync_time, 1)
end
我也在失败回调中递归调用相同的函数,直到没有成功同步。
谢谢
【问题讨论】:
-
您的 5.5h 巨大偏移量是否表明您正在(ab)使用 SNTP 偏移量进行时区处理?如果是这样,请参阅stackoverflow.com/a/44142782/131929 示例。
-
是的,你是对的。我这样做是为了处理时区。但是我看到您已经在成功回调中添加了时区偏移量(在您的链接答案中),这是否意味着 RTC 将与 UTC 而不是时区同步?还是我还需要在成功回调中做
rtctime.set(now+tz.getoffset(now))? -
我不知道,但我想说 SNTP 和 RTCtime 应该单独处理以在内部处理 UTC。时区调整,即 UTC 到时区的转换应该在我们在示例中建议的那些模块外部完成(我在那个答案中复制了)。
-
@MarcelStör 谢谢。我想我每次使用 RTC 来安排某些事情时都必须添加偏移量。我会更新问题并将其标记为重复。