欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python时间模块。

程序员文章站 2022-04-29 20:46:32
python中时间的表示方式 unix时间戳,字符串时间,格式化时间 时间模块有,time,datetime,calendar #time模块 时间关系转换图 #datetime模块 #datetime.timedelta #calendar模块 #一些习题 done。 ......

python中时间的表示方式 unix时间戳,字符串时间,格式化时间

时间模块有,time,datetime,calendar

#time模块

import time
#获取本地时间戳,返回浮点数
print(time.time())   #1566201346.1516223

#获取结构化时间
time.gmtime([时间戳])  ##,不传时间戳默认为当前utc时间
print(time.gmtime())   #time.struct_time(tm_year=2019, tm_mon=8, tm_mday=19, tm_hour=7, tm_min=56, tm_sec=39, tm_wday=0, tm_yday=231, tm_isdst=0)
time.localtime([时间戳])#不传时间戳默认为当前本地时间
print(time.localtime())   #time.struct_time(tm_year=2019, tm_mon=8, tm_mday=19, tm_hour=15, tm_min=58, tm_sec=53, tm_wday=0, tm_yday=231, tm_isdst=0)
#将结构化时间转为时间戳
time.mktime(结构化时间)
print(time.mktime(time.localtime()))   #1566201588.0

#字符串时间
#time.asctime([结构化时间])   #不传参默认值为time.localtime()
print(time.asctime(time.localtime()))   #mon aug 19 16:01:26 2019
time.ctime([时间戳])  #不传参默认值为time.time()
print(time.ctime())   #mon aug 19 16:08:18 2019

#结构化时间转换为字符串时间
#time.strftime('时间格式'[,结构化时间]),结构化时间默认值为time.localtime()
print(time.strftime('%y-%m-%d %h:%m:%s'))  #2019-08-19 16:11:47
print(time.strftime('%y-%m-%d %x'))   #2019-08-19 16:13:15

Python时间模块。Python时间模块。

#字符串时间转化为格式化时间
#time.strptime('字符串时间'[,时间格式])
#时间格默认值为  %a %b %d %h:%m:%s %y
#字符串时间必须和时间格式对应
print(time.strptime('thu jun 28  10:10:10 2018'))  #time.struct_time(tm_year=2018, tm_mon=6, tm_mday=28, tm_hour=10, tm_min=10, tm_sec=10, tm_wday=3, tm_yday=179, tm_isdst=-1)
print(time.strptime('2019-08-19  16:18:10','%y-%m-%d %h:%m:%s'))  #time.struct_time(tm_year=2019, tm_mon=8, tm_mday=19, tm_hour=16, tm_min=18, tm_sec=10, tm_wday=0, tm_yday=231, tm_isdst=-1)

#指定程序暂停运行时间
#time.sleep(secs):程序暂停运行指定的秒数
time.sleep(5)   #程序暂停运行五秒

时间关系转换图

Python时间模块。

 

 #datetime模块

相比于time模块,datetime模块的结构则更直观、更容易调用
datetime模块定义了5个类,分别是
datetime.date:表示日期的类
datetime.time:表示时间的类
datetime.datetime:表示日期时间的类
datetime.timedelta:表示时间间隔,即两个时间点的间隔
datetime.tzinfo:时区的相关信息
from datetime import datetime
#datetime.datetime (year, month, day, hour , minute , second)
#返回表示今天本地时间的datetime对象
print(datetime.today())   #2019-08-19 16:26:06.777756
#返回表示当前本地时间的datetime对象
print(datetime.now())   #2019-08-19 16:28:25.854710
#根据时间戮创建一个datetime对象
print(datetime.fromtimestamp(time.time())) #2019-08-19 16:29:44.365201

#datetime对象操作
dt = datetime.now()
print(dt.date())  #2019-08-19
print(dt.time())   #16:33:38.263579
#返回替换后的datetime对象
print(dt.replace(year=2022,month=9,day=10)) #2022-09-10 16:35:39.721526
#按指定格式返回datetime对象
print(dt.strftime('%y/%m/%d %h:%m:%s')) #2019/08/19 16:37:38

#datetime.timedelta

timedelta主要用来实现时间的运算
使用timedelta可以很方便的在日期上做天,小时,分钟,秒的时间计算,如果要计算月份则需要另外的办法
from datetime import datetime,timedelta

dt = datetime.now()
dt1 = dt + timedelta(days=-1)  #昨天
dt2 = dt - timedelta(days=1)    #昨天
dt3 = dt + timedelta(days=1)   #明天
dt4 = dt + timedelta(hours=10) #10小时后
print(dt1,dt2,dt3,dt4)
#2019-08-18 16:44:27.535715 2019-08-18 16:44:27.535715 2019-08-20 16:44:27.535715 2019-08-20 02:44:27.535715

