日期时间常用功能和函数

1 time 模块

time 模块提供了很多与时间相关的类和函数,下面我们介绍一些常用的。

1.1 struct_time 类

time 模块的 struct_time 类代表一个时间对象,可以通过索引和属性名访问值。对应关系如下所示:

索引属性
0tm_year(年)如:1945
1tm_mon(月)1 ~ 12
2tm_mday(日)1 ~ 31
3tm_hour(时)0 ~ 23
4tm_min(分)0 ~ 59
5tm_sec(秒)0 ~ 61
6tm_wday(周)0 ~ 6
7tm_yday(一年内第几天)1 ~ 366
8tm_isdst(夏时令)-1、0、1

tm_sec 范围为 0 ~ 61,值 60 表示在闰秒的时间戳中有效,并且由于历史原因支持值 61。

localtime() 表示当前时间,返回类型为 struct_time 对象,示例如下所示:

import timet = time.localtime()print('t-->', t)print('tm_year-->', t.tm_year)print('tm_year-->', t[0])

输出结果:​​​​​​​

t--> time.struct_time(tm_year=2019, tm_mon=12, tm_mday=1, tm_hour=19, tm_min=49, tm_sec=54, tm_wday=6, tm_yday=335, tm_isdst=0)tm_year--> 2019tm_year--> 2019

1.2 常用函数

函数(常量)说明
time()返回当前时间的时间戳
gmtime([secs])将时间戳转换为格林威治天文时间下的 struct_time,可选参数 secs 表示从 epoch 到现在的秒数,默认为当前时间
localtime([secs])与 gmtime() 相似,返回当地时间下的 struct_time
mktime(t)localtime() 的反函数
asctime([t])接收一个 struct_time 表示的时间,返回形式为:Mon Dec  2 08:53:47 2019 的字符串
ctime([secs])ctime(secs) 相当于 asctime(localtime(secs))
strftime(format[, t])格式化日期,接收一个 struct_time 表示的时间,并返回以可读字符串表示的当地时间
sleep(secs)暂停执行调用线程指定的秒数
altzone本地 DST 时区的偏移量,以 UTC 为单位的秒数
timezone本地(非 DST)时区的偏移量,UTC 以西的秒数(西欧大部分地区为负,美国为正,英国为零)
tzname两个字符串的元组:第一个是本地非 DST 时区的名称,第二个是本地 DST 时区的名称

epoch:1970-01-01 00:00:00 UTC

基本使用如下所示:​​​​​​​

import time
print(time.time())print(time.gmtime())print(time.localtime())print(time.asctime(time.localtime()))print(time.tzname)# strftime 使用print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))

strftime 函数日期格式化符号说明如下所示:

符号说明
%a本地化的缩写星期中每日的名称
%A本地化的星期中每日的完整名称
%b本地化的月缩写名称
%B本地化的月完整名称
%c本地化的适当日期和时间表示
%d十进制数 [01,31] 表示的月中日
%H十进制数 [00,23] 表示的小时(24小时制)
%I十进制数 [01,12] 表示的小时(12小时制)
%j十进制数 [001,366] 表示的年中日
%m十进制数 [01,12] 表示的月
%M十进制数 [00,59] 表示的分钟
%p本地化的 AM 或 PM
%S十进制数 [00,61] 表示的秒
%U十进制数 [00,53] 表示的一年中的周数(星期日作为一周的第一天)
%w十进制数 [0(星期日),6] 表示的周中日
%W十进制数 [00,53] 表示的一年中的周数(星期一作为一周的第一天)
%x本地化的适当日期表示
%X本地化的适当时间表示
%y十进制数 [00,99] 表示的没有世纪的年份
%Y十进制数表示的带世纪的年份
%z时区偏移以格式 +HHMM 或 -HHMM 形式的 UTC/GMT 的正或负时差指示,其中 H 表示十进制小时数字,M 表示小数分钟数字 [-23:59, +23:59]
%Z时区名称
%%字面的 '%' 字符

2 datetime 模块

datatime 模块重新封装了 time 模块,提供了更多接口,变得更加直观和易于调用。

2.1 date 类

date 类表示一个由年、月、日组成的日期,格式为:datetime.date(year, month, day)。

  • year 范围为:[1, 9999]

  • month 范围为:[1, 12]

  • day 范围为 [1, 给定年月对应的天数]。

类方法和属性如下所示:

方法(属性)说明
today()返回当地的当前日期
fromtimestamp(timestamp)根据给定的时间戮,返回本地日期
mindate 所能表示的最小日期
maxdate 所能表示的最大日期

使用示例如下所示:​​​​​​​

import datetimeimport time
print(datetime.date.today())print(datetime.date.fromtimestamp(time.time()))print(datetime.date.min)print(datetime.date.max)

