模块 time:时间和日期处理

MicroPython内置模块 time:时间和日期处理

MicroPython的内置模块time是一个用于处理时间相关功能的模块,它实现了CPython模块的一个子集,但也有一些特殊的特点和限制。本文将从以下几个方面介绍time模块的主要特点、应用场景,以及需注意事项,并给出几个实际运用程序案例。

主要特点

  1. time模块提供了获取当前时间和日期、测量时间间隔、和延迟执行的函数。
  2. time模块使用的时间纪元(Epoch)是一个固定的起始点,用于计算从该点开始经过的秒数。不同的端口可能使用不同的时间纪元,Unix端口使用1970-01-01 00:00:00 UTC,而一些嵌入式端口使用2000-01-01 00:00:00 UTC。可以通过调用time.gmtime(0)来确定端口使用的时间纪元。
  3. time模块可以将秒数转换为日期时间元组,或者反过来,使用time.gmtime()time.localtime()函数。日期时间元组包含8个元素,分别是年、月、日、时、分、秒、星期和一年中的第几天。这些函数可以接受一个可选的秒数参数,如果没有提供,则使用来自实时时钟(RTC)的当前时间。
  4. time模块可以使用time.sleep()time.sleep_ms()time.sleep_us()函数来延迟执行一定的秒数、毫秒数或微秒数。这些函数会阻塞当前线程,直到延迟时间结束或被中断。某些板可能接受浮点数作为参数,以实现更精确的延迟。
  5. time模块还提供了一些高级函数,用于处理可能环绕的刻度值。刻度值是一个递增的计数器,表示从任意参考点开始经过的毫秒数或微秒数,当达到某个最大值后会重新从零开始。这个最大值称为TICKS_MAX,它是一个未公开的常量,但可以通过调用time.ticks_add(0, -1)来获取。刻度值可以用于测量非常短的时间间隔或实现精确的定时器。

time模块提供了以下几个函数来处理刻度值:

  1. time.ticks_ms()time.ticks_us()分别返回以毫秒或微秒为单位的刻度值。
  2. time.ticks_cpu()返回以系统中尽可能高的分辨率为单位的刻度值,通常是CPU时钟,但也可能是其他高精度定时源。这个函数用于非常精细的基准测试或非常紧凑的实时循环,但并非每个端口都实现了它。
  3. time.ticks_add(ticks, delta)按给定数字偏移刻度值,可以是正数也可以是负数。这个函数可以用于计算事件或任务的截止日期。
  4. time.ticks_diff(ticks1, ticks2)测量两个刻度值之间的差异,作为一个可能环绕的带符号值。这个函数可以用于比较两个刻度值或计算时间间隔。

应用场景

  1. time模块可以用于获取和设置系统时间和日期,例如在开机时通过网络时间协议(NTP)同步RTC,或者在用户界面中显示当前时间和日期。
  2. time模块可以用于实现定时器或延时器,例如在循环中等待一定时间后执行某些操作,或者在某些条件满足后触发某些事件。
  3. time模块可以用于测量代码执行的性能或效率,例如在运行前后记录刻度值并计算差异,或者在循环中使用刻度值控制执行频率。

MicroPython的内置模块time提供了与时间相关的功能,但在使用时需要注意以下几个事项:

  1. 时间精度:MicroPython是一种嵌入式系统的解释器,其运行在资源受限的环境中。因此,MicroPython的时间函数的精度可能会受到限制。具体的精度取决于所运行的硬件平台和MicroPython的配置。在实时性要求较高的应用中,建议使用专门的硬件或实时操作系统来处理时间相关的任务。
  2. 时间戳的表示:MicroPython中的时间戳是一个浮点数,使用 2000-01-01 00:00:00 UTC 的纪元,而不是 1970-01-01 00:00:00 UTC 的 POSIX 系统纪元。需要注意的是,不同的硬件平台和操作系统可能对时间戳的起始点和精度有所不同。在进行时间计算或与其他系统进行时间交互时,应确保对时间戳的解释和转换是一致的。
  3. 延时函数的准确性:MicroPython的time模块提供了sleep()函数用于延时执行代码。但是,由于MicroPython的运行环境受到资源限制和调度机制的影响,延时函数的准确性可能会有一定的偏差。在对时间精度要求较高的应用中,建议使用专门的硬件定时器或实时操作系统提供的延时机制。
  4. 时区和夏令时:MicroPython的time模块默认使用本地时间。但是,MicroPython的内置时间模块没有提供与时区和夏令时相关的功能。如果需要在MicroPython中处理时区和夏令时,可能需要借助第三方库或手动实现相关功能。
  5. 时间格式化:MicroPython的time模块提供了strftime()函数用于格式化日期和时间。但是,需要注意的是,由于MicroPython的资源受限和内存限制,strftime()函数的格式选项可能会受到一些限制。在使用格式字符串时,应确保所选的格式是MicroPython支持的,并且不会导致内存溢出或其他问题。

