python基础模块之datetime

python基础模块之datetime

话说要学习一个python模块的基本方法是通过dir(module_name)方法,直接把该模块的子模块,类,方法,属性都展示出来了。不过有时候这最基本的东西往往只提供最基本的内容,回答很官方,很严谨,很没漏洞,也很没用。咱们以datetime模块为例 顺便了解一下这个基础的dir()方法。

>>> import datetime
>>> dir(datetime)
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo']

看到了吧,看完之后还是一脸懵逼,哪个是类,哪个是方法,哪个是属性,怎么使用??可以看到dir(datetime)后冲在最前面的两个常MAXYEAR:9999,MINYEAR:1 基本用不上吧,那就不赘述。感觉不好用。。好了,回归正题,咱们今天聊datetime模块,datetime模块有不少类:date,time,datetime,datetime_CAPI,timedelta,tzinfo,timezone,常用的还是那几个,date,time,datetime再勉强加个timedelta吧。这四个类咱下面one-by-one。

date类

提到类,那就要提类的对象 ,date类的对象 就是定位到年月日,即:date(year,month,day) 使用方法如下:

>>> a=datetime.date(2019,2,3)
>>> a.year
2019
>>> print(a)
2019-02-03

这里随便给个对象名a ,然后就可以通过对象名去调用年月日属性。
平时用最多的还是当前日期,那可以使用date类的today()方法。

>>> b=datetime.date.today()
>>> b.year
2020
>>> b.month
3
>>> print(b)
2020-03-27

date类常用方法
前面介绍了today()方法使用,下面这些方法很类似,都是些比较来比较去的方法,分别是

  __eq__、__ge__、__gt__、__le__、__lt__、__ne__
  #__sub__和__rsub__  这两个方法用来比较两个日期相差多少天

,其分别表示==、>=、>、<=、<、!=,返回的结果是True或False。(e:equal,g:greater l:less n:not t:than) 举个栗子:

>>> a=datetime.date(2019,3,2)
>>> b=datetime.date(2018,6,6)
>>> a.__ge__(b)
True
>>> a.__sub__(b)
datetime.timedelta(days=269)
>>> print(a.__sub__(b))
269 days, 0:00:00

然后就是输出格式的问题,日期是用哪个样式显示,有三种方法,format__和strftime方法差不多,第三种是输出ctime格式,最常用的还是第一种__format,代码如下:

>>> a.__format__('%y%m%d')
'190302'
>>> a.__format__('%Y%m%d')
'20190302
#小y两位,大Y四位
>>> a.__format__('%Y-%m-%d')
'2019-03-02'
>>> a.strftime('%Y-%m-%d')
'2019-03-02'
>>> a.ctime()
'Sat Mar  2 00:00:00 2019'
#多出个Sat, 周六

time模块
time这个模块最常接触的就是计算程序运行时间吧 :start_time=time.time(),测试代码块,然后end_time= time.time() ,end_time - start_time即为程序执行时间。
粗略的使用一下time()

>>> import time
>>> time.time()
1585876909.852065

1585876909.852065?得出一串数字,这就是传说中的时间戳(timestamp)从1970年1月1日00时00分00秒到现在的浮点秒数,可是我想要的格式是这个样式的呀2019-02-03,那就需要做一些转换,转换的中间有个桥梁,叫struct_time,从timestamp转换到struct_time有几个函数可以使用,localtime(),gmtime():

>>> time.localtime()
time.struct_time(tm_year=2020, tm_mon=4, tm_mday=3, tm_hour=9, tm_min=42, tm_sec=55, tm_wday=4, tm_yday=94, tm_isdst=0)
>>> time.gmtime()
time.struct_time(tm_year=2020, tm_mon=4, tm_mday=3, tm_hour=1, tm_min=43, tm_sec=1, tm_wday=4, tm_yday=94, tm_isdst=0)

如果想从struct_time转换成timestamp,可以使用mktime(struct_time),mktime()函数的参数为struct_time:

>>> time.mktime(time.localtime())
1585878366.0

然后再通过strftime()函数将stuct_time转换至format格式时间,这个格式根据需要自行调节:

>>> time.strftime('%Y-%m-%d',time.localtime())
'2020-04-03'

