py基础之日期时间

py中处理日期时间有两个模块:time模块和datetime模块。

1:time模块:

使用time模块首先需要导入time模块:import time

什么是时间戳:

    时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

--time.time():

    time.time()函数返回当前时间戳--当前时间相对于1970,1,1号经过的总秒数。结果是一个浮点类型。

import time
print("当前时间戳:",time.time())
# 结果:1560177861.6676884

    time()函数返回值为时间戳,时间戳并不是我们想要的时间格式,它对我们有什么用?

    我们可以将时间戳转换为常规时间格式,除了转换常规时间格式外,时间戳还有其他用处,例如:

    

# 获得一段程序的执行时长,这也是我们经常使用的一个功能...
start_time=time.time()
sum=0
for i in range(1000000):
    sum += i
end_time=time.time()
print(sum)
print('程序执行用时:%f'%(end_time-start_time))
# 程序执行用时:0.290202

--如何将时间戳转换为标准的日期时间类型?

    --time.localtime():

    功能:把当前的时间戳转换为当地的时间元组。

    返回值:一个时间元组。例如:time.struct_time(tm_year=2019, tm_mon=6, tm_mday=9, tm_hour=23, tm_min=57, tm_sec=44, tm_wday=6, tm_yday=160, tm_isdst=0)

    --time.gmtime():

    功能:把当前时间转换为格林威治时间元组。

   返回值:一个时间元组。例如:time.struct_time(tm_year=2019, tm_mon=6, tm_mday=9, tm_hour=16, tm_min=0, tm_sec=51, tm_wday=6, tm_yday=160, tm_isdst=0)

    --时间元组:

    很多Python函数用一个元组装起来的9组数字处理时间:

     0-tm_year:年份
                1-tm_mon:月份(1-12)
                2-tm-mday:日(1-31)
                3-tm_hour:时(0-23)
                4-tm_min:分钟(0-59)
                5-tm_sec:秒(0-61)60或61是润秒
                6-tm_wday:一周的第几天(0-6)0是周一
                7-tm_yday:一年的第几日(1-366)
                8-tm_isdst:夏令时

--如何将时间元组转换为时间戳?

    --mktime(tupletime):

        功能:接受一个时间元组并返回时间戳。

        返回值:时间戳。

--格式化时间:

可以根据需求选取各种格式,但是最简单的获取可读的时间模式的函数是asctime():

    --1:time.asctime()/time.asctime(time.localtime())

        返回值:例如:Mon Jun 10 23:02:55 2019

    --2:time.ctime()/time.ctime(time.time())

        返回值:例如:Mon Jun 10 23:02:55 2019

    asctime()与ctime()的区别:两者吃的返回值完全一样,但asctime()函数的参数为时间元组,而ctime()函数的参数为时间戳。

--格式化日期:

可以通过time.strftime()函数来格式化日期:

    %Y:年
               %m:月
               %d:日
               %H:时
               %M:分
               %S:秒...

    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))

    注:通过time.strftime()参数字符串内不能有中文,否则会报错。

--暂停:

time.sleep(secs):推迟调用线程的运行,secs指秒数。简单的说就是程序运行到此处会暂停指定的秒数后再继续执行。

--小案例:

2008-08-08 08:08:08往后88888888s是那天?星期几?

1:构造日期元组
2:通过time.mktime()方法把指定日期转换为时间戳,然后通过localtime传入参数转换为时间元组
# 1:构造元组:
ztime=(2016,9,1,8,0,0,0,0,0)
# 2:将指定日期转换为时间戳
sjc=time.mktime(ztime)
sjc+=88888888
print('是:', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(sjc)))
print('是星期%d'%(time.localtime(sjc)[6]+1))

2:datetime模块:

datetime模块提供了以简单和复杂的方式操作日期和时间的类。虽然支持日期和时间算法,但实现的重点是有效的属性提取,用于输出格式和操作。使用datetime模块首先需要导入模块:import datetime

datetime模块包含:date,time,datetime,timeDelta(时间间隔)