总之,MicroPython的内置模块time提供了基本的时间功能,但在使用时需要注意时间精度、时间戳的表示、延时函数的准确性、时区和夏令时的处理,以及格式化函数的限制。根据具体的应用需求,可能需要考虑使用外部硬件或库来提供更高精度的时间功能和处理复杂的时间相关任务。实际运用程序案例有:

案例一:使用NTP同步RTC并显示当前时间和日期

import network
import ntptime
import time# 连接到WiFi网络sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('SSID', 'PASSWORD')
while not sta_if.isconnected():pass# 使用NTP同步RTCntptime.settime()# 显示当前时间和日期while True:t = time.localtime()print('当前时间是:{}年{}月{}日 {}:{}:{}'.format(t[0], t[1], t[2], t[3], t[4], t[5]))time.sleep(1)

案例二:使用time.sleep()实现一个简单的秒表

import time# 初始化变量start = 0 # 开始时间
stop = 0 # 停止时间
elapsed = 0 # 经过时间
running = False # 是否正在运行# 定义开始函数def started():global start, elapsed, runningif not running:start = time.time() - elapsed # 记录开始时间并减去之前经过的时间running = True # 设置运行标志为真# 定义停止函数def stop():global stop, elapsed, runningif running:stop = time.time() # 记录停止时间elapsed = stop - start # 计算经过时间running = False # 设置运行标志为假# 定义复位函数def reset():global start, stop, elapsed, runningstart = 0 # 重置开始时间为零stop = 0 # 重置停止时间为零elapsed = 0 # 重置经过时间为零running = False # 设置运行标志为假# 定义显示函数def show():global elapsed, runningif running:elapsed = time.time() - start # 更新经过时间print('秒表:{:.2f}秒'.format(elapsed)) # 显示经过时间,保留两位小数# 测试程序started() # 开始秒表
time.sleep(3) # 等待3秒
show() # 显示秒表,应该接近3秒
time.sleep(2) # 等待2秒
stop() # 停止秒表
show() # 显示秒表,应该接近5秒,且不再变化
time.sleep(2) # 等待2秒
started() # 重新开始秒表,从上次停止的地方继续计时
time.sleep(4) # 等待4秒
show() # 显示秒表,应该接近9秒
reset() # 复位秒表
show() # 显示秒表,应该为0秒

案例三:使用time.ticks_ms()和time.ticks_diff()测量LED闪烁的频率

import machine
import time# 创建一个LED对象,连接到引脚2(ESP32板上的内置LED)led = machine.Pin(2, machine.Pin.OUT)# 创建一个计数器变量,用于记录LED闪烁的次数count = 0# 创建一个回调函数,用于在LED状态改变时更新计数器和刻度值,并打印频率信息def callback

案例四:获取当前时间戳:

import time# 获取当前时间戳timestamp = time.time()
print("Current timestamp:", timestamp)

在这个示例中,我们使用time模块的time()函数获取当前时间的时间戳。时间戳是一个浮点数,表示自UNIX纪元(1970年1月1日)以来的秒数。我们使用time.time()函数获取当前时间的时间戳,并打印出来。

案例五:延时执行代码:

import timeprint("Start")# 延时2秒time.sleep(2)print("End")

在这个示例中,我们使用time模块的sleep()函数来实现延时执行代码。在这里,我们打印"Start",然后使用time.sleep(2)使程序暂停执行2秒,最后打印"End"。

案例六:格式化日期和时间:

import time# 获取当前时间的结构化时间current_time = time.localtime()# 格式化日期和时间formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", current_time)
print("Formatted time:", formatted_time)

在这个示例中,我们使用time模块的localtime()函数获取当前时间的结构化时间。然后,使用strftime()函数将结构化时间格式化为指定的字符串格式。在这里,我们使用"%Y-%m-%d %H:%M:%S"作为格式字符串,表示年-月-日 时:分:秒的格式。最后,我们打印出格式化后的日期和时间字符串。

案例七:获取当前时间戳

import time# 获取当前时间戳timestamp = time.time()# 打印当前时间戳print("当前时间戳:", timestamp)

在这个例子中,我们使用time.time() 函数获取当前的时间戳。时间戳是自 1970 年 1 月 1 日午夜以来经过的秒数。我们将当前时间戳打印出来。

案例八:延时执行代码

import time# 延时执行代码print("开始执行")
time.sleep(2)
print("延时 2 秒后执行")