实例方法和属性如下所示:

方法(属性)说明
replace(year, month, day)生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性
timetuple()返回日期对应的 struct_time 对象
weekday()返回一个整数代表星期几,星期一为 0,星期天为 6
isoweekday()返回一个整数代表星期几,星期一为 1,星期天为 7
isocalendar()返回格式为 (year,month,day) 的元组
isoformat()返回格式如 YYYY-MM-DD 的字符串
strftime(format)返回自定义格式的字符串
year
month
day

使用示例如下所示:​​​​​​​

import datetime
td = datetime.date.today()print(td.replace(year=1945, month=8, day=15))print(td.timetuple())print(td.weekday())print(td.isoweekday())print(td.isocalendar())print(td.isoformat())print(td.strftime('%Y %m %d %H:%M:%S %f'))print(td.year)print(td.month)print(td.day)

2.2 time 类

time 类表示由时、分、秒、微秒组成的时间,格式为:time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)。

  • hour 范围为:[0, 24)

  • minute 范围为:[0, 60)

  • second 范围为:[0, 60)

  • microsecond 范围为:[0, 1000000)

  • fold 范围为:[0, 1]

实例方法和属性如下所示:

方法(属性)说明
isoformat()返回 HH:MM:SS 格式的字符串
replace(hour, minute, second, microsecond, tzinfo, * fold=0)创建一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性
strftime(format)返回自定义格式的字符串
hour
minute
second
microsecond微秒
tzinfo时区

使用示例如下所示:​​​​​​​

import datetime
t = datetime.time(10, 10, 10)print(t.isoformat())print(t.replace(hour=9, minute=9))print(t.strftime('%I:%M:%S %p'))print(t.hour)print(t.minute)print(t.second)print(t.microsecond)print(t.tzinfo)

2.3 datetime 类

datetime 包括了 date 与 time 的所有信息,格式为:datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0),参数范围值参考 date 类与 time 类。

类方法和属性如下所示:

方法(属性)说明
today()返回当地的当前时间
now(tz=None)类似于 today(),可选参数 tz 可指定时区
utcnow()返回当前 UTC 时间
fromtimestamp(timestamp, tz=None)根据时间戳返回对应时间
utcfromtimestamp(timestamp)根据时间戳返回对应 UTC 时间
combine(date, time)根据 date 和 time 返回对应时间
mindatetime 所能表示的最小日期
maxdatetime 所能表示的最大日期

使用示例如下所示:​​​​​​​

import datetime
print(datetime.datetime.today())print(datetime.datetime.now())print(datetime.datetime.utcnow())print(datetime.datetime.fromtimestamp(time.time()))print(datetime.datetime.utcfromtimestamp(time.time()))print(datetime.datetime.combine(datetime.date(2019, 12, 1), datetime.time(10, 10, 10)))print(datetime.datetime.min)print(datetime.datetime.max)

实例方法和属性如下所示:

方法(属性)说明
date()返回具有同样 year,month,day 值的 date 对象
time()返回具有同样 hour, minute, second, microsecond 和 fold 值的 time 对象
replace(year, month, day=self.day, hour, minute, second, microsecond, tzinfo, * fold=0)生成一个新的日期对象,用参数指定的年,月,日,时,分,秒...代替原有对象中的属性
weekday()返回一个整数代表星期几,星期一为 0,星期天为 6
isoweekday()返回一个整数代表星期几,星期一为 1,星期天为 7
isocalendar()返回格式为 (year,month,day) 的元组
isoformat()返回一个以 ISO 8601 格式表示日期和时间的字符串 YYYY-MM-DDTHH:MM:SS.ffffff
strftime(format)返回自定义格式的字符串
year
month
day
hour
minute
second
microsecond微秒
tzinfo时区

使用示例如下所示:​​​​​​​

import datetime
td = datetime.datetime.today()print(td.date())print(td.time())print(td.replace(day=11, second=10))print(td.weekday())print(td.isoweekday())print(td.isocalendar())print(td.isoformat())print(td.strftime('%Y-%m-%d %H:%M:%S .%f'))print(td.year)print(td.month)print(td.month)print(td.hour)print(td.minute)print(td.second)print(td.microsecond)print(td.tzinfo)

3 calendar 模块

calendar 模块提供了很多可以处理日历的函数。

3.1 常用函数

方法说明
setfirstweekday(weekday)设置每一周的开始(0 表示星期一,6 表示星期天)
firstweekday()返回当前设置的每星期的第一天的数值
isleap(year)如果 year 是闰年则返回 True ,否则返回 False
leapdays(y1, y2)返回 y1 至 y2 (包含 y1 和 y2 )之间的闰年的数量
weekday(year, month, day)返回指定日期的星期值
monthrange(year, month)返回指定年份的指定月份第一天是星期几和这个月的天数
month(theyear, themonth, w=0, l=0)返回月份日历
prcal(year, w=0, l=0, c=6, m=3)返回年份日历

