最近跟老铁做了个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) 

一句话搞定啦!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