时间显示
😇收获
format的用法 {:0>2d} 以两位显示,不足右边补零
time.gmtime(秒数) :根据秒数(从1970年1月1日至现在的秒数) 转化为当前时间:
time.struct_time(tm_year=2033, tm_mon=5, tm_mday=18, tm_hour=0, tm_min=17, tm_sec=13, tm_wday=2, tm_yday=138, tm_isdst=0)
time.asctime(sec) 可见其转化为一个可读类型的字符串:Wed May 18 00:17:13 2033
sec = time.gmtime(n//1000) #可以根据输入的所给的秒数返回一个time.struct_time
time.asctime(sec) # 可将time.struct_time类型的转化为一个可读类型的字符串
解法一
求余表示剔除
# 时间显示
n = int(input())
n = n//1000 # 把毫秒转化为秒
n = n%86400 # 剔除掉完整一天以后所剩下的秒数
hour = int(n/3600) #小时
min = int(n%3600/60) #分钟
sec = int(n%3600%60) # 除去小时和分钟后所剩下的秒数
print("{:02d}:{:02d}:{:02d}".format(hour, min, sec))
解法2
# 利用时间函数
import time
n = int(input())
sec = time.gmtime(n//1000) # 根据秒数返回:time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=13, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
s = time.asctime(sec)
print(s) # 返回一个可读类型的字符串 Thu Jan 1 13:00:00 1970
print(s[11:19]) # 13:00:00 再作字符串的切割求出我们想要的时间格式
星期几
😇收获
datetime 模块的使用:s.weekday() 周几的判断 s.month 月份的判断 s.day 日期的判断
from datetime import datetime,timedelta
s = datetime(1949,10,1)
e = datetime(2012,10,1)
count = 0
while s<=e:
if s.weekday()==6 and s.month ==10 and s.day==1:
count += 1
s += timedelta(1)
print(count)
星期几
n = int(input())
m = int(input())
if (n+m)%7==0:
print(7)
else:
print((n+m)%7)
datetime 模块中 time模块的使用
time 模块只能用来表示时间,不能用来表示日期
import datetime
now_time = datetime.time(hour=16,minute=49,second=49)
print(now_time) #16:49:49
print(now_time.hour)
print(now_time.minute)
print(now_time.second)
高斯日记
# 他表示那天是高斯出生后的第几天
from datetime import datetime,timedelta
birth = datetime(1777,4,30)
date_time = birth + timedelta(8113-1)
print(str(date_time)[0:10])
注意:单独使用date的时候要完整的导入datetime模块
# 他表示那天是高斯出生后的第几天
from datetime import datetime,timedelta
import datetime
b = datetime.date(1777,4,30)
date_time = b + timedelta(days=8113-1)
print(date_time)
黑色星期五
from datetime import datetime,timedelta
year = int(input())
s = datetime(year,1,1)
e = datetime(year,12,31)
count = 0
while s<=e:
if s.isoweekday()==5 and s.day==13:
count += 1
s +=timedelta(1)
print(count)
calendar.weekday(2023,3,7) 返回给定的日期是星期几 0-6 表示周一到周天
import calendar
y = int(input())
count = 0
for i in range(1,13):
if calendar.weekday(y,i,13) == 4:
count = count + 1
print(count)
回文日期
😇收获
注意在运用日期模块时若没有指明循环结束的日期,可设9999年;
导入基本全部常用的时间模块:from datetime import *
回文日期的判断可以用字符串的反转
可以将时间模块的日期转化为字符串来进行切割取出字符来操作判断
想要输出较小满足条件的值的时候可以在循环外面加一个局部变量,用局部变量的真假来进行控制
日期类时间转化为字符串的方法:
1、isoformat()
2、str()字符串类型的强制转化
因为字符串本身是不可变的,故可以通过replace来间解删除
from datetime import *
n = input() #"20200202"
year = n[:4]
month = n[4:6]
day = n[6:]
s = date(int(year),int(month) , int(day))
e = date(9999,12,31)
flag = 0 # flag的作用:表示输出最小的回文日期,输出完成之后就将其赋值为真,然后结束循环
while s<=e:
s += timedelta(1)
da = s.isoformat().replace("-",'')
if da ==da[::-1]: # 回文日期的判断
if flag == 0:
print(da)
flag = 1
# ABABBABA型日期的判断
if da[0] ==da[-1] ==da[2]==da[-3] and da[1]==da[3]==da[-2]==da[-4]:
print(da)
break
判断是一年中的第几天
time.strptime() 函数根据指定的格式把一个时间字符串解析为时间元组。
time.strptime(string[, format]),传入string和format两个参数,分别是字符串和格式化字符串,返回的是struct_time
示例:
print(time.strptime("2020-12-10 10:45:00","%Y-%m-%d %H:%M:%S"))
输出
time.struct_time(tm_year=2020, tm_mon=12, tm_mday=10, tm_hour=10, tm_min=45, tm_sec=0, tm_wday=3, tm_yday=345, tm_isdst=-1)
第一个参数是字符串,后一个参数你自己定义的格式化字符串,注意前后的语句格式要保持一致
import time
date= input() #YYYY-MM-DD
ans = time.strptime(date,"%Y-%m-%d")
print(ans[-2]) # 将时间元组里面想要的东西取出来
时间元组里包含很多的有效信息:年月日、时分秒、 该年的第几天,这天是星期几
小结:
time.gimtime(秒数) ----快速的将秒数转化为一个时间元组
time.strptime(字符串,格式化的字符串)------快速将字符串转化为时间元组
要想求某年某月的第一天是星期几和该月有几天用calendar.monthrange(年份,月份)
>>> calendar.monthrange(2022,3)
(1, 31)
2022年3月的第一天是周二和该月有31天
timedelta(days=1,weeks=40,hours=23,minutes=50,seconds=9) # 注意每个都是以复数结尾
时间戳和datetime的互转
时间戳转datetime
datetime.fromtimestamp(秒数)
from datetime import datetime
time_seconds = 8885552
print(datetime.fromtimestamp(time_seconds))
1970-04-14 04:12:32
datetime转时间戳
datetime时间类.timestamp()
from datetime import datetime
t = datetime(2022,4,9) # 1970-04-24 13:56:01
print(t.timestamp())