查看micropython标准库
utime库提供获取时间和日期、测量时间间隔、延时等函数。
初始时刻:Unix使用了POSIX的系统标准,从1970-01-01 00:00: 00 UTC开始计数。而嵌入式版本是从2000-01-01 00:00:00 UTC开始 计算的。
日期/时间:需要一个实时时钟(RTC)。在底层 系统(包括一些 RTOS 中),已经包含了 RTC 功能。设置时间是通过 OS/RTOS,而不是MicroPython完成的,查询日期/时间也需要通过系统API。对于裸板系统,时钟依赖于machine.RTC()对象。 设置时间是通过machine.RTC().datetime(tuple)函数,并通过下面方式维护:
- 后备电池 (可能是选件、扩展板等)。
- 使用网络时间协议 (需要用户设置)。
- 每次上电时手工设置 (大部分只是在硬复位时需要设置,少部分每次复位都需要设置)。
如果实际时间不是通过系统/MicroPython RTC维持,那么下面函数结果可能不是和预期的相同。
函数
utime.localtime([secs])
从初始时间的秒转换为元组: (年, 月, 日, 时, 分, 秒, 星期, yearday) 。如果 secs 是空或者 None,那么使用当前时间。
utime.sleep(seconds)
休眠指定的时间(秒),Seconds 可以是浮点数。注意有些版本的 MicroPython 不支持浮点数,为了兼容可以使用 sleep_ms() 和 sleep_us() 函数。
utime.sleep_ms(ms)
延时指定毫秒,参数不能小于0。
utime.sleep_us(us)
延时指定微秒,参数不能小于0。
utime.ticks_ms()
返回不断递增的毫秒计数器,在某些值后会重新计数(未指定)。计数值本身无特定意义,只适合用在 ticks_diff().
utime.ticks_us()
和上面类似,只是返回微秒。
utime.ticks_cpu()
和 ticks_ms/ticks_us 类似,具有更高精度 (使用 CPU 时钟)。
utime.ticks_diff(old, new)
计算两次调用 ticks_ms(), ticks_us(), 或 ticks_cpu()之间的时间。因为这些函数的计数值可能会回绕,所以不能直接相减,需要使用 ticks_diff() 函数。“旧” 时间需要在 “新” 时间之前,否则结果无法确定。这个函数不要用在计算很长的时间 (因为 ticks_*() 函数会回绕,通常周期不是很长)。通常用法是在带超时的轮询事件中调用:
start = time.ticks_us()
while pin.value() == 0:
if time.ticks_diff(start, time.ticks_us()) > 500:
raise TimeoutError
utime.time()
与 CPython 的不同
在 CPython 中,这个函数用浮点数返回从 Unix 开始时间(1970-01-01 00:00 UTC)的秒数,通常是毫秒级的精度。在 MicroPython 中,只有 Unix版才使用相同开始时间,如果允许浮点精度,将返回亚秒精度。嵌入式硬件通常没有用浮点数表示长时间访问和亚秒精度,所以返回值是整数。一些嵌入式系统硬件不支持RTC 电池供电方式,所以返回的秒数是从最后上电、或相对某个时间、以及特定硬件时间 (如复位)。