Python学习(十一)—— 常用内建模块datetime

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q1449516487/article/details/89226604

datetime是Python处理日期和时间的标准库。

1.获取当前日期和时间

>>> from datetime import datetime                    # 注意导入的是datetime模块的datetime类
>>> now = datetime.now()                             # 获取当前datetime
>>> print(now)
2015-05-18 16:28:07.198690
>>> print(type(now))                                 # 当前日期和时间的类型是datetime
<class 'datetime.datetime'>

2.获取指定日期和时间

>>> from datetime import datetime
>>> dt = datetime(2015, 4, 19, 12, 20)               # 用指定日期时间创建datetime
>>> print(dt)
2015-04-19 12:20:00

3.datetime转换为timestamp

timestamp(时间戳),国际上把1970年1月1日 00:00:00 UTC+00:00表示为0,往后时间每增加一秒钟,timestamp加1;此时间点之前用负数表示。时间戳与时区无关:

timestamp = 0 = 1970-1-1 00:00:00 UTC+0:00 = 1970-1-1 08:00:00 UCT+8:00

>>> from datetime import datetime
>>> dt = datetime(2015, 4, 19, 12, 20)                 # 用指定日期时间创建datetime
>>> dt.timestamp()                                     # 把datetime转换为timestamp
1429417200.0                                           # 注意Python的timestamp是一个浮点数,小数位表示毫秒数。

4.timestamp转换为datetime

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

>>> from datetime import datetime
>>> t = 1429417200.0                            # timestamp是一个浮点数,它没有时区概念                        
>>> print(datetime.fromtimestamp(t))            # 而datetime是有时区的
2015-04-19 12:20:00    

要把timestamp直接转换成UTC标准时区的时间,使用utcfromtimestamp()方法:

>>> from datetime import datetime
>>> t = 1429417200.0
>>> print(datetime.fromtimestamp(t))                 # 本地时间
2015-04-19 12:20:00
>>> print(datetime.utcfromtimestamp(t))              # UTC时间
2015-04-19 04:20:00

5.str转换为datetime

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

>>> from datetime import datetime
>>> cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
>>> print(cday)
2015-06-01 18:19:59

更多说明,请参考Python官方文档

6.datetune转换为str

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

>>> from datetime import datetime
>>> now = datetime.now()
>>> print(now.strftime('%a, %b %d %H:%M'))
Mon, May 05 16:28

7.datetime加减

可以通过+和-运算符对datetime进行操作,需要导入timedelta类:

>>> from datetime import datetime, timedelta
>>> now = datetime.now()
>>> now
datetime.datetime(2015, 5, 18, 16, 57, 3, 540997)
>>> now + timedelta(hours=10)
datetime.datetime(2015, 5, 19, 2, 57, 3, 540997)
>>> now - timedelta(days=1)
datetime.datetime(2015, 5, 17, 16, 57, 3, 540997)
>>> now + timedelta(days=2, hours=12)
datetime.datetime(2015, 5, 21, 4, 57, 3, 540997)

8.本地时间转换为UTC时间

要将本地时间转换为UTC时间,需要设置datetime类的时区属性tzinfo,这个属性默认是None,需要手动设置:

>>> from datetime import datetime, timedelta, timezone
>>> tz_utc_8 = timezone(timedelta(hours=8)) # 创建时区UTC+8:00
>>> now = datetime.now()
>>> now
datetime.datetime(2015, 5, 18, 17, 2, 10, 871012)
>>> dt = now.replace(tzinfo=tz_utc_8) # 强制设置为UTC+8:00
>>> dt
datetime.datetime(2015, 5, 18, 17, 2, 10, 871012, tzinfo=datetime.timezone(datetime.timedelta(0, 28800)))

9.时区转换

要进行时区的转换,可以先通过utcnow()拿到当前的UTC时间看,再转换为任意时区的时间,转换函数为astimezone()

# 拿到UTC时间,并强制设置时区为UTC+0:00:
>>> utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
>>> print(utc_dt)
2015-05-18 09:05:12.377316+00:00
# astimezone()将转换时区为北京时间:
>>> bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
>>> print(bj_dt)
2015-05-18 17:05:12.377316+08:00
# astimezone()将转换时区为东京时间:
>>> tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours=9)))
>>> print(tokyo_dt)
2015-05-18 18:05:12.377316+09:00
# astimezone()将bj_dt转换时区为东京时间:
>>> tokyo_dt2 = bj_dt.astimezone(timezone(timedelta(hours=9)))
>>> print(tokyo_dt2)
2015-05-18 18:05:12.377316+09:00

时区转换的关键在于,拿到一个datetime时,要获知其正确的时区,然后强制设置时区,作为基准时间。

利用带时区的datetime,通过astimezone()方法,可以转换到任意时区。

注:不是必须从UTC+0:00时区转换到其他时区,任何带时区的datetime都可以正确转换,例如上述bj_dttokyo_dt的转换。

猜你喜欢

转载自blog.csdn.net/q1449516487/article/details/89226604