本文主要理清 Python 的 datetime 和 date 各种操作。
1. Datetime — 日期和时间值操作
1.1 time 操作
1 | import datetime |
输出
1 | 01:02:03 |
1.2 Dates(日期操作)
日历日期值用日期类表示。 实例具有年、月和日的属性。 使用today方法很容易创建一个表示当前日期的日期。
1 | import datetime |
输出1
2
3
4
5
6
7
8
9
10
112020-05-25
ctime : Mon May 25 00:00:00 2020
tuple : tm_year = 2020
tm_mon = 5
tm_mday = 25
tm_hour = 0
tm_min = 0
tm_sec = 0
Year : 2020
Mon : 5
Day : 25
1.3 timedeltas
可以使用两个datetime对象上的基本算术,或者将datetime与timedelta组合来计算未来和过去日期。对日期进行减法计算会产生timedelta,并且可以从日期添加或减去timedelta以产生另一个日期。imedelta的内部值以天,秒和微秒存储。
计算两个时间的差值
1 | import time |
执行代码的输出
1 | 291 |
2. 应用
2.1 计算程序运行时间
1 |
|
2.2 获取当前时间
1 | from datetime import datetime |
2.3 指定时间
1 | from datetime import datetime |
2.4 timestamp转换为datetime
要把timestamp转换为datetime,使用datetime提供的fromtimestamp()方法:
1 | from datetime import datetime |
注意到timestamp是一个浮点数,它没有时区的概念,而datetime是有时区的。上述转换是在timestamp和本地时间做转换。
本地时间是指当前操作系统设定的时区。可以进行时区转换。
1 | from datetime import datetime |
2.5 str 转换为 datetime
很多时候,用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串:
1 | from datetime import datetime |
字符串 %Y-%m-%d %H:%M:%S
规定了日期和时间部分的格式。详细的说明请参考Python文档。
注意转换后的datetime是没有时区信息的。
2.6 datetime 转换为 str
如果已经有了datetime对象,要把它格式化为字符串显示给用户,就需要转换为str,转换方法是通过strftime()实现的,同样需要一个日期和时间的格式化字符串:
1 | from datetime import datetime |
2.7 本地时间转换为UTC时间
本地时间是指系统设定时区的时间,例如北京时间是UTC+8:00时区的时间,而UTC时间指UTC+0:00时区的时间。
一个datetime类型有一个时区属性tzinfo,但是默认为None,所以无法区分这个datetime到底是哪个时区,除非强行给datetime设置一个时区:
1 | from datetime import datetime, timedelta, timezone |
如果系统时区恰好是UTC+8:00,那么上述代码就是正确的,否则,不能强制设置为UTC+8:00时区。
2.8 时区转换
我们可以先通过utcnow()拿到当前的UTC时间,再转换为任意时区的时间:
拿到UTC时间,并强制设置时区为UTC+0:00:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
print(utc_dt)
2015-05-18 09:05:12.377316+00:00
# astimezone()将转换时区为北京时间:
8))) bj_dt = utc_dt.astimezone(timezone(timedelta(hours=
print(bj_dt)
2015-05-18 17:05:12.377316+08:00
# astimezone()将转换时区为东京时间:
9))) tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours=
print(tokyo_dt)
2015-05-18 18:05:12.377316+09:00
# astimezone()将bj_dt转换时区为东京时间:
9))) tokyo_dt2 = bj_dt.astimezone(timezone(timedelta(hours=
print(tokyo_dt2)
2015-05-18 18:05:12.377316+09:00
时区转换的关键在于,拿到一个datetime时,要获知其正确的时区,然后强制设置时区,作为基准时间。
利用带时区的datetime,通过astimezone()方法,可以转换到任意时区。
注:不是必须从UTC+0:00时区转换到其他时区,任何带时区的datetime都可以正确转换,例如上述bj_dt到tokyo_dt的转换。
3. 日期格式
python中时间日期格式化符号:
1 | %y 两位数的年份表示(00-99) |
参考
主要参考:https://www.yiibai.com/python/python_date_time.html
因为我们是朋友,所以你可以使用我的文字,但请注明出处:http://alwa.info