除了这种样式,还有很多参数很多样式,
%a 星期几的简写;
%A 星期几的全称;
%b 月分的简写;
%B 月份的全称;
%c 标准的日期的时间串;
%C 年份的后两位数字;
%d 十进制表示的每月的第几天;
%D 月/天/年;
%e 在两字符域中,十进制表示的每月的第几天;
%F 年-月-日;
%g 年份的后两位数字,使用基于周的年;
%G 年分,使用基于周的年;
%h 简写的月份名;
%H 24小时制的小时;
%I 12小时制的小时;
%j 十进制表示的每年的第几天;
%m 十进制表示的月份;
%M 十时制表示的分钟数;
%n 新行符;
%p 本地的AM或PM的等价显示;
%r 12小时的时间;
%R 显示小时和分钟:hh:mm;
%S 十进制的秒数;
%t 水平制表符;
%T 显示时分秒:hh:mm:ss;
%u 每周的第几天,星期一为第一天 (值从0到6,星期一为0);
%U 第年的第几周,把星期日做为第一天(值从0到53);
%V 每年的第几周,使用基于周的年;
%w 十进制表示的星期几(值从0到6,星期天为0);
%W 每年的第几周,把星期一做为第一天(值从0到53);
%x 标准的日期串;
%X 标准的时间串;
%y 不带世纪的十进制年份(值从0到99);
%Y 带世纪部分的十制年份;
%z,%Z 时区名称,如果不能得到时区名称则返回空字符;
%% 百分号;

>>> time.strftime('%x',time.localtime())
'04/03/20'
>>> time.strftime('%X',time.localtime())
'10:21:51'
>>> time.strftime('%x %X',time.localtime())
'04/03/20 10:22:08'
>>> time.strftime('%x %a %X',time.localtime())
'04/03/20 Fri 10:22:30'
>>> time.strftime('%F %a %X',time.localtime())
'2020-04-03 Fri 10:22:57'

就这样各种样式,各种搭配,随便玩。对了,还要补充一个函数那就是sleep(),这个函数用法简单,参数是几秒,程序就暂停几秒,譬如time.sleep(5),暂停5秒。

datetime类
学习完上面date类和time类,datetime顾名思义就是把前面两个类糅合到一起,datetime 对象是一个包含了来自 date 对象和 time 对象所有信息的单一对象。
咱们先看其类方法相关用法:

>>> import datetime
>>> datetime.datetime.now()#返回当前的本地 datetime
datetime.datetime(2020, 4, 8, 8, 25, 22, 398950)
>>> datetime.datetime.utcnow()#返回当前UTC时间
datetime.datetime(2020, 4, 8, 0, 25, 53, 287092)
>>> import time
>>> datetime.datetime.fromtimestamp(time.time())#将时间戳转为 datetime 类型的时间,该函数还有一个参数tz,为时区参数。
datetime.datetime(2020, 4, 8, 8, 28, 33, 141970)
>>> datetime.datetime.fromisoformat('2018-09-22 16:28:22.666')#将一个日期字符串转换成datetime类型的时间
datetime.datetime(2018, 9, 22, 16, 28, 22, 666000)
>>> datetime.datetime.strptime('2018-09-22 16:28:22', '%Y-%m-%d %H:%M:%S')
datetime.datetime(2018, 9, 22, 16, 28, 22)

接下来是datetime 实例方法即datetime对象调用的方法。

>>> dt =datetime.datetime(2020,4,8,0,0,0)#构造对象
>>> dt
datetime.datetime(2020, 4, 8, 0, 0)
>>> dt.date()#返回date
datetime.date(2020, 4, 8)
>>> dt.time()#返回time
datetime.time(0, 0)
>>> dt.replace(2018)#替换对象日期
datetime.datetime(2018, 4, 8, 0, 0)
>>> dt.timetuple()#返回对象时间元组
time.struct_time(tm_year=2020, tm_mon=4, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=99, tm_isdst=-1)
>>> dt.timestamp()#返回对象时间戳
1586275200.0
>>> dt.weekday()#返回对象星期几  0代表周一开始算 
2
>>> dt.strftime('%Y-%m-%d %X') #返回格式化时间
'2020-04-08 00:00:00'

timedelta类
timedelta 类用来描述一个时间段,可以把它理解成成两个时间点之间的时间间隔。timedelta 对象之间,以及 timedelta 对象和 datetime 对象之间,可以做加减运算。上代码:

>>> from datetime import timedelta
>>> delta = timedelta(days=3, hours=6, minutes=9)
>>> now = datetime.datetime.now()
>>> delta
datetime.timedelta(days=3, seconds=22140)
>>> now
datetime.datetime(2020, 4, 8, 10, 3, 11, 412538)
>>> now - delta
datetime.datetime(2020, 4, 5, 3, 54, 11, 412538)
>>> new_year = datetime(now.year + 1,1,1,0,0,0)#计算当前距离元旦还有多少秒
>>> delta = new_year - now
>>> delta.total_seconds()
23118064.240215

长篇大论总算告一段落。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值