print(dt + timedelta(days=10,hours=100,minutes=100,seconds=100,milliseconds=100,microseconds=100))
#2019-09-02 22:28:49.705085

#calendar模块

import calendar
#获取指定年份的日历字符串
print(calendar.calendar(2019))
#获取指定月份的日历字符串
print(calendar.month(2019,8))
 august 2019
mo tu we th fr sa su
          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
#以列表形式返回每个月的总天数
print(calendar.mdays)
#[0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
#返回指定月份的第一是周几以及每月的总天数
print(calendar.monthrange(2020,9))
(1, 30)

#一些习题

#第一题:打印出当前距2019年8月1日有多少天多少小时多少分多少秒
from datetime import datetime
import calendar
#两个日期之间的差为
cha=datetime(2019,8,1)-datetime.now()
# print(cha)
#相差的天数
days=cha.days
#方法一:
#将cha分割成列表
cha_list1=str(cha).split()
cha_list2=cha_list1[2].split(':')
# print(cha_list2)
print("相差%d天%d小时%d分%d秒"%(days,int(cha_list2[0]),int(cha_list2[1]),int(cha_list2[2][:2])))
#相差小时数

#方法二:
#所剩余秒数为
remain_seconds=cha.seconds
#print(remain_seconds)
#相差的小时数
hours=remain_seconds//3600
#相差的分钟数
minutes=remain_seconds%3600//60
#相差的秒数
seconds=remain_seconds%60
print("相差%d天%d小时%d分%d秒"%(days,hours,minutes,seconds))

#输出
相差-19天6小时54分8秒
相差-19天6小时54分8秒
#第二题:打印出20个月之后的日期
#当前的时间为
#cur=datetime.now()
def getdate(cur,m):
    #当前年
    year=cur.year
    #当前月
    month=cur.month
    #当前日
    day=cur.day

    #print(year,month,day)
    #算出20个月的year month  day
    #总的月数
    total_month=m+month
    #需要增加的年数
    y_plus=total_month//12

    #新的月份
    new_month=total_month%12   #0 1 2 .....11

    #判断新的月份为0的情况
    if new_month==0:
        y_plus-=1
        new_month=12

    #判断当前的天数是否大于新的月份的总天数,如果比新月份总天数大,则把月份加1,再算出新的天数
    #新月份的总天数
    mdays=29 if new_month==2 and calendar.isleap(year+y_plus) else calendar.mdays[new_month]
    if mdays<day:
        #new_month+=1
        #新的天数
        day=mdays

    #20个月之后的日期  2018
    new_date=cur.replace(year=year+y_plus,month=new_month,day=day)
    print(new_date)
    
    #输出
    2021-04-19
打印出现在时间(字符串)
print(datetime.today())   #2019-08-17 16:45:34.339610
print(datetime.now())     #2019-08-17 16:45:34.339609
print(datetime.now().strftime('%y-%m-%d %h:%m:%s')) #2019-08-21 12:26:19
打印出指定格式的日期  2018年5月7日 星期六 08:01:02
def get_week(w):
    if w=='1':
        week='星期一'
    elif w=='2':
        week='星期二'
    elif w=='3':
        week='星期三'
    elif w=='4':
        week='星期四'
    elif w=='5':
        week='星期五'
    elif w=='6':
        week='星期六'
    else:
        week='星期日'
    return week
    
# 字符串转换为格式化,拿到星期几
s_time=time.strptime('2018-05-07 08:01:02','%y-%m-%d %h:%m:%s')
w1=time.strftime("%w",s_time)
# 指定格式输出
print(time.strftime("%y{}%m{}%d{} {} %h:%m:%s",s_time).format('年','月','日',get_week(w1)))
###2018年05月07日 星期一 08:01:02
打印出当前距离指定时间差多少天,多少时,多少分,多少秒
from datetime import timedelta
def cha(year,month,day):
    a=datetime(year,month,day)-datetime.now()
    print('当前时间距%s年%s月%s日还有%s天%s时%s秒'%(year,month,day,a.days,a.seconds//3600,a.seconds%60))
cha(2021,3,1)##当前时间距2021年3月1日还有559天8时22秒
一、有一个人从2015-01-01开始过上了三天打渔两天晒网的日子,问今天该打渔还是晒网?明年的今天呢
from datetime import datetime
def dy_sw(year,month,day):
    dt = datetime(year,month,day)-datetime(2015,1,1)
    if dt.days%5<3:
        print('打渔')
    else:
        print('晒网')
dy_sw(2019,8,23)

#输出
打渔

done。