Python常用的内建模块1:datetime
datetime:Python处理日期和时间的标准库
- 获取当前日期和时间:
>>> from datetime import datetime
>>> now = datetime.now() # 获取当前datetime
>>> print(now)
2018-07-17 14:45:23.464380
datetime
是模块, datetime
模块中还包含了datetime
类, 通过from datetime import datetime
导入的才是datetime
这个类如果仅导入
improt datetime
, 则需要引用全名datetime.datetime
.或者导入import datetime as dt
, 使用dt.datetime
使用- 获取指定日期和时间
datetime
>>> from datetime import datetime
>>> dt = datetime(2018, 7, 17, 14, 45) # 用指定日期时间创建datetime
>>> print(dt)
2018-07-17 14:45:00
- datetime转换成timestamp
datetime
类型转换成timestamp
类型只需要简单的调用timestamp()
方法即可:>>> from datetime import datetime
>>> dt = datetime(2018, 7, 17, 14, 45) # 用指定日期时间创建datetime
>>> dt.timestamp() # 把datetime转换为timestamp
1531809900.0
- timestamp转换为datetime
timestamp
转换成datetime
简单的调用datetime
提供的fromtimestamp
即可:>>> from datetime import datetime
>>> t = 1531809900.0
>>> print(datetime.fromtimestamp(t))
2018-07-17 14:45:00
注意到
timestamp
是一个浮点数, 它没有时区的概念, 而datetime
是有时区的概念.上述的转换是在timestamp和本地时间做转换.本地时间是指当前操作系统设定的时区. 例如北京时间是东八区, 则本地时间就是
2018-07-17 14:45:00
实际上就是
UTC+8:00
时区的时间:2018-07-17 14:45:00 UTC+8:00
而此时的格林威治标准时间和北京相差8个小时, 也就是
UTC+0:00
时区的时间应该是:2018-07-17 06:45:00 UTC+0:00
当然了timestamp也可以直接转成UTC标准时区的时间:
>>> from datetime import datetime
>>> t = 1531809900.0
>>> print(datetime.fromtimestamp(t)) # 本地时间
2018-07-17 14:45:00
>>> print(datetime.utcfromtimestamp(t)) # UTC时间
2018-07-17 06:45:00
- str转换为datetime
str
转换成datetime
.转换方式是通过datetime
的datetime.strptime()
实现, 需要一个日期和时间的格式化字符串:>>> from datetime import datetime
>>> time = datetime.strptime('2018-7-17 14:45:00','%Y-%m-%d %H:%M:%S')
>>> print(time)
2018-07-17 14:45:00
字符串
%Y-%m-%d %H:%M:%S
规定了日期和时间部分的格式. 详情参考Python官方文档- datetime转换为str
datetime
对象, 要把它格式化为字符串给用户看, 需要datetime
的strftime()
来实现:>>> from datetime import datetime
>>> now = datetime.now()
>>> timeStr = now.strftime('%Y-%m-%d %H:%M:%S')
>>> print(timeStr)
2018-07-17 15:17:20
- datetime加减
datetime
往后或者往前计算, 得到新的datetime
.加减可以直接用+
和-
运算符, 不过需要导入timedelta这个类:from datetime import timedelta, datetime
>>> now = datetime.now()
>>> print(now)
2018-07-17 15:30:36.501466
>>> now + timedelta(hours=1)
datetime.datetime(2018, 7, 17, 16, 30, 36, 501466)
>>> now - timedelta(hours=20)
datetime.datetime(2018, 7, 16, 19, 30, 36, 501466)
>>> now - timedelta(days=1, hours=10)
datetime.datetime(2018, 7, 16, 5, 30, 36, 501466)
- 本地时间转换为UTC时间
UTC+8:00
时区, 而UTC时间指UTC+0:00
时区的时间一个
datetime
类型有一个时区属性tzinfo
,但是默认为None
,所以无法区分这个datetime
到底是哪个时区, 除非强行给datetime
设置一个时区>>> from datetime import datetime, timedelta, timezone
>>> tz_utc_8 = timezone(timedelta(hours=8))
>>> now = datetime.now()
>>> now
datetime.datetime(2018, 7, 17, 16, 26, 4, 208044)
>>> dt = now.replace(tzinfo=tz_utc_8)
>>> dt
datetime.datetime(2018, 7, 17, 16, 26, 4, 208044, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
如果系统时区恰好是
UTC+8:00
, 那么上述代码是正确的, 否则不能强制设置- 时区转换
utcnow()
拿到当前的UTC
时间, 在转换为任意时区的时间>>> utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
>>> print(utc_dt) #获取UTC时间
2018-07-17 08:30:24.605313+00:00
>>> bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
>>> print(bj_dt)#获取北京时间
2018-07-17 16:30:24.605313+08:00
>>> dj_dt = utc_dt.astimezone(timezone(timedelta(hours=9)))
>>> print(dj_dt)#获取东京时间
2018-07-17 17:30:24.605313+09:00
>>> dj_dt2 = bj_dt.astimezone(timezone(timedelta(hours=9)))
>>> print(dj_dt2) #从北京时间获取东京时间
2018-07-17 17:30:24.605313+09:00
时区的转换在于拿到一个datetime时间, 要获知正确的时区, 然后强制设置时区, 作为基准时间.
利用带时区的
datetime
, 通过astimezone()
方法可以转换到任意时区.推荐阅读
- 昨夜小楼听风
- 为什么你的路演总会超时()
- 深入理解Go之generate
- 遗憾是生活的常态,但孝顺这件事,我希望每一个人都不留遗憾
- python学习之|python学习之 实现QQ自动发送消息
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- 唱歌教学(导致嗓音损坏的几个常见的错误唱歌方法!)