1 time 模块:
读取系统时钟当前时间;
在 time 模块中,time.time()和 time.sleep()函数是最有用的模块。
1.1 time.time()
time.time()函数返回自1970 年 1 月 1 日 0 点以来的秒数,是一个浮点值,这个数字称为 UNIX 纪元时间戳。
1 2 3 | In [ 2 ]: time.time() Out[ 2 ]: 1504746354.671471 |
1.2 time.sleep()
如果需要让程序暂停一下,就调用 time.sleep()函数,并传入希望程序暂停的秒数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | In [ 5 ]: for i in range ( 3 ): ...: print ( 'stop 2s' ) ...: time.sleep( 2 ) ...: print ( 'stop 2s ok' ) ...: stop 2s stop 2s ok stop 2s stop 2s ok stop 2s stop 2s ok 为了让这些浮点值更易于处理,可以用 Python 内置的 round ()函数将它们缩短,该函数按照指定的精度四舍五入到一个浮点数。 In [ 12 ]: round ( 1504746842.804046 , 3 ) Out[ 12 ]: 1504746842.804 In [ 13 ]: round ( 1504746842.804046 ) Out[ 13 ]: 1504746843.0 |
2 datetime 模块
time 模块用于取得 Unix 纪元时间戳,并加以处理。但是,如果以更方便的格式显示日期,或对日期进行算术运算(例如,搞清楚 205 天前是什么日期,或 123天后是什么日期),就应该使用 datetime 模块。
datetime 模块有自己的datetime 数据类型。datetime 值表示一个特定的时刻。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | In [ 15 ]: import datetime In [ 16 ]: datetime.datetime.now() Out[ 16 ]: datetime.datetime( 2017 , 9 , 7 , 9 , 18 , 13 , 519043 ) In [ 17 ]: now = datetime.datetime.now() In [ 18 ]: now Out[ 18 ]: datetime.datetime( 2017 , 9 , 7 , 9 , 19 , 10 , 745992 ) In [ 19 ]: now.year,now.month,now.day Out[ 19 ]: ( 2017 , 9 , 7 ) In [ 20 ]: now.hour,now.minute,now.second Out[ 20 ]: ( 9 , 19 , 10 ) In [ 23 ]: dt = datetime.datetime( 2017 , 9 , 9 , 10 , 30 , 00 ) In [ 24 ]: dt Out[ 24 ]: datetime.datetime( 2017 , 9 , 9 , 10 , 30 ) |
2.1 datetime.datetime.now()
调用 datetime.datetime.now()返回一个 datetime 对象,表示当前的日期和时
间,根据你的计算机的时钟。这个对象包含当前时刻的年、月、日、时、分、秒和微秒。也可以利用 datetime.datetime()函数,向它传入代表年、月、日、时、分、秒的整数,得到特定时刻的 datetime 对象。这些整数将保存在 datetime 对象的 year、month、day、hour、minute 和 second属性中。
2.2 日期时间转换
Unix 纪元时间戳可以通过 datetime.datetime.fromtimestamp(),转换为 datetime对象。datetime 对象的日期和时间将根据本地时区转换。
1 2 3 | In [ 26 ]: datetime.datetime.fromtimestamp(time.time()) Out[ 26 ]: datetime.datetime( 2017 , 9 , 7 , 9 , 25 , 31 , 96888 ) |
表达式 datetime.datetime.now()和 datetime.datetime.fromtimestamp(time.time())做的事情相同,它们都返回当前时刻的 datetime 对象。
2.3 日期时间比较
datetime 对象可以用比较操作符进行比较,弄清楚谁在前面。后面的datetime 对象是“更大”的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | In [ 30 ]: oct31_2015 = datetime.datetime( 2015 , 10 , 31 , 0 , 0 , 0 ) In [ 31 ]: oct31_2016 = datetime.datetime( 2016 , 10 , 31 , 0 , 0 , 0 ) In [ 32 ]: oct2015_31 = datetime.datetime( 2015 , 10 , 31 , 0 , 0 , 0 ) In [ 33 ]: oct31_2015 = = oct2015_31 Out[ 33 ]: True In [ 34 ]: oct31_2016 > oct31_2015 Out[ 34 ]: True In [ 35 ]: oct31_2016 < oct31_2015 Out[ 35 ]: False |
2.3 timedelta 数据类型
datetime 模块还提供了 timedelta 数据类型,它表示一段时间,而不是一个时刻。
要创建 timedelta 对象,就用 datetime.timedelta()函数。datetime.timedelta()函数接受关键字参数 weeks、days、hours、minutes、seconds、milliseconds 和 microseconds。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | In [ 37 ]: delta = datetime.timedelta(days = 1 , hours = 10 , minutes = 9 , seconds = 8 ) In [ 38 ]: delta Out[ 38 ]: datetime.timedelta( 1 , 36548 ) timedelta 对象拥有的总时间以天、秒、微秒来表示。这些数字分别保存在 days、seconds 和 microseconds 属性中。 In [ 39 ]: delta.days,delta.seconds,delta.microseconds Out[ 39 ]: ( 1 , 36548 , 0 ) total_seconds()方法返回只以秒表示的时间。 In [ 42 ]: delta.total_seconds() Out[ 42 ]: 122948.0 将一个 timedelta 对象传入 str (),将返回格式良好的、人类可读的字符串表示。 In [ 43 ]: str (delta) Out[ 43 ]: '1 day, 10:09:08' |
2.4 日期时间运算
算术运算符可以用于对 datetime 值进行日期运算。例如,要计算今天之后 1000天的日期。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | In [ 44 ]: dt = datetime.datetime.now() In [ 45 ]: dt Out[ 45 ]: datetime.datetime( 2017 , 9 , 7 , 9 , 43 , 47 , 240307 ) In [ 46 ]: thousandDays = datetime.timedelta(days = 1000 ) In [ 47 ]: dt + thousandDays Out[ 47 ]: datetime.datetime( 2020 , 6 , 3 , 9 , 43 , 47 , 240307 ) |
利用+和-运算符,timedelta 对象与 datetime 对象或其他 timedelta 对象相加或相减。利用*和/运算符,timedelta 对象可以乘以或除以整数或浮点数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | In [ 48 ]: aboutThirtyYears = datetime.timedelta(days = 365 * 30 ) In [ 49 ]: dt Out[ 49 ]: datetime.datetime( 2017 , 9 , 7 , 9 , 43 , 47 , 240307 ) In [ 50 ]: dt - aboutThirtyYears Out[ 50 ]: datetime.datetime( 1987 , 9 , 15 , 9 , 43 , 47 , 240307 ) In [ 51 ]: dt - ( 2 * aboutThirtyYears) Out[ 51 ]: datetime.datetime( 1957 , 9 , 22 , 9 , 43 , 47 , 240307 ) |
2.5 将 datetime 对象转换为字符串
Unix 纪元时间戳和 datetime 对象对人类来说都不是很友好可读。利用 strftime()方
法,可以将datetime 对象显示为字符串。(strftime()函数名中的f 表示格式,format)。
该的 strftime()方法使用的指令类似于 Python 的字符串格式化。
向 strftime()传入一个定制的格式字符串,其中包含格式化指定(以及任何需要的斜线、冒号等),strftime()将返回一个格式化的字符串,表示 datetime 对象的信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | In [ 52 ]: dt Out[ 52 ]: datetime.datetime( 2017 , 9 , 7 , 9 , 43 , 47 , 240307 ) In [ 53 ]: dt.strftime( '%Y/%m/%d %H:%M:%S' ) Out[ 53 ]: '2017/09/07 09:43:47' In [ 54 ]: dt.strftime( '%I:%M %p' ) Out[ 54 ]: '09:43 AM' In [ 55 ]: dt.strftime( "%B of '%y" ) Out[ 55 ]: "September of '17" |
2.6 将字符串转换成 datetime 对象
strptime()函数与strftime()方法相反。定制的格式字符串使用相同的指令,像 strftime()一样。必须将格式字符串传入 strptime(),这样它就知道如何解析和理解日期字符串(strptime()函数名中 p 表示解析,parse)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | In [ 56 ]: datetime.datetime.strptime( "September of '17" , "%B of '%y" ) Out[ 56 ]: datetime.datetime( 2017 , 9 , 1 , 0 , 0 ) In [ 57 ]: datetime.datetime.strptime( '09:43 AM' , '%I:%M %p' ) Out[ 57 ]: datetime.datetime( 1900 , 1 , 1 , 9 , 43 ) In [ 58 ]: datetime.datetime.strptime( '2017/09/07 09:43:47' , '%Y/%m/%d %H:%M:%S' ) Out[ 58 ]: datetime.datetime( 2017 , 9 , 7 , 9 , 43 , 47 ) |
3 总结:Python 的时间函数
3.1 时间数据类型
在 Python 中,日期和时间可能涉及好几种不同的数据类型和函数。下面回顾表示时间的 3 种不同类型的值:
- Unix 纪元时间戳(time 模块中使用)是一个浮点值或整型值,表示自 1970 年1 月 1 日午夜 0 点(UTC)以来的秒数。
- datetime 对象(属于 datetime 模块)包含一些整型值,保存在 year、month、day、
- hour、minute 和 second 等属性中。
- timedelta 对象(属于 datetime 模块)表示的一段时间,而不是一个特定的时刻。
3.2 函数返回值
下面回顾了时间函数及其参数和返回值:
- time.time()函数返回一个浮点值,表示当前时刻的 Unix 纪元时间戳。
- time.sleep(seconds)函数让程序暂停 seconds 参数指定的秒数。
- datetime.datetime(year, month, day, hour, minute, second)函数返回参数指定的时刻的 datetime 对象。如果没有提供 hour、minute 或 second 参数,它们默认为 0。
- datetime.datetime.now()函数返回当前时刻的 datetime 对象。
- datetime.datetime.fromtimestamp(epoch)函数返回 epoch 时间戳参数表示的时刻的 datetime 对象。
- datetime.timedelta(weeks, days, hours, minutes, seconds, milliseconds, microseconds)函数返回一个表示一段时间的 timedelta 对象。该函数的关键字参数都是可选的,不包括 month 或 year。
- total_seconds()方法用于 timedelta 对象,返回 timedelta 对象表示的秒数。
- strftime(format)方法返回一个字符串,用 format 字符串中的定制格式来表示
- datetime 对象表示的时间。详细格式参见表 15-1。
- datetime.datetime.strptime(time_string, format)函数返回一个 datetime 对象,它的时刻由time_string 指定,利用format 字符串参数来解析。详细格式参见表 15-1。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2016-09-07 Oracle:shared memory realm does not exist
2016-09-07 Oracle判断语句集合(转载)