【一】python中表示时间的三种方式
import time
res = time.time()
print(res, type(res))
res = time.strftime('%Y-%m-%d %X')
print(res, type(res))
res = time.struct_time('%Y-%m-%d %X')
print(res, type(res))
【二】time
(1)时间戳(计算机能够识别的时间)
- Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
- 时间戳在线转换网址:时间戳(Unix timestamp)转换工具
import time
res = time.time()
print(res, type(res))
res = time.gmtime(time.time())
print(res, type(res))
res = time.localtime(time.time())
print(res, type(res))
(2)格式化的时间字符串(人能够看懂的时间)
import time
res = time.strftime("%Y-%m-%d")
print(res, type(res))
res = time.strftime("%x %X")
print(res, type(res))
符号 |
含义 |
%y |
两位数 年份 |
%Y |
四位数 年份 |
%m |
两位数 月份 |
%d |
两位数 日期 |
%H |
24小时制 小时 |
%l |
12小时制 小时 |
%M |
分钟 |
%S |
秒 |
%a |
缩写英语 星期 |
%A |
全拼英语 星期 |
%b |
缩写英语 月份 |
%B |
全拼英语 月份 |
%c |
Wed Dec 20 15:34:36 2023 |
%j |
年内第几天 |
%p |
PM/AM |
%U |
星期天开始 年内第几个周 |
%w |
星期天开始 月内第几个周 |
%W |
星期一开始 年内第几个周 |
%x |
12/20/23 月/日/年 |
%X |
15:40:22 时:分:秒 |
%Z |
中国标准时间 当前时区的名称 |
(3)时间元组(结构化时间)(用来操作的时间)
import time
res = time.localtime()
print(res, type(res))
print(res.tm_min, type(res.tm_min))
print(res[0], type(res[0]))
索引(Index) |
属性(Attribute) |
值(Values) |
0 |
tm_year(年) |
2023 |
1 |
tm_mon(月) |
1 - 12 |
2 |
tm_mday(日) |
1 - 31 |
3 |
tm_hour(时) |
0 - 23 |
4 |
tm_min(分) |
0 - 59 |
5 |
tm_sec(秒) |
0 - 60 |
6 |
tm_wday(weekday) |
0 - 6(0表示周一) |
7 |
tm_yday(一年中的第几天) |
1 - 366 |
8 |
tm_isdst(是否是夏令时) |
默认为0 |
(4)三种时间之间的转换方式
import time
res_tuple = time.strptime("2023-12-30","%Y-%m-%d")
print(res_tuple, type(res_tuple))
res = time.strftime("%Y-%m%d", res_tuple)
print(res, type(res))
res = time.asctime(res_tuple)
print(res, type(res))
import time
res = time.gmtime(time.time())
print(res, type(res))
res = time.localtime(time.time())
print(res, type(res))
res = time.mktime(res)
print(res, type(res))
import time
res = time.ctime(time.time())
print(res, type(res))
【三】datetime
【1】自定义日期并格式化
import datetime
res = datetime.date(2012,12,21)
print(res, type(res))
【2】获取本地时间
(1)年月日
import datetime
res = datetime.date.today()
print(res, type(res))
print(res.year, type(res.year))
print(res.weekday(), type(res.weekday()))
print(res.isoweekday(), type(res.isoweekday()))
(2)年月日时分秒
- datetime.datetime.today() 不支持传递时区参数
- datetime.datetime.now() 支持传递时区参数
- datetime.datetime.now(datetime.timezone.utc) 北京时间
- datetime.datetime.utcnow() 北京时间
import datetime
res = datetime.datetime.today()
print(res, type(res))
print(res.year, type(res.year))
print(res.weekday(), type(res.weekday()))
print(res.isoweekday(), type(res.isoweekday()))
【3】时间差
(1)生成时间差
import datetime
day_delta = datetime.timedelta(weeks=2, days=2)
print(day_delta, type(day_delta))
(2)推迟时间
import datetime
day_delta = datetime.timedelta(weeks=2, days=2)
today = datetime.datetime.today()
print(f"今天日期:{today}")
print(f"16天后的日期:{today + day_delta}")
print(f"16天前的日期:{today - day_delta}")
(3)时间差对象和时间日期对象的关系
- 时间差对象 = 时间日期对象 - 时间日期对象
- 时间日期对象 = 时间日期对象 ± 时间差对象
import datetime
day_delta = datetime.timedelta(days=1)
day_today = datetime.datetime.today()
day_last = day_today - day_delta
print(day_last, type(day_last))
day_future = day_today + day_delta
print(day_future, type(day_future))
day_delta_new = day_future - day_last
print(day_delta_new, type(day_delta_new))
(4)应用
import datetime
def cal_birthday(month=1, day=1):
today_info = datetime.datetime.today()
future_birthday = datetime.datetime(today_info.year, month, day)
day_delta = future_birthday - today_info
if day_delta.days < 0:
future_birthday = datetime.datetime(today_info.year + 1, month, day)
day_delta = future_birthday - today_info
return day_delta
res = cal_birthday(11, 21)
print(f"还有{res.days}天{round(res.seconds / 3600)}小时,你就过生日了")