在这个例子中,我们使用time.sleep() 函数在代码执行过程中添加延时。这里我们使用 time.sleep(2) 来让程序暂停执行 2 秒钟。在延时结束后,打印出 “延时 2 秒后执行”。

案例九:格式化时间戳

import time# 获取当前时间戳
timestamp = time.time()# 格式化时间戳formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timestamp))# 打印格式化后的时间print("格式化后的时间:", formatted_time)

在这个例子中,我们获取当前的时间戳,并使用 time.strftime() 函数将其格式化为指定的日期时间格式。我们使用 %Y-%m-%d %H:%M:%S 格式字符串来表示年、月、日、小时、分钟和秒。使用 time.localtime() 函数将时间戳转换为本地时间。最后,我们打印出格式化后的时间。

time.strftime() 方法


描述

time strftime() 函数用于格式化时间,返回以可读字符串表示的当地时间,格式由参数 format 决定。

语法

strftime()方法语法:

time.strftime(format[, t])

参数

  • format – 格式字符串。
  • t – 可选的参数 t 是一个 struct_time 对象。

返回值

返回以可读字符串表示的当地时间。

说明

python中时间日期格式化符号:

  • %y 两位数的年份表示(00-99)
  • %Y 四位数的年份表示(000-9999)
  • %m 月份(01-12)
  • %d 月内中的一天(0-31)
  • %H 24小时制小时数(0-23)
  • %I 12小时制小时数(01-12)
  • %M 分钟数(00=59)
  • %S 秒(00-59)
  • %a 本地简化星期名称
  • %A 本地完整星期名称
  • %b 本地简化的月份名称
  • %B 本地完整的月份名称
  • %c 本地相应的日期表示和时间表示
  • %j 年内的一天(001-366)
  • %p 本地A.M.或P.M.的等价符
  • %U 一年中的星期数(00-53)星期天为星期的开始
  • %w 星期(0-6),星期天为星期的开始
  • %W 一年中的星期数(00-53)星期一为星期的开始
  • %x 本地相应的日期表示
  • %X 本地相应的时间表示
  • %Z 当前时区的名称
  • %% %号本身

实例

以下实例展示了 strftime() 函数的使用方法:

实例


# -*- coding: UTF-8 -*-from datetime import datetimenow = datetime.now() # current date and timeyear = now.strftime("%Y")
print("year:", year)month = now.strftime("%m")
print("month:", month)day = now.strftime("%d")
print("day:", day)time = now.strftime("%H:%M:%S")
print("time:", time)date_time = now.strftime("%Y-%m-%d, %H:%M:%S")
print("date and time:",date_time)

以上实例输出结果为:

year: 2020
month: 09
day: 25
time: 10:24:28
date and time: 2020-09-25, 10:24:28

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/694218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java (spring-boot)的社区物业管理系统

一、项目介绍 本系统共分为两个角色:管理员和业主。 主要功能有,核心业务处理,基础信息管理,数据统计分析 核心业务处理:车位收费管理,物业收费管理,投诉信息管理,保修信息管理。 …

Top-N 泛型工具类

