2017-05-22 4 views
0

나는 ntp 서버와 시간을 동기화하려고했지만 nodemcu가 서버 매개 변수를 무시한 것 같습니다.Sntp.sync()가 서버를 무시합니다.

-- 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)를 시도했지만 응답은 여전히 ​​동일합니다.

의견이 있으십니까? 감사!

+0

아니요, 에포크 시간은 UTC입니다. 지역 시간을 얻으려면 결과에 시간대를 적용해야합니다. 나는 당신을 위해 그것을 할 수있는 귀하의 환경에서 사용할 수 있는지 모르겠지만, 프랑스는 UTC보다 2 시간 앞서 있습니다. – ktb

+0

@ktb so ... 왜 항상 UTC 시간을 반환하면 매개 변수로 ntp 서버에 허용됩니까? – hugalves

+0

정확한 시간 수정을 원하십니까? 음, 프랑스에 살면 일본 서버가 아니라 프랑스 서버를 원합니다. 너의 거주지에서 꽤 멀어. – ktb

답변

0

동작이 정확합니다. 시간대를 사용하여 작업하려면 "zone files" from the tz database이 필요합니다. 각 tz 파일은 일광 절약 시간과 같은 전환 정보를 포함하며 윤년도 기록합니다.

timezones in the NodeMCU repository을 처리하는 방법의 예가 있습니다.

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해야합니다.