# utime 时间相关的函数 - [概要](#概要) - [维护实际日历日期/时间](#维护实际日历日期时间) - [Utime API详解](#utime-api详解) - [函数](#函数) - [时间元组](#时间元组) - [时间元组逆函数](#时间元组逆函数) - [休眠时间](#休眠时间) - [递增计数器](#递增计数器) - [递增计数器间隔计算](#递增计数器间隔计算) - [开始时间的秒数](#开始时间的秒数) - [示例](#示例) ## 概要    本节介绍时间函数utime概念,以及如何在MicroPython中使用utime。   `utime` 模块提供用于获取当前时间和日期、测量时间间隔和延迟的函数。 ### 维护实际日历日期/时间 - **时刻**: 使用2000-01-01 00:00:00 UTC开始的时间。 - **维护实际日历日期/时间**: 这需要实时通信(RTC)。在具备底层OS的系统中,RTC可能是隐式的。设置和维护实际日历时间应是OS/RTOS的职能, 且在MicroPython之外完成,只使用OS API查询日期/时间。 ## Utime API详解   使用`import utime`导入定时器`utime`模块   再使用`TAB` 按键来查看`utime`中所包含的内容: ```python >>> import utime >>> utime. __name__ gmtime localtime mktime sleep sleep_ms sleep_us ticks_add ticks_cpu ticks_diff ticks_ms ticks_us time ``` ### 函数 #### 时间元组   `utime.localtime([secs])`   函数说明:将一个以秒计的时间转换为一个包含下列内容的8元组:(年、月、日、小时、分钟、秒、一周中某日、一年中某日)。若未提供秒或为None,则使用2000年1月1日以来的时间8元组 - 年包括世纪(例如2014) - 月为 1-12 - 日为 1-31 - 小时为 0-23 - 分钟为 0-59 - 秒钟 0-59 - 周中某日为 0-6 (对应周一到周日) - 年中某日为 1-366   示例: ```python >>> import utime >>> utime.localtime(1000)#转换1000s为时间元组 (2000, 1, 1, 0, 16, 40, 5, 1) ``` #### 时间元组逆函数   `utime.mktime([tuple])`   函数说明:局部时间的逆函数,其参数为一个表示本地时间的8元组。返回一个表示2000年1月1日以来的秒钟的整数。   示例: ```python >>> import utime >>> utime.mktime([2000,1,1,0,0,0,5,1])#将2000年1月1日0时0分0秒周六,一年中第一天转换成2000年1月1日以来的秒钟的整数 0 ``` #### 休眠时间   `utime.sleep(seconds)`   函数说明:休眠给定秒数的时间。秒钟数可为一个表示休眠时间的浮点数。注意:其他端口可能不接受浮点参数,为满足兼容性,使用 `sleep_ms()` 和 `sleep_us()` 函数。   示例: ```python >>> import utime >>> utime.sleep(2)#休眠2秒,等2s后才可以干其他事 ```   `utime.sleep_ms(*ms*)`   函数说明:休眠给定毫秒数的时间,应为正整数或0,1s=1000ms。   示例: ```python >>> import utime >>> utime.sleep_ms(200)#休眠0.2秒,等0.2s后才可以干其他事 ```   `utime.sleep_us(*us*)`   函数说明:休眠给定微秒数的时间。应为正整数或0,1s=1000ms=1000000us。   示例: ```python >>> import utime >>> utime.sleep_us(2000000)#休眠0.2秒,等0.2s后才可以干其他事 ``` #### 递增计数器   `utime.ticks_ms()`   函数说明:返回不断递增的毫秒计数器,在某些值后会重新计数(未指定)。计数值本身无特定意义,只适合用在 `utime.ticks_diff()`和`utime.ticks_add()`   `utime.ticks_us()`   函数说明:返回不断递增的微秒计数器,在某些值后会重新计数(未指定)。计数值本身无特定意义,只适合用在 `utime.ticks_diff()`和`utime.ticks_add()`   `utime.ticks_cpu()`   函数说明:与 `ticks_ms` 和 `ticks_us` 相似,但有更高的分辨率(通常CPU时钟)。计数值本身无特定意义,只适合用在 `utime.ticks_diff()`和`utime.ticks_add()` #### 递增计数器间隔计算   `utime.ticks_add(ticks, delta)`   函数说明:用一个给定数字来抵消ticks值,该数字可为正或负。给定一个 *ticks* 值,该函数允许计算之前或之后ticks的值,返回一个表示2000年1月1日以来的秒钟的整数   `ticks`:须为调用的 `utime.ticks_ms()` 、 `utime.ticks_us()`、 `utime.ticks_cpu()` 函数   `delta`:给定的毫秒数值,为负数代表之前,为正数代表之后。   示例: ```python >>> import utime >>> utime.ticks_add(utime.ticks_ms,-100)#找到100ms前的计数器值 452284 ```   `utime.ticks_diff(new, old)`   函数说明:测量连续调用调用 `utime.ticks_ms()` 、 `utime.ticks_us()`、 `utime.ticks_cpu()` 函数间周期。由这些函数返回的值可能在任何时间停止,因此并不支持直接减去这些值。   `old`:旧时间,须为调用的 `utime.ticks_ms()` 、 `utime.ticks_us()`、 `utime.ticks_cpu()` 函数   `new`:新时间,须为调用的 `utime.ticks_ms()` 、 `utime.ticks_us()`、 `utime.ticks_cpu()` 函数。   “旧” 时间需要在 “新” 时间之前,否则结果无法确定。这个函数不要用在计算很长的时间 (因为 ticks_*() 函数会回绕,通常周期不是很长)。   示例: ```python >>> import utime >>> start = utime.ticks_us()#开始时间为微秒的递增计数器 >>> utime.ticks_diff(utime.ticks_us(),start)#测量开始时间到新的微秒的递增计数器开始时的差值。 220003042 ``` #### 开始时间的秒数   `utime.time`()   函数说明:返回从开始时间的秒数(整数),假设 RTC 已经设置好。如果 RTC 没有设置,函数将返回参考点开始计算的秒数。开发可移植的MicroPython应用程序, 不应依赖该函数来提供高于第二精度的结果。若需要更高精度,需要使用 `ticks_ms()` 和 `ticks_us()` 函数。 需要日历时间,无参数的 `localtime()` 不失为佳选。   示例: ```python >>> import utime >>> utime.time()#返回参考点开始的秒数 15394 ``` ## 示例   显示各种类型时间 ```python import utime set_time = utime.mktime((2021, 5, 8, 11, 30, 0, 0, 27)) print(set_time) print(utime.localtime(set_time)) print(utime.localtime()) print(utime.mktime(utime.localtime())) print(utime.localtime(utime.ticks_add(utime.ticks_ms,-100))) ```   第一行导入时间`utime`   第二、三行把8个元组形式的2000年1月1日到给定时间转换成秒数的整数并打印。   第四行把秒数的整数转换成8元组形式的时间格式   第五行:utime.localtime()输出2000年1月1日以来的时间8元组   第六行:utime.localtime()输出2000年1月1日以来的时间8元组,utime.mktime()需要的参数为时间的8元组,所以会打印出2000年1月1日以来的时间的秒数的整数   第七行:utime.ticks_add(ticks,delta)会计算给定一个 *ticks* 值之前或之后时间秒数的整数,*ticks* 值是返回不断递增的毫秒计数器utime.ticks_ms,delta是-100ms,因为其是负数,所以是找100ms前的计数器值的秒数的正整数。再通过utime.localtime()将其转换成8元组类型时间格式打印出来。