本文主要依托于Pandas的时间处理模块以及datatime包,介绍若干关于时间处理的方法与小技巧,为今后工作、学习时需要时间处理时提供参照。本篇将介绍如何简单构造时间对象,以及实现时间与字符串的互转,以及时间对象的简单运算。
本文为时间处理方法的下篇,主要介绍date与time的结合、对datetime进行修改、timedelta的构造、将时间戳转换为时间对象、将时间对象转换为时间戳、获取星期几、获取本周第一天、最后一天,以及calender的用法。
1 date与time的结合
# 构造d1与t1
d1 = datetime.date(2020,12,12)
t1 = datetime.time(20,10,1)
print(d1)
print(t1)
# output
2020-12-12
20:10:01
# 将日期date和时间time相结合,方法是datetime.datetime.combine(d1,t1)
dt4 = datetime.datetime.combine(d1,t1)
print(dt4)
# output
2020-12-12 20:10:01
# 单独取出合并后的dt4中的date与time
print(dt4.date())
print(dt4.time())
# output
2020-12-12
20:10:01
2 对datetime进行修改
# 使用datetime对象的.replace()方法来更改相应的year、month、day、hour、minute、second
dt5 = dt4.replace(year=2021,month=1,day=11,hour=21,minute=12,second=2)
print(dt5)
# output
2021-01-11 21:12:02
3 timedelta的构造
# timedelta对象表示`两个date`或者`time`或者`datetime`的时间间隔
# 构造timedelta
delta = datetime.timedelta(weeks=4,
days=20,
hours=5,
minutes=40,
seconds=20,
microseconds=8000,
milliseconds=90000,)
delta
# output
datetime.timedelta(days=48, seconds=20510, microseconds=8000)
print(delta)
# output
48 days, 5:41:50.008000
4 时间戳转时间对象
# 时间戳是指格林威治时间1970 年01 月01 日00 时00 分00 秒(北京时间1970 年01 月01 日08 时00 分00秒) 起至现在的总秒数。
# 所以设置初始时间时需要:dt_s = datetime.datetime(1970,1,1,8)
# 直接time.time()得到时间戳
ts_1 = time.time()
print(ts_1)
# output
1613298180.6695764
# 看格林威治时间1970 年01 月01 日00 时00 分00 秒 到现在有多少天
int(time.time()/86400)
# output
18672
# 获取当天00:00:00的时间戳,由于计算的是格林威治时间,故北京时间要减去8个小时乘以3600秒
ts_2 = int(time.time()/86400) * (86400)-3600 * 8
ts_2
# output
1613232000
# 获取当天23:59:59的时间戳
# 一天有24*60*60 = 86400秒
ts_3 = int(time.time()/86400) * 86400-3600 * 8 + 86400 - 1
ts_3
# output
1613318399
# 将时间戳对象转换为datetime
# ts_1 = 距今的时间戳
# ts_2 = 当天北京时间00:00:00的时间戳
# ts_3 = 当天北京时间23:59:59的时间戳
print(datetime.datetime.fromtimestamp(ts_1))
print(datetime.datetime.fromtimestamp(ts_2))
print(datetime.datetime.fromtimestamp(ts_3))
# output
2021-02-14 18:23:13.203259
2021-02-14 00:00:00
2021-02-14 23:59:59
# 将时间戳对象转换为date
print(datetime.date.fromtimestamp(ts_1))
# output
2021-02-14
# 注意 时间戳对象可以转换为date,但不能转换为time,转换为time可以通过字符串转换
print(datetime.time.fromisoformat("23:08:00"))
# output
23:08:00
5 将时间对象转换为时间戳
dt1 = datetime.datetime(2021,2,14,20,10,2)
dt_s = datetime.datetime(1970,1,1,8)
# 计算2021年02月14日20点10分2秒到1970年1月1日8点0分0秒的时间戳秒数之差
timedelta_1 = dt1 - dt_s
timedelta_1
# output
datetime.timedelta(days=18672, seconds=43802)
print(timedelta_1)
# output
18672 days, 12:10:02
# 使用.total_seconds()获得时间戳的总秒数
timedelta_s = timedelta_1.total_seconds()
timedelta_s
# output
1613304602.0
6 获取星期几
dt5 = datetime.datetime.fromtimestamp(timedelta_s)
print(dt5)
# output
2021-02-14 20:10:02
# 获取星期几
## 数字从0开始,0代表星期一,1代表星期二,2代表星期三
dt5.weekday()
# output
6
## 数字从1开始,1代表星期一,2代表星期二,3代表星期三
dt5.isoweekday()
# output
7
7 timedelta的一些计算
# 获取当前日的前几天/后几天
## 获得当前日的后一天
datetime.date.today() + datetime.timedelta(days=1)
# outut
datetime.date(2021, 2, 15)
## 获得当前日的前一天
datetime.date.today() - datetime.timedelta(days=1)
# output
datetime.date(2021, 2, 13)
8 获取本周或本月第一天及最后一天
d_today = datetime.date.today()
d_today
# output
datetime.date(2021, 2, 14)
d_today.weekday()
# output
6
# 获取timedelta
datetime.timedelta(d_today.weekday())
# output
datetime.timedelta(days=6)
# 获取本周第一天
d_today - datetime.timedelta(d_today.weekday())
# output
datetime.date(2021, 2, 8)
# 获取本周最后一天
d_today + datetime.timedelta(6-d_today.weekday())
# output
datetime.date(2021, 2, 14)
9 calender的用法
# 导入calender
import calender
# 查看2021年的日历
calendar.prcal(2021)
# output
# 获取某月的日历
print(calendar.month(2021,1))
# output
January 2021
Su Mo Tu We Th Fr Sa
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
calendar.prmonth(2020,10)
# output
February 2021
Su Mo Tu We Th Fr Sa
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
# 查看是星期几(0-6 代表周一到周日)
print(calendar.weekday(2021,2,14))
# output
6
#返回一个包含星期几的缩写名的头, n 指定星期几缩写的字符宽度。
print(calendar.weekheader(3))
# output
Sun Mon Tue Wed Thu Fri Sat
总结
本文是Python中借助于datetime包所常用的时间处理方法的总结,主要介绍了:datetime包中使用combine将date和time进行结合;
对于一个datetime对象使用.replace()对其进行修改;
使用datetime.timedelta()构造timedelta对象;
使用time.time()获取至今的时间戳,并使用datetime.datetime.fromtimestamp()将时间戳转换为时间对象;
两个datetime日期相减得到timedelta,可以通过.days或者.total_seconds()获取天数和总秒数;
datetime使用.weekdays()或者isoweekdays()获取星期数;
datetime加或减datetime.timedelta()可以计算不同时间;
使用caldender的.prcal()或者.month()获取某年获某月的日历;
参考资料:
[1] 13个知识点,系统整理Python时间处理模块Datetime.[Website].13个知识点,系统整理Python时间处理模块Datetime
[2] datetime 模块入门总结.[Website].datetime 模块入门总结
[4] Python基础模块:日期与时间模块@time+datetime.[Website]. Python基础模块:日期与时间模块@time+datetime