使用示例如下所示:​​​​​​​

import calendar
calendar.setfirstweekday(1)print(calendar.firstweekday())print(calendar.isleap(2019))print(calendar.leapdays(1945, 2019))print(calendar.weekday(2019, 12, 1))print(calendar.monthrange(2019, 12))print(calendar.month(2019, 12))print(calendar.prcal(2019))

3.2 Calendar 类

Calendar 对象提供了一些日历数据格式化的方法,实例方法如下所示:

方法说明
iterweekdays()返回一个迭代器,迭代器的内容为一星期的数字
itermonthdates(year, month)返回一个迭代器,迭代器的内容为年 、月的日期

使用示例如下所示:

​​​​​​​

from calendar import Calendar
c = Calendar()print(list(c.iterweekdays()))for i in c.itermonthdates(2019, 12):    print(i)

3.3 TextCalendar 类

TextCalendar 为 Calendar子类,用来生成纯文本日历。实例方法如下所示:

方法说明
formatmonth(theyear, themonth, w=0, l=0)返回一个多行字符串来表示指定年、月的日历
formatyear(theyear, w=2, l=1, c=6, m=3)返回一个 m 列日历,可选参数 w, l, 和 c 分别表示日期列数, 周的行数, 和月之间的间隔

使用示例如下所示:​​​​​​​

from calendar import TextCalendar
tc = TextCalendar()print(tc.formatmonth(2019, 12))print(tc.formatyear(2019))

3.4 HTMLCalendar类

HTMLCalendar 类可以生成 HTML 日历。实例方法如下所示:

方法说明
formatmonth(theyear, themonth, withyear=True)返回一个 HTML 表格作为指定年、月的日历
formatyear(theyear, width=3)返回一个 HTML 表格作为指定年份的日历
formatyearpage(theyear, width=3, css='calendar.css', encoding=None)返回一个完整的 HTML 页面作为指定年份的日历

使用示例如下所示:​​​​​​​

from calendar import HTMLCalendar
hc = HTMLCalendar()print(hc.formatmonth(2019, 12))print(hc.formatyear(2019))print(hc.formatyearpage(2019))

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

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

相关文章

Docker容器与虚拟化技术:Docker资源控制、数据管理

目录 一、理论 1.资源控制 2.Docker数据管理 二、实验 1.Docker资源控制 2.Docker数据管理 三、问题 1.docker容器故障导致大量日志集满,造成磁盘空间满 2、当日志占满之后如何处理 四、总结 一、理论 1.资源控制 (1) CPU 资源控制 cgroups&#xff0…

Java Vue Uniapp MES生产执行管理系统

本MES系统是一款B/S结构、通用的生产执行管理系统,功能强大! 系统基于多年离散智造行业的业务经验组建,主要目的是为国内离散制造业的中小企业提供一个专业化、通用性、低成本的MES系统解决方案。 联系作者获取

Linux(进程控制)

进程控制 进程创建fork函数初识fork函数返回值写时拷贝fork常规用法fork调用失败的原因 进程终止进程退出码进程常见退出方法 进程等待进程等待必要性获取子进程status进程等待的方法 阻塞等待与非阻塞等待阻塞等待非阻塞等待 进程替换替换原理替换函数函数解释命名理解 做一个…

re学习(32)【绿城杯2021】babyvxworks(浅谈花指令)

链接:https://pan.baidu.com/s/1msA5EY_7hoYGBEema7nWwA 提取码:b9xf wp:首先找不到main函数,然后寻找特殊字符串, 交叉引用 反汇编 主函数在sub_3D9当中,但是IDA分析错了 分析错误后,删除函数 创建函数 操…

【Linux】多线程1——线程概念与线程控制

文章目录 1. 线程概念什么是线程Linux中的线程线程的优点线程的缺点线程的独立资源和共享资源 2. 线程控制Linux的pthread库用户级线程 📝 个人主页 :超人不会飞)📑 本文收录专栏:《Linux》💭 如果本文对您有帮助&…

无脑入门pytorch系列(三)—— nn.Linear

本系列教程适用于没有任何pytorch的同学(简单的python语法还是要的),从代码的表层出发挖掘代码的深层含义,理解具体的意思和内涵。pytorch的很多函数看着非常简单,但是其中包含了很多内容,不了解其中的意思…

SpringBoot复习:(46)全局的bean懒加载是怎么实现的?

在application.properties中配置: spring.main.lazy-initializationtrue在运行SpringApplication的run方法时,代码如下: 其中调用了prepareContext,prepareContext代码如下: 当在配置文件中配置了spring.main.lazy-initializat…

JavaScript实现在线Excel的附件上传与下载

摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 在本地使用Excel时,经常会有需要在Excel中添加一些附件文件的需求&am…

Clickhouse基于文件复制写入

背景 目前clickhouse社区对于数据的写入主要基于文件本地表、分布式表方式为主,但缺乏大批量快速写入场景下的数据写入方式,本文提供了一种基于clickhouse local 客户端工具分布式处理hdfs数据表文件,并将clickhouse以文件复制的方式完成写入…

解决并发冲突:Java实现MySQL数据锁定策略

在并发环境下,多个线程同时对MySQL数据库进行读写操作可能会导致数据冲突和不一致的问题。为了解决这些并发冲突,我们可以采用数据锁定策略来保证数据的一致性和完整性。下面将介绍如何使用Java实现MySQL数据锁定策略,以及相关的注意事项和最…

开源低代码平台Openblocks

网友 HankMeng 想看低代码工具,正好手上有一个; 什么是 Openblocks ? Openblocks 是一个开发人员友好的开源低代码平台,可在几分钟内构建内部应用程序。 传统上,构建内部应用程序需要复杂的前端和后端交互,…

如何保证微信小游戏存档不丢失?

引言 微信小游戏的兴起为玩家提供了一个轻松便捷的娱乐方式,然而,存档丢失问题一直以来都是开发者和玩家关注的焦点。为了确保玩家的游戏体验和投入能够得到充分的保障,开发团队需要采取一系列方法来保障微信小游戏存档不丢失。本文将介绍一…

学习笔记十五:基于YUM文件运行POD应用

基于YUM文件运行POD应用 通过资源清单文件创建第一个Pod更新资源清单文件查看pod是否创建成功查看pod的ip和pod调度到哪个节点上假如pod里有多个容器,进入到pod里的指定容器查看pod详细信息查看pod具有哪些标签:删除pod通过kubectl run创建Pod Pod资源清…

word之插入尾注+快速回到刚才编辑的地方

1-插入尾注 在编辑文档时,经常需要对一段话插入一段描述或者附件链接等,使用脚注经常因占用篇幅较大导致文档页面内容杂乱,这事可以使用快捷键 ControlaltD 即可在 整个行文的末尾插入尾注,这样文章整体干净整洁,需…

【枚举边+MST+组合计数】CF1857G

Problem - 1857G - Codeforces 题意: 思路: 首先观察一下样例: 可以发现对于每一对点,贡献是 s - 这对点对应的环的最大边 1 那么这样就有了 n^2 的做法 然后,根据惯用套路,枚举树上的点对问题可以转…

Prometheus的搭建与使用

一、安装Prometheus 官网下载地址:Download | Prometheus 解压:tar -zxvf prometheus-2.19.2.linux-amd64.tar.gz重命名: mv prometheus-2.19.2.linux-amd64 /home/prometheus进入对应目录: cd /home/prometheus查看配置文件&am…

浅析市面电商CRM系统|排单系统存在的不足

笔者做CRM尤其是电商CRM系统7年,相信我的分享能够帮助大家对电商CRM有个清晰的认知。 系统本身是用来提升效率的,针对不少电商卖家或服务商,都有使用CRM系统来管理粉丝链接与营销、销售推广等环节,来实现完整的CRM链路。尤其是在当…

OpenCV-Python中的图像处理-傅里叶变换

OpenCV-Python中的图像处理-傅里叶变换 傅里叶变换Numpy中的傅里叶变换Numpy中的傅里叶逆变换OpenCV中的傅里叶变换OpenCV中的傅里叶逆变换 DFT的性能优化不同滤波算子傅里叶变换对比 傅里叶变换 傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用 2D 离散傅里叶变…

2308C++对称转移

原文 了解对称转移 协程组提供了个编写异步代码的绝妙方法,与同步代码一样.只需要在合适地点加上协待,编译器就会负责挂起协程,跨挂起点保留状态,并在操作完成后恢复协程. 但是,最初有个令人讨厌的限制,如果不小心,很容易导致栈溢出.如果想避免它,则必须引入额外同步成本,以…

Unity Spine帧事件

SpinePro中添加事件帧 首先 选中右上角的层级树 然后选择事件选项 最后在右下角看到 新建 点击它 新建一个事件 点击左上角的设置按钮 弹出编辑窗口 编辑窗口 在右上角 动画栏 可以切换对应的动画 点坐边的那个小灰点来切换 亮点代表当前动画 选中帧 添加事件 点击对应事件…