【一】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)时间戳(计算机能够识别的时间)
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)}小时,你就过生日了")