最新最专业!micropython1.191 24个时区的NTPTIME方法 旧方法已经失效啦!
其实简单得很哦,ntp的灵魂就俩,一是选服务器,国内一般都是ntp1.aliyun.com,我是不会偷偷告诉你ntp2.aliyun.com到ntp9都是可以的,所以嘛。第二是时区问题,全球的24个时区,要加上时间差的,所以说我为什么要在咸鱼10个都卖不出去的产品上加全球的功能啊,啊,这就是我燃烧的程序猿灵魂啊!最近跟老铁做了个VFD时钟,忙的不亦乐乎,所以说我只编两种程序,一是挣钱的,二是感兴趣
最近跟老铁做了个VFD时钟,忙的不亦乐乎,所以说我只编两种程序,一是挣钱的,二是感兴趣的。
进入正题,mpy1.191修改了模块冻结的指令,我一看居然有个require(ntptime.py)这啥鬼啊,赶紧去找了下,原来是micropython-lib下面的,看了下代码,发现了个悲惨的事实:
# There's currently no timezone support in MicroPython, and the RTC is set in UTC time.
懒的高级!!!不爱做就说不爱做呗,甩锅直接加个注释,好样的。
其实简单得很哦,ntp的灵魂就俩,一是选服务器,国内一般都是ntp1.aliyun.com,我是不会偷偷告诉你ntp2.aliyun.com到ntp9都是可以的,所以嘛。。。改成2应该用的人少了就快啦(很可能心理作用);第二是时区问题,全球的24个时区,要加上时间差的,所以说我为什么要在咸鱼10个都卖不出去的产品上加全球的功能啊,啊,这就是我燃烧的程序猿灵魂啊!
不扯了灵魂就是改一下这个ntptime.py,不想重新编译一个固件的话,再扔一个新的到板子上就好啦!
#modify by jd3096 timezone support in MicroPython
try:
import usocket as socket
except:
import socket
try:
import ustruct as struct
except:
import struct
# (date(2000, 1, 1) - date(1900, 1, 1)).days * 24*60*60
NTP_DELTA = 3155644800
host = "ntp2.aliyun.com"
def time():
NTP_QUERY = bytearray(48)
NTP_QUERY[0] = 0x1B
addr = socket.getaddrinfo(host, 123)[0][-1]
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
s.settimeout(1)
res = s.sendto(NTP_QUERY, addr)
msg = s.recv(48)
finally:
s.close()
val = struct.unpack("!I", msg[40:44])[0]
return val - NTP_DELTA
def settime():
t = time()
import machine
import utime
tm = utime.localtime(t)
machine.RTC().datetime((tm[0], tm[1], tm[2], tm[6] + 1, tm[3], tm[4], tm[5], 0))
服务器都写好了,不用改了,改不同时区就用不同的ntptime.NTP_DELTA就行了!
24个时区的时间差我也刚出来了!
#3600 secs a day
UTC=3155673600
UTC_P1=3155670000
UTC_P2=3155666400
UTC_P3=3155662800
UTC_P4=3155659200
UTC_P5=3155655600
UTC_P6=3155652000
UTC_P7=3155648400
UTC_P8=3155644800
UTC_P9=3155641200
UTC_P10=3155637600
UTC_P11=3155634000
UTC_P12=3155630400
UTC_R1=3155677200
UTC_R2=3155680800
UTC_R3=3155684400
UTC_R4=3155688000
UTC_R5=3155691600
UTC_R6=3155695200
UTC_R7=3155698800
UTC_R8=3155702400
UTC_R9=3155706000
UTC_R10=3155709600
UTC_R11=3155713200
UTC_R12=3155716800
所以就可以这样写:
ntptime.settime(timezone=ntptime.UTC_R12)
一句话搞定啦!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)