专栏首页我爱编程Day17内建模块datetime

Day17内建模块datetime

datetime

>>> 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

>>> dt = datetime(2018,4,30,4,21,43)
>>> print(dt)
2018-04-30 04:21:43

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

>>> dt.timestamp()
1525033303.0

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

>>> t = 1600000000.0
>>> print(datetime.fromtimestamp(t))
2020-09-13 20:26:40

str转换为datetime

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

>>> 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()实现的,同样需要一个日期和时间的格式化字符串:

>>> 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这个类:

>>> 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设置一个时区:

>>> 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时区。

时区转换

# 拿到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()方法,可以转换到任意时区。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Day14IO编程

    读文件 Python引入了with语句来自动帮我们调用close()方法: with open('/path/to/file', 'r') as f: ...

    林清猫耳
  • 对爬虫工程师的理解

    本文转载自简书小温侯 原文链接:https://www.jianshu.com/p/61fe5b9320ac

    林清猫耳
  • 2018-09-08 近况、打算和一些对爬虫工程师的理解近况打算对爬虫工程师的理解

    前阵子把之前在博客上写的所有关于爬虫的文章都搬到了简书,这导致我在简书的文章总字数直接突破了10W,接着一个残酷的出现了:在这之后的很大一段时间内,我的阅读喜欢...

    林清猫耳
  • Python常用模块:datetime

    注:Python的timestamp是一个浮点数。如果有小数位,小数位表示毫秒数。

    听着music睡
  • python的datetime模块处理时

    python的datetime模块主要用来处理时间,里面包含很多类,包括timedelay,date,time,datetime等

    py3study
  • python datetime简单使用

    #当前时间 print datetime.datetime.now() 2018-06-13 16:22:42.414143

    py3study
  • datetime

    datetime是Python处理日期和时间的标准库。 获取当前日期和时间 我们先看如何获取当前日期和时间: >>> from datetime import ...

    用户1214487
  • Python获取当前年月日

    py3study
  • python 计算时间差

    其本上常用的类有:datetime和timedelta两个。它们之间可以相互加减。每个类都有一些方法和属性可以查看具体的值,如datetime可以查看:天数(d...

    py3study
  • python3中datetime库详解

    在 Python 文档里,time是归类在Generic Operating System Services中,换句话说, 它提供的功能是更加接近于操作系统层面...

    py3study

扫码关注云+社区

领取腾讯云代金券