一、time 模块time模块是Python标准库中最基础、最常用的模块之一。它提供了各种处理时间的方法和函数,如获取当前时间、格式化时间、盘算时间差等。time模块大部分函数的底层实现是 C 语言库的时间处理函数。 1.1、获取时间相关函数1.1.1、time.time()函数时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,由于是基于Unix Timestamp,所以其所能表述的日期范围被限定在 1970 ~ 2038 之间。 获取当前的时间戳(从Unix纪元开始的秒数),返回一个浮点型数值。 [code]import time # 获取当前的时间戳(以秒为单元) print(time.time()) # 1724168591.386799 # 获取当前的纳秒级时间戳 print(time.time_ns()) # 1724168591386807429 # 将时间戳精确到毫秒然后四舍五入,分析:1秒=1000毫秒=1000000微秒=1000000000纳秒 print(round(time.time() * 1000)) # 1724168591387[/code]1.1.2、time.ctime()函数将时间戳转换为可读的字符串情势,如“Thu Aug 22 13:44:12 2024”。 [code]import time print(time.ctime()) # Thu Aug 22 13:44:12 2024[/code]1.1.3、time.gmtime()函数获取当前的时间,并将时间戳转换为UTC时区的时间,此方法返回的是一个时间元组。 struct_time时间元组,为结构化数据,共有九个元素。 [code]import time print(time.gmtime()) # time.struct_time(tm_year=2024, tm_mon=8, tm_mday=22, tm_hour=5, tm_min=46, tm_sec=5, tm_wday=3, tm_yday=235, tm_isdst=0)[/code]1.1.4、time.localtime([sec])函数获取当前的时间,并将时间戳转化成一个当地时区的struct_time,如果sec参数未输入,则以当前时间为转化标准。 [code]import time # 将时间戳通报给localtime函数得到时间元组 c_time = time.localtime(time.time()) print(c_time) # time.struct_time(tm_year=2024, tm_mon=8, tm_mday=21, tm_hour=11, tm_min=6, tm_sec=23, tm_wday=2, tm_yday=234, tm_isdst=0) # 直接调用localtime()函数也是可以得到时间元组 l_time = time.localtime() print(l_time) # time.struct_time(tm_year=2024, tm_mon=8, tm_mday=21, tm_hour=11, tm_min=6, tm_sec=23, tm_wday=2, tm_yday=234, tm_isdst=0)[/code]1.2、格式化时间相关函数1.2.1、time.asctime()函数最简单的获取可读的时间模式的函数是asctime()。 [code]import time c_time = time.localtime(time.time()) print(time.asctime(c_time)) # Wed Aug 21 11:19:14 2024 l_time = time.localtime() print(time.asctime(l_time)) # Wed Aug 21 11:19:14 2024[/code]1.2.2、time.strftime()函数strftime(format, time):将时间元组(struct_time对象)格式化为字符串,可以指定格式。 [code]import time formattime1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) print(formattime1) # 输出字符串格式的时间:2024-08-21 11:26:37 formattime2 = time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()) print(formattime2) # 输出字符串格式的时间:Wed Aug 21 11:26:37 2024[/code]1.2.3、time.strptime()函数strptime(date_string, format):将字符串解析为时间元组,可以指定格式。 [code]import time t1 = time.strptime("2024-03-11 10:45:55", "%Y-%m-%d %H:%M:%S") print(t1) # time.struct_time(tm_year=2024, tm_mon=3, tm_mday=11, tm_hour=10, tm_min=45, tm_sec=55, tm_wday=0, tm_yday=71, tm_isdst=-1)[/code]1.2.4、time.mktime() 函数time.mktime() :函数的参数是一个struct_time对象或完整的9位元组,表示当地时间,将该时间元组解析为一个时间戳。 [code]import time timestamp1 = time.mktime(time.localtime()) print(timestamp1) # 1724220894.0 timestamp2 = time.mktime(time.strptime("2023-03-11 09:35:11", "%Y-%m-%d %H:%M:%S")) print(timestamp2) # 1678498511.0[/code]二、datetime模块datetime模块是Python中处理日期和时间的高级模块,datetime模块是在time模块的基础上开辟的,是对time模块的增补和扩展,可以提供更精确和高效的时间处理功能,它提供了更加丰富和灵活的时间处理功能,支持更多的时间格式和时间操作,并且功能更加强盛。datetime模块提供了日期(date)、时间(time)、日期时间(datetime)等类型的操作。它也是基于C语言的时间库实现的。 datetime模块界说了下面这几个类: datetime.date:表示日期的类,有3个属性(year、month、day),可进行日期的加减运算。 datetime.time:表示时间的类,有4个属性(hour、minute、second、microsecond),可以进行时间的加减运算。 datetime.datetime:表示一个具体的日期时间,是date类和time类的结合体,具有date类和time类的全下属性和方法。 datetime.timedelta:表示时间隔断,即两个时间点之间的长度。 datetime.tzinfo:与时区有关的相关信息。 datetime.datetime_CAPI:日期时间对象C语言接口。 2.1、datetime.date类先容由于Python也是面向对象编程语言,所以针对类,就会有构造函数,该类的构造函数如下: class datetime.date(year, month, day): year: 表示年,范围[MINYEAR, MAXYEAR],即[1, 9999] month: 表示月,范围[1, 12] day:一月中第几天,最大值根据给定的year,month参数来决定。比方闰年2月份有29天 2.1.1、date对象所能表示的最大最小日期# 返回的是datetime.date类型的对象 [code]# 返回的是datetime.date类型的对象 import datetime print(datetime.date.max) # 9999-12-31 print(datetime.date.min) # 0001-01-01[/code]2.1.2、date.today() 函数# 返回一个当前当地日期的date类型的对象 [code]# 返回一个当前当地日期的date类型的对象 import datetime print(datetime.date.today()) # 2024-08-21[/code]2.1.3、date.fromtimestamp()函数# 根据给定的时间戳,返回一个date对象 [code]# 根据给定的时间戳,返回一个date对象 import time import datetime now = time.time() s = datetime.date.fromtimestamp(now) # 2024-08-21[/code]2.1.4、date.weekday()函数# 参数必须是一个date类型的对象,返回该日期是一周中的第几天。返回值是一个整型。星期一,返回0;星期二,返回1... [code]# 参数必须是一个date类型的对象,返回该日期是一周中的第几天。返回值是一个整型。星期一,返回0;星期二,返回1... import datetime s = datetime.date.today() # 输出:2024-08-21 d = datetime.date.weekday(s) # 输出:2[/code]2.1.5、date.isoweekday()函数# 该函数必要一个datetime.date类型的参数。返回weekday中的星期几,星期一,返回1;星期二,返回2;以此类推。 [code]# 该函数必要一个datetime.date类型的参数。返回weekday中的星期几,星期一,返回1;星期二,返回2;以此类推。 import datetime s = datetime.date.today() # 输出:2024-08-21 d = datetime.date.isoweekday(s) # 输出:3[/code]2.1.6、date.isocalendar()函数比方,2004 年的第一天是星期四,因此 ISO 2004 年的第一个星期开始于 2003 年 12 月 29 日星期一,竣事于 2004 年 1 月 4 日星期日 2.1.7、date.strftime(fmt)函数[code]# 返回自界说格式的时间字符串。fmt是自界说的时间格式 import datetime s = datetime.date.today() # 2024-08-21 d = s.strftime("%Y-%m-%d %H:%M:%S") # 2024-08-21 00:00:00[/code]2.1.8、date.replace(year, month, day)[code]# 生成一个新的日期对象 用参数指定的年,月,日取代原有对象中的属性。(原有对象仍保持不变) import datetime s = datetime.date.today() # 2024-08-21 d = s.replace(year=2017) # 2017-08-21[/code]2.2、datetime.time类先容待续~ 2.3、datetime.datetime类先容2.3.1、datetime.now()函数[code]# 返回一个表示当前当地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的当地时间。 from datetime import datetime # 获取当前日期时间 print(datetime.now()) # 2024-08-21 15:41:42.388216 # 获取当前时间 print(datetime.now().time()) # 15:41:42.388216 # 获取当前日期 print(datetime.now().date()) # 2024-08-21 # 获取当前时间元组 print(datetime.now().timetuple()) # time.struct_time(tm_year=2024, tm_mon=8, tm_mday=21, tm_hour=15, tm_min=41, tm_sec=42, tm_wday=2, tm_yday=234, tm_isdst=-1)[/code]2.3.2、datetime.strftime()函数datetime.strftime(datetime, format):将datetime对象格式化为字符串,可以指定格式。 [code]# 返回自界说格式的时间字符串。fmt是自界说的时间格式 from datetime import datetime now = datetime.now() print(now) # 2024-08-21 22:49:27.570491 print(now.strftime("%Y-%m-%d %H:%M:%S")) # 2024-08-21 22:49:27 print(now.strftime("%Y-%m-%d")) # 2024-08-21 print(now.strftime("%H:%M:%S")) # 22:49:27 # 如果我们想将01/09中的0给去掉该怎样实现呢?不同的操作系统实现方式不一样 print(now.strftime('%Y/%-m/%-d')) # Linux平台: 2024/8/21 print(now.strftime('%Y/%#m/%#d')) # Windows平台: 2024/8/21[/code]2.3.3、datetime.strptime()函数datetime.strptime(date_string, format):将字符串解析成datetime对象,可以指定格式。 [code]from datetime import datetime d = datetime.strptime("2018-10-08 09:00:00", "%Y-%m-%d %H:%M:%S") # 2018-10-08 09:00:00 print(type(d)) # <class 'datetime.datetime'>[/code]2.3.4、datetime.timestamp()函数[code]from datetime import datetime # 创建一个datetime对象,假设为2023年3月1日中午12点 dt = datetime(2023, 3, 1, 12, 0) # 将datetime对象转换为时间戳 timestamp = dt.timestamp() # 1677643200.0 # 获取当前时间的时间戳 print(datetime.now().timestamp()) # 1724343305.378539[/code]2.3.5、datetime.fromtimestamp()函数datetime.fromtimestamp(timestamp, tz=None):用于将Unix时间戳转换为datetime对象,其中timestamp是Unix时间戳,tz是时区信息(可选) [code]# 返回时间戳对应的当地日期时间 from datetime import datetime print(datetime.fromtimestamp(1724230448.0)) # 2024-08-21 16:54:08[/code]2.3.6、datetime.replace()函数替换日期时间的某个部分,返回新的datetime对象。 [code]# 替换部分日期时间 dt = datetime.datetime(2022, 10, 1, 12, 30, 45) new_dt = dt.replace(year=2023) print(new_dt)[/code]2.4、datetime.timedelta类先容timedelta对象代表两个时间之间的时间差,我们进行时间上的增减的时候就可以用timedelta实现,timedelta类可以很轻易地算出前几天或后几天的时刻,还可以查看第几周对应的时间,比方:timedelta(weeks=20) 20周将被主动转化为天数,前几天时刻,用减法,后几天时刻,则用当前时间加上timedelta(days=d, hours=h)。 2.4.1、两个date对象做差(相差多少天)[code]from datetime import date d1 = date(2018, 10, 18) # 构建日期对象 d2 = date(2017, 12, 31) # 构建日期对象 d3 = date.today() # 获取当天的日期 print((d1 - d2).days) # 291 print(d3 - d2) # 2425 days, 0:00:00 print(d3.__sub__(d2)) # 2425 days, 0:00:00[/code]2.4.2、两个datetime对象做差(相差多少秒)[code]from datetime import datetime time1 = datetime(2019, 1, 13, 12, 0, 0) # 构建日期时间对象 time2 = datetime.now() # 获取当前日期时间对象 # 盘算两个日期时间对象的时间差(以秒盘算) differtime = (time2 - time1).total_seconds() # 176881267.568535[/code]2.4.3、盘算未来和已往的时间timedelta取值(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0) 使用 days=1代表后一天,days=-1代表前一天,其他参数也一样。 [code]from datetime import datetime, timedelta now = datetime.now() print(now + timedelta(weeks=10)) # 十周之后 print(now + timedelta(days=10)) # 十天之后 print(now + timedelta(hours=10)) # 十小时之后 print(now + timedelta(minutes=10)) # 非常钟之后 print(now + timedelta(seconds=10)) # 十秒之后 print(now + timedelta(weeks=-10)) # 十周之前 print(now + timedelta(days=-10)) # 十天之前 print(now + timedelta(hours=-10)) # 十小时之前 print(now + timedelta(minutes=-10)) # 非常钟之前 print(now + timedelta(seconds=-10)) # 十秒之前[/code]三、Calendar模块calendar模块提供了一些与日历相关的函数和类。它包罗可打印的日历类,可以格式化周和月的天数,并将日历信息转换为不同的格式。根本上,calendar模块提供了一种将日期转换为特定格式的工具。它是纯Python的实现。 四、dateutil模块dateutil模块是由Gustavo Niemeyer在2003年编写而成的对日期时间操作的第三方模块,对Python内置的datetime模块进行扩展时区息争析。 dateutil库重要有两个模块:parser和rrule,其中parser可以将字符串解析成datetime,而rrule则是根据界说的规则来生成datetime dateutil模块特点: 能够盘算日期时间相对增量,比方下周、下个月、明年、每月的最后一周等 可以盘算两个给定日期和/或日期时间对象之间的相对增量 支持多种时区格式文件的解析,比方UTC时区、TZ时区等 支持包罗RFC字符串或其他任何字符串格式的通用日期时间解析 官方文档:https://labix.org/python-dateutil 安装:pip install python-dateutil 4.1、dateutil库常用模块dateutil库常用模块有三个:parser、rrule和relativedelta dateutil.parser:将字符串解析成datetime dateutil.rrule:将参数输出datetime.datetime格式的时间 dateutil.relativedelta:日期时间偏移量 4.1.1、dateutil.parser[code]from dateutil import parser # 没指定时间默认0点,没指定日期默认当天,没指定年份默认当年, 当年份放在前面时,只能按年月日的顺序 print(parser.parse('2024-08-08')) # 2024-08-08 00:00:00 print(parser.parse('2024-07-08 10:45:52')) # 2024-12-24 10:55:55 print(parser.parse('20241224105555')) # 2024-12-24 10:45:52 print(parser.parse('2024.10.10')) # 2024-10-10 00:00:00 print(parser.parse('2007/09/15')) # 2007-09-15 00:00:00 # fuzzy:开启模糊匹配,过滤无法辨认的时间日期字符 print(parser.parse('Today is 11-29 10:45, I feel good.', fuzzy=True)) # 2024-11-29 10:45:00 # 当只有月日时,parser会将分隔符前面的数字解析为月份,后面的为日, 当有年份时,在前面的月份超出范围时,会主动判断哪个是月哪个是日 # 11.29解析效果非常,11-29、11/29可正常解析 print(parser.parse('11-29')) # 2024-11-29 00:00:00 print(parser.parse('11/29/2023')) # 2023-11-29 00:00:00 # 当前面的月份超过12时,parser会主动辨认月和日 print(parser.parse('13/11/2023')) # 2023-11-29 00:00:00 # 当分隔符为逗号时,只有月日时,要把月放在后面 # 当分隔符为逗号时,有年份时,年份要放在后面,要把月放在前面 print(parser.parse('29,11')) # 2024-08-29 00:00:00 print(parser.parse('11,29,2024')) # 2024-11-29 00:00:00 # 辨认英文的月、日 print(parser.parse('November 29')) # 2024-11-29 00:00:00 print(parser.parse('November 1st')) # 2024-11-01 00:00:00 print(parser.parse('November 29 2023')) # 2023-11-29 00:00:00 print(parser.parse('2023 November29')) # 2023-11-29 00:00:00 print(parser.parse('11:45 AM')) # 2024-11-29 11:45:00[/code]4.1.2、dateutil.rrule()rrule.rrule(freq, dtstart, interval, wkst, count, until, by) freq:单元,可选的值为YEARLY、MONTHLY、WEEKLY、DAILY、HOURLY、MINUTELY、SECONDLY,即年月日周时分秒 dtstart、until:开始和竣事时间,时间格式datetime.datatime类型 interval:隔断 wkst:周开始时间 count:生产时间的个数 by:指定匹配的周期,比方,byweekday=(MO,TU):只有周一周二的匹配,取值如下: 4.1.3、dateutil.relativedelta()[code]from dateutil import parser, rrule, relativedelta # datetime.timedelta与relativedelta.relativedelta() from datetime import datetime, timedelta # timedelta仅支持:weeks、days、hours、minutes、seconds,不支持月、年 # datetime.timedelta()盘算上周 print(datetime.strftime(datetime.now() - timedelta(weeks=1), '%Y-%m-%d')) # 2024-08-20 # relativedelta.relativedelta()盘算上周 print(datetime.strftime(datetime.now() - relativedelta.relativedelta(weeks=1), "%Y-%m-%d")) # 2024-08-20 # 盘算上月初、盘算上N月初 print(datetime.strftime(datetime.now() - relativedelta.relativedelta(months=1), "%Y-%m-01")) # 2024-07-01 # 盘算上月末、盘算上N月末 print(datetime.strftime(datetime.strptime(datetime.now().strftime('%Y-%m-01'), '%Y-%m-%d') - relativedelta.relativedelta(days=1), '%Y-%m-%d')) # 2024-07-31[/code]附件附件1:中英文单词对照表中英文单词对照表
附件2:格式化时间参考表格式化时间参考表
到此这篇关于Python时间处理模块time和datetime详解的文章就先容到这了,更多相关模块time和datetime详解内容请搜索脚本之家以前的文章或继承浏览下面的相关文章渴望大家以后多多支持脚本之家! 来源:https://www.jb51.net/python/328257sxc.htm 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|手机版|小黑屋|梦想之都-俊月星空
( 粤ICP备18056059号 )|网站地图
GMT+8, 2025-7-1 18:43 , Processed in 0.032733 second(s), 19 queries .
Powered by Mxzdjyxk! X3.5
© 2001-2025 Discuz! Team.