--1:date:

    --datetime.date.today():

        功能:返回当前的日期。比如:2019-06-11

    --date具有3个实例属性(只读):year,month,day。

        通过三个属性可以获得具体的年,月,日:

import datetime
date=datetime.date.today()
print(date)
print("年:",date.year)
print("月:",date.month)
print("日:",date.day)
# 输出:
# 2019-06-11
# 年: 2019
# 月: 6
# 日: 11

--2:time:

    --datetime.time(h,m,s):

        功能:传入时分秒参数,构造一个时间。返回构造后的时间

    --time具有几个实例属性:hour,minute,second,microsecond(微秒)

time01=datetime.time(1,6,30)
print(time01)
print("时:",time01.hour)
print("分:",time01.minute)
print("秒:",time01.second)
print("微秒:",time01.microsecond)
# 输出:
# 01:06:30
# 时: 1
# 分: 6
# 秒: 30
# 微秒: 0

--3:datetime:

    --datetime.datetime.now():

        功能:返回当前的日期时间。

   --日期时间对象,常用的属性有year,month,day,hour,minute,second,microsecond:

datetime01=datetime.datetime.now()
print("日期时间:",datetime01)
print("年:",datetime01.year)
print("月",datetime01.month)
print("日",datetime01.day)
print("时:",datetime01.hour)
print("分:",datetime01.minute)
print("秒:",datetime01.second)
# 输出:
# 日期时间: 2019-06-11 11:41:47.420239
# 年: 2019
# 月 6
# 日 11
# 时: 11
# 分: 41
# 秒: 47

    --datetime转换为日期:

        datetime01.date()

    --datetime转换为时间:

        datetime01.time()

    --date和time组合成datetime:

newdate=datetime01.date()
# 转换为日期: 2019-06-11
newtime=datetime01.time()
# 转换为时间: 11:50:11.058045
newdatetime=datetime.datetime.combine(newdate,newtime)
print("组合后:",newdatetime)
# 组合后: 2019-06-11 11:50:53.961499

--4:timeDelta(时间间隔):

    timeDelta对象表示的持续时间,两个日期或时间之间的差。

    atetime.timedeltadays = 0seconds = 0microseconds = 0milliseconds = 0minutes = 0hours = 0weeks = 0 

    所有参数都是可选的,默认为0。参数可以是整数或浮点数,也可以是正数或负数。

delta01=datetime.date(2016,9,1)
delta02=datetime.date(2019,6,11)
print(delta01,"与",delta02,"相差:",(delta02-delta01).days,"天")
# 2016-09-01 与 2019-06-11 相差: 1013 天

--5:time和datetime转换:

    1:time转换为datetime:

        datetime.fromtimestamp(time01)

    2:datetime转换为time:

        datetime.timestamp(datetime01)

from time import time
from datetime import datetime
# time转datetime:
time01=time()
print("转换前:", time01)
print('转换后:', datetime.fromtimestamp(time01))

# datetime转time:
datetime01=datetime.today()
print('转换前:', datetime01)
print('转换后:', datetime.timestamp(datetime01))

--6:日期时间的运算:

from datetime import datetime
# 格式化两个时间
date01=datetime(2016,9,1,0,0,0,35)
date02=datetime(2019,6,10,21,49,55,5556)
print(date01)
print(date02)
# 求date01与date02相差多少天-->1013
print(abs(date01-date02).days)
# 求date01与date02相差多少秒--》
print(abs(date01-date02).seconds)
# 求date01与date02相差多少微秒
print(abs(date01-date02).microseconds)

print(date01.strftime('%Y-%m-%d %H:%M:%S'), date01.microsecond, "和",end="")
print(date02.strftime('%Y-%m-%d %H:%M:%S'),date02.microsecond, "相差", end="")
print(abs((date01-date02).days),"天",abs(date01-date02).seconds,"秒",abs(date01-date02).microseconds,"微秒")
# 结果:2016-09-01 00:00:00 35 和2019-06-10 21:49:55 5556 相差1013 天 78595 秒 5521 微秒

猜你喜欢

转载自blog.csdn.net/qq_41558265/article/details/91406626
今日推荐