Python:time与datetime

学习自:

 

(10条消息) Python的time和datetime的简单使用_慢行的蜗牛-CSDN博客

Python之 time 与 datetime模块 - 叶灵溪&叶仙樱 - 博客园

python time模块和datetime模块详解 - 苍松 - 博客园

datetime官方文档

Python 日期和时间 | 菜鸟教程

Python中有两个模块:timedatetime,分别是时间日期

time

三种时间表示方法

time模块用于时间操作,包括:

  • 时间表达;
  • 获取系统时间、时间的格式化输出;
  • 精确计时;

time模块中有3种时间表示方法:

  • timestamp:时间戳;基于1970.1.1 00:00:00的偏移值。浮点数;
  • struct_time类型:gmtime()localtime()可以将timestamp显示为struct_time()类型;
  • 格式化时间strftime()函数可以把struct_time()时间格式化显示。

struct_time

struct_time类型也叫结构化时间struct_time是一个tuple,其中一共9元素:(年,月,日,时,分,秒,第几周,第几天,夏令时),这九个元素都是int类型。

格式为:

复制代码
#访问时可以通过 t[ tm_xxx ]的形式访问每一项
tm_year tm_mon tm_mday tm_hour tm_min tm_sec tm_wday tm_yday tm_isdst
复制代码

 

我们用一段程序来说明上述三种时间:

import time

print(time.time()) #时间戳,float类型
print(time.strftime("%Y-%m-%d %X"))#格式化时间,string类型
print(time.localtime())#本地时区的struct_time
print(time.gmtime())#UTC时区的struct_time
1622900361.6924574
2021-06-05 21:39:21
time.struct_time(tm_year=2021, tm_mon=6, tm_mday=5, tm_hour=21, tm_min=39, tm_sec=21, tm_wday=5, tm_yday=156, tm_isdst=0)
time.struct_time(tm_year=2021, tm_mon=6, tm_mday=5, tm_hour=13, tm_min=39, tm_sec=21, tm_wday=5, tm_yday=156, tm_isdst=0)

格式化时间

格式化方式见下一段的第二部分的两个函数,这里要说明格式化的写法:

