前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Day17内建模块datetime

Day17内建模块datetime

作者头像
林清猫耳
发布2018-04-26 15:35:35
1K0
发布2018-04-26 15:35:35
举报
文章被收录于专栏:我爱编程

datetime

代码语言:javascript
复制
>>> from datetime import datetime
>>> now = datetime.now()
>>> print(now)
2018-04-06 20:24:30.764172
>>> print(type(now))
<class 'datetime.datetime'>

注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import datetime导入的才是datetime这个类。 如果仅导入import datetime,则必须引用全名datetime.datetimedatetime.now()返回当前日期和时间,其类型是datetime

要指定某个日期和时间,我们直接用参数构造一个datetime

代码语言:javascript
复制
>>> dt = datetime(2018,4,30,4,21,43)
>>> print(dt)
2018-04-30 04:21:43

把一个datetime类型转换为timestamp只需要简单调用timestamp()方法:

代码语言:javascript
复制
>>> dt.timestamp()
1525033303.0

要把timestamp转换为datetime,使用datetime提供的fromtimestamp()方法:

代码语言:javascript
复制
>>> t = 1600000000.0
>>> print(datetime.fromtimestamp(t))
2020-09-13 20:26:40
str转换为datetime

很多时候,用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串:

代码语言:javascript
复制
>>> cday = datetime.strptime('2018-4-6 21:00:59', '%Y-%m-%d %H:%M:%S')
>>> print(cday)
2018-04-06 21:00:59

字符串'%Y-%m-%d %H:%M:%S'规定了日期和时间部分的格式。

datetime转换为str

如果已经有了datetime对象,要把它格式化为字符串显示给用户,就需要转换为str,转换方法是通过strftime()实现的,同样需要一个日期和时间的格式化字符串:

代码语言:javascript
复制
>>> now = datetime.now()
>>> print(now)
2018-04-06 20:58:42.534038
>>> print(now.strftime('%a,%b %d %H:%M'))
Fri,Apr 06 20:58
datetime加减

对日期和时间进行加减实际上就是把datetime往后或往前计算,得到新的datetime。加减可以直接用+-运算符,不过需要导入timedelta这个类:

代码语言:javascript
复制
>>> from datetime import datetime, timedelta, timezone
>>> now = datetime.now()
>>> now
datetime.datetime(2018, 4, 6, 21, 3, 54, 668377)
>>> now + timedelta(hours=10)
datetime.datetime(2018, 4, 7, 7, 3, 54, 668377)
>>> now - timedelta(days=1)
datetime.datetime(2018, 4, 5, 21, 3, 54, 668377)
>>> now + timedelta(days=2, hours=12)
datetime.datetime(2018, 4, 9, 9, 3, 54, 668377)
本地时间转换为UTC时间

本地时间是指系统设定时区的时间,例如北京时间是UTC+8:00时区的时间,而UTC时间指UTC+0:00时区的时间。 一个datetime类型有一个时区属性tzinfo,但是默认为None,所以无法区分这个datetime到底是哪个时区,除非强行给datetime设置一个时区:

代码语言:javascript
复制
>>> tz_utc_8 = timezone(timedelta(hours=8))    # 创建时区UTC+8:00
>>> now = datetime.now()
>>> now
datetime.datetime(2018, 4, 6, 21, 10, 24, 942726)
>>> dt = now.replace(tzinfo=tz_utc_8)    # 强制设置为UTC+8:00
>>> dt
datetime.datetime(2018, 4, 6, 21, 10, 24, 942726, tzinfo=datetime.timezone(datetime.timedelta(0, 28800)))

如果系统时区恰好是UTC+8:00,那么上述代码就是正确的,否则,不能强制设置为UTC+8:00时区。

时区转换
代码语言:javascript
复制
# 拿到UTC时间,并强制设置时区为UTC+0:00:
>>> utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
>>> print(utc_dt)
2018-04-06 13:18:11.351108+00:00
# astimezone()将转换时区为北京时间:
>>> bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
>>> print(bj_dt)
2018-04-06 21:18:11.351108+08:00
# astimezone()将转换时区为东京时间:
>>> tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours=9)))
>>> print(tokyo_dt)
2018-04-06 22:18:11.351108+09:00
# astimezone()将bj_dt转换时区为东京时间:
>>> tokyo_dt2 = bj_dt.astimezone(timezone(timedelta(hours=9)))
>>> print(tokyo_dt2)
2018-04-06 22:18:11.351108+09:00

时区转换的关键在于,拿到一个datetime时,要获知其正确的时区,然后强制设置时区,作为基准时间。 利用带时区的datetime,通过astimezone()方法,可以转换到任意时区。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.04.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • datetime
    • str转换为datetime
      • datetime转换为str
        • datetime加减
          • 本地时间转换为UTC时间
            • 时区转换
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档