rzyzzxw 发表于 2018-12-25 09:24:50

【掌控】网络授时的数字时钟

早些时候写过一个帖子,讲到网络授时数字时钟,其实代码都是抄小唐的,我只是改了一小点,然后拿出去显摆。
出来混,早晚要还的,现在终于到把这段代码消化的时候了。



写代码时常常用到时间模块

import time
time 模块提供用于获取当前时间和日期、测量时间间隔和延迟的函数。


这个帖子,主要用到一个新的(对我来说)函数。


【新知】


time.localtime()将一个以秒计的时间转换为一个包含下列内容的8元组:(年、月、日、小时、分钟、秒、一周中某日、一年中某日)。若未提供秒或为None,则使用RTC时间。
[*]年包括世纪(例如2014)
[*]月为 1-12
[*]日为 1-31
[*]小时为 0-23
[*]分钟为 0-59
[*]秒钟 0-59
[*]周中某日为 0-6 (对应周一到周日)
[*]年中某日为 1-366

【代码】
import ntptime,network   # 导入国际标准时间、网络模块
from mpython import*
from machine import Timer# 导入计时模块

mywifi=wifi()
mywifi.connectWiFi("ssid","password")# WiFi设置

try:
    ntptime.settime()
except OSError :
    oled.DispChar("ntp链接超时,请重启!",0,20)
    oled.show()
else:

    def get_time(_):   #定义时钟刷屏时间
      t = time.localtime()
      print("%d年%d月%d日 %d:%d:%d"%(t,t,t,t,t,t))
      oled.DispChar("{}年{}月{}日" .format(t,t,t),20,8)
      oled.DispChar("{}:{}:{}" .format(t,t,t),38,25)
      oled.show()
      oled.fill(0)

    tim1 = Timer(1)

    tim1.init(period=1000, mode=Timer.PERIODIC, callback=get_time)

学习了前面网络授时模拟钟表的内容,其它的代码都挺明白了,重点是:

def get_time(_):   #定义时钟刷屏时间
      t = time.localtime()
      print("%d年%d月%d日 %d:%d:%d"%(t,t,t,t,t,t))
      oled.DispChar("{}年{}月{}日" .format(t,t,t),20,8)
      oled.DispChar("{}:{}:{}" .format(t,t,t),38,25)
      oled.show()
      oled.fill(0)

【time.localtime()】

上面有资料,将一个以秒计的时间转换为一个包含下列内容的8元组:(年、月、日、小时、分钟、秒、一周中某日、一年中某日)。若未提供秒或为None,则使用RTC时间。

[*]年包括世纪(例如2014)
[*]月为 1-12
[*]日为 1-31
[*]小时为 0-23
[*]分钟为 0-59
[*]秒钟 0-59
[*]周中某日为 0-6 (对应周一到周日)
[*]年中某日为 1-366

print("%d年%d月%d日 %d:%d:%d"%(t,t,t,t,t,t))
这句代码是让程序REPL同步输出time.localtime()给出的8元组内容中的前6项。
%d   格式符十进制整数依次对应后面()内元组的数据。


oled.DispChar("{}年{}月{}日" .format(t,t,t),20,8)

格式化字符,{}对应填入format()元组中的内容。

好吧,新手小白,每学习一点都挺困难。






44107900 发表于 2018-12-25 22:15:43

谢谢分享!

碧海 发表于 2021-4-20 23:27:59

这个函数以前还真不知道
页: [1]
查看完整版本: 【掌控】网络授时的数字时钟