一、代码实现 public class TopNUtil<E extends Comparable<E>> {private final PriorityQueue<E> priorityQueue;private final int n;/*** 构造 Top-N*/public TopNUtil(int size) {if (size < 0) {throw new IllegalArgumentException("Top-N si…

嵌入式学习day22 Linux

文件IO: 1. lseek off_t lseek(int fd, off_t offset, int whence); 功能: 重新设定文件描述符的偏移量 参数: fd:文件描述符 offset:偏移量 whence: SEEK_SET 文件开头 …

代码随想录三刷day04

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣209. 长度最小的子数组二、力扣904. 水果成篮三、力扣76. 最小覆盖子串 前言 接下来就开始介绍数组操作中另一个重要的方法&#xff1a;滑动窗口。 所谓…

C++从入门到精通 第十四章(STL容器)【下】

七、list容器 1、list的基本概念 &#xff08;1&#xff09;list的功能是将数据进行链式存储&#xff0c;对应数据结构中的链表&#xff0c;链表是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接实现的。 &#xff08;2&#xff…

《VitePress 简易速速上手小册》第2章:Markdown 与页面创建(2024 最新版)

文章目录 2.1 Markdown 基础及扩展2.1.1 基础知识点解析2.1.2 重点案例&#xff1a;技术博客2.1.3 拓展案例 1&#xff1a;食谱分享2.1.4 拓展案例 2&#xff1a;个人旅行日记 2.2 页面结构与布局设计2.2.1 基础知识点解析2.2.2 重点案例&#xff1a;公司官网2.2.3 拓展案例 1&…

Linux系统运维:性能监视和分析工具sar命令详解

目 录 一、sar工具介绍 二、sar工作原理 &#xff08;一&#xff09;原理概述 &#xff08;二&#xff09;sar数据收集器 三、sar命令语法 四、sar主要功能介绍 &#xff08;一&#xff09;功能概述 &#xff08;二&#xff09;CPU统计数据 &#xff08;三&a…

jwt+redis实现登录认证

项目环境&#xff1a;spring boot项目 pom.xml引入jwt和redis <!-- jwt --><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.3.0</version></dependency><!-- redis坐标-->…

数据结构与算法:队列

在上篇文章讲解了栈之后&#xff0c;本篇也对这一章进行收尾&#xff0c;来到队列&#xff01; 队列 队列的介绍队列的存储结构队列顺序存储的不足之处 循环队列的定义队列的链式存储结构链队列的构建链队列的初始化队尾入队队头出队获取队头队尾元素判断队列是否为空获取队列元…

Spark解决代码变量bug:error: reassingnment to val

在Scala中&#xff0c;val关键字用于声明一个不可变的变量&#xff0c;一旦赋值后就不能再更改。这就是为什么我尝试重新赋值给modelFilePath时会收到“reassignment to val”的错误。 modelFilePath的声明从val更改为var&#xff0c;因为var允许我们重新赋值 样例代码 val …

267.【华为OD机试真题】贪心歌手(贪心策略-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-贪心歌手二.解题思路三.题解代码Python题解代码…

SQL常用函数收藏

日期时间相关 【date_format】 DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。 参考地址&#xff1a;https://www.runoob.com/sql/func-date-format.html -- 函数&#xff1a;date_format select DATE_FORMAT(Now(),"%Y-%m-%d %H:%i:%S") as v_current_da…

【Java前端技术栈】模块化编程

一、基本介绍 1.基本介绍 1 传统非模块化开发有如下的缺点&#xff1a;(1)命名冲突 (2)文件依赖 2 Javascript 代码越来越庞大&#xff0c;Javascript 引入模块化编程&#xff0c;开发者只需要实现核心的业务逻辑&#xff0c;其他都可以加载别人已经写好的模块 3 Javascrip…

torch.utils.data

整体架构 平时使用 pytorch 加载数据时大概是这样的&#xff1a; import numpy as np from torch.utils.data import Dataset, DataLoaderclass ExampleDataset(Dataset):def __init__(self):self.data [1, 2, 3, 4, 5]def __getitem__(self, idx):return self.data[idx]def…

第2.2章 StarRocks表设计——排序键和数据模型

该篇文章介绍StarRocks-2.5.4版本的数据模型相关内容&#xff0c;有误请指出~ 目录 一、数据模型概述 1.1 四种模型 1.2 排序键 1.2.1 概述 1.2.2 分类 1.2.3 注意事项 二、明细模型 2.1 概述 2.2 适用场景 2.3 建表语句及说明 三、聚合模型 3.1 概述 3.2 适用场…

网络入门基础

本专栏内容为&#xff1a;Linux学习专栏&#xff0c;分为系统和网络两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握Linux。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;网络 &#x1f69a;代码仓库&#xff1a;小小unicorn的代…

[AIGC] JVM内存结构中的方法区主要存储哪些信息?

在JVM的内存结构中&#xff0c;方法区&#xff08;Method Area&#xff09;被视为JVM的永久代。它主要负责存储已经被虚拟机加载的类信息、常量、静态变量以及编译器编译后的代码等数据。具体可以分为以下几个部分&#xff1a; 类信息 这部分信息包括类数据&#xff08;如类名…

32FLASH闪存

目录 一&#xff0e;FLASH简介 二&#xff0e;代码实现 &#xff08;1&#xff09;读写内部FLASH &#xff08;2&#xff09;读取芯片ID 一&#xff0e;FLASH简介 存储器地址要记得累 系统存储器是原厂写入的Bootloader程序&#xff08;用于串口下载&#xff09;&#xff0…

04.结构体和结构体数组

1.结构体 struct stu{int id;string name;float grade; };2.结构体数组的排序 sort算法如果是非自定义类型可以缺省&#xff0c;默认升序排序&#xff0c;但自定义类型必须自己重写比较规则&#xff0c;因为系统没法知道你怎么比较 sort(首元素地址&#xff0c;尾元素下一位…

Python 写网络监控

大家好&#xff01;我是爱摸鱼的小鸿&#xff0c;关注我&#xff0c;收看每期的编程干货。 网络监控是保障网络可靠性的一项重要任务。通过实时监控网络性能&#xff0c;我们可以及时发现异常&#xff0c;迅速采取措施&#xff0c;保障网络畅通无阻。本文将以 Python为工具&…