复制代码
%y 两位数的年份表示 (00-99)
%Y 四位数的年份表示 (0000-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 本地时间,13:22:44这种形式
%Z 当前时区名称
%% 转义%
复制代码

 三种时间的关系

  • timestamp:计算机认识的时间
  • struct_time:程序员处理的时间
  • 格式化时间:人类能看懂的时间

time模块的三类函数

1、时间获取:time()、ctime()、gmtime()

  • time.time():当前时间戳;浮点型
  • time.ctime():获取当前时间,并以易读的形式表示;String
  • time.gmtime():计算机可处理格式,即上文提到的struct_time类型

2、时间格式化:strftime()、strptime()

  • time.strftime( format  [ , struct_time ] ):根据参数把一个struct_timetuple转换为字符串;如果没有第二个参数,则默认返回当前时间
  • time.strptime( string [ , format ] ):与strftime相反,把字符串转换为struct_time并返回;这里的format缺省时为 "%a %b %H:%M:%S %Y"——周几 月 时:分:秒 年

3、程序计时:sleep()、perf_counter()

  • time.perf_counter():返回一个CPU级别的精准时间计时数,单位为;计数值不确定,连续调用取差值才有意义
  • time.sleep( s ):休眠s秒

三种时间的转化

 

 

 

复制代码
import time

print(time.time())

#timestamp -> struct_time
#localtime():将一个时间戳转换为本地的struct_time,参数缺省时默认转化当前时间
#gmtime(time_stamp):与localtime类似,不过是UTC时间下的struct_timeprint(time.time())
print(time.localtime())
print(time.localtime(1622906297.021401))

#struct_time -> timestamp
#mktime( struct_time )
print(time.localtime())


#struct_time -> format string
#strftime(format [,t]) 若t未指定,默认用time.localtime()
lt = time.localtime()
print(lt)
str_time = time.strftime("%Y-%m-%d %X")
print(str_time)

#format string -> struct_time
#strptime(str_time , format)
#若format缺省,默认是"%a %b %d %H:%M:%S %Y"
st = time.strptime(str_time,"%Y-%m-%d %X") print(st)
复制代码

 

 

 虽然Timestamp和任意格式化时间字符串间不存在转化方式,但是却存在向某一特定格式时间字符串的转化函数,这个特定格式就是“%a %b %d %H %M %S %Y”——“星期几 月 日 时 分 秒 年”,即我们在上文所说的strptime函数的默认格式

import time
#asctime( [struct_time] ):将一个表示时间的tuple或者struct_time表示为指定格式的时间字符串
#如果参数缺省,则默认用time.localtime()
str = time.asctime()#Sat Jun  5 23:48:44 2021

#cstime( [timestamp] ):把一个timestamp转化为指定格式的时间
#缺省时,将使用time.time()作为参数
str = time.ctime(time.time())#Sat Jun  5 23:48:44 2021

 

DateTime

datetime是Python中常用的时间模块,主要是输出格式化时间提取属性的功能。

datetime中的类

datetime.date 日期,常用属性有:year、month、day
datetime.time 时间,常用属性有:hour、minute、second、microsecond
datetime.datetime 日期时间
datetime.timedelta 两个date、time、datetime间的时间间隔,单位可达μs
datetime.tzinfo 时区相关信息对象的抽象基类。它由datetime和time类使用,以提供自定义时间调账
datetime.timezone 实现tzinfo的类,表示与UTC的固定偏移量

datetime.datetime

  • datetime.datetime.now():返回系统的当前时期
  • datetime.datetime.now().date():返回当前日期
  • datetime.datetime.now().time():返回当前时间
  • datetime.datetime.ctime(datetime/date/time):将date、time、datetime转化为str类型
  • datetime.datetime.now().strftime('%Y-%m-%d %H:%M%S'):跟ctime类似,datetime中的各种类型转化为字符串
  • datetime.datetime.strptime( str , format ):将str转化为指定格式的datetime类型

 格式化方式与time类似,只是多了一个%f表示微秒

 datetime.timedelta

该类用于表示两个不同时间之间的差值。如果使用time模块对时间进行算数运算,只能将格式化strstruct_time先转换为timestamp,然后对该timestamp加减n秒,最后再转换为struct_time格式化str,这显然很不方便。而datetime.timedelta类可以让我们方便地对date、time、datetime对象做算术运算,而且两个时间之间的差值也更容易控制。

使用方法datetime.timedelta()添加参数,可以计算任意时间前的datetime

import datetime

timeapp = datetime.datetime.now().date()
delta = datetime.timedelta(days=300)#计算300天前的时期

print(type(timeapp))
print(timeapp)
print(timeapp - delta)
<class 'datetime.date'>
2021-06-06
2020-08-10

timedelta()也接受多个参数,比如300d12h前的时间:

timeapp = datetime.datetime.now()
delta = datetime.timedelta(days=300,hours=12)
print(timeapp)
print(timeapp - delta)
2021-06-06 09:53:41.894628
2020-08-09 21:53:41.894628

计算间隔的总天数和秒数:

复制代码
import datetime

dlt=datetime.timedelta(days=1,hours=2)
day_dlt=dlt.days
second_delta=dlt.total_seconds()

print(day_dlt)
print(second_delta)

1
93600.0
复制代码

 

posted @   ShineLe  阅读(1057)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
历史上的今天:
2019-06-05 WPS:查看隐藏文字与分页符……
2019-06-05 WPS:从某一页开始编号,并且奇数页偶数页页眉页脚的页码位置不同
2019-06-05 WPS:为什么无法页眉页脚同前节(同前节是灰的)
点击右上角即可分享
微信分享提示