Python中datetime的常用操作

总结几个我们在程序中常用到的关于datetime的操作,以供参考。

一、naive类型和aware类型的相互转换。

即不带时区(naive)的时间日期类型和带时区(naive)的时间日期类型间的相互转换

1.不带时区的转化为带时区的:

>>> from datetime import datetime
>>> import pytz
>>> china_tz = pytz.timezone('Asia/Shanghai')
>>> local_naive = datetime.now()
>>> local_aware = now_naive.replace(tzinfo=china_tz)
>>> local_aware
datetime.datetime(2016, 12, 18, 8, 0, 0, tzinfo=<DstTzInfo 'Asia/Shanghai' LMT+8>

2.带时区的类型转化为不带时区的类型:

>>> local_naive = now_aware.replace(tzinfo=None)
>>> local_naive
datetime.datetime(2016, 12, 18, 8, 0, 0)

3.带时区之间的相互转化:

>>> utc_tz = pytz.utc
>>> utc_aware = local_aware.astimezone(utc_tz)
>>> utc_aware
datetime.datetime(2016, 12, 18, 0, 0, <UTC>)

这里要注意datetime.astimezone(tz)和datetime.repalce(tzinfo=tz)的不同:前者生成的新对象和原对象还表示同一个时间点,只不过时间数值大小都转化为新时区的了。后者仅改变时区属性,时间数值大小都不必变,因此很可能表示的不是同一个时间点了,除非新老时区相同。

>>> utc_aware - local_aware
datetime.datetime(0)
>>> another_aware = local_aware.replace(tzinfo=utc_tz)
>>> another_aware - local_aware
datetime.timedelta(0, 29160)

二、timestamp和datetime对象之间的相互转化

1.timestamp转化为datetime

>>> import time
>>> stamp = time.time()
>>> local_time = datetime.fromtimestamp(stamp) # 还可传入一个可选参数tz
>>> local_time
datetime.datetime(2016, 12, 18, 10, 57, 1, 326000)

2.datetime转化为timestamp

>>> import time
>>> struct_time = local_time.timetuple()  # 先转化为一个time.stuct_time对象
>>> new_stamp = time.mktime(struct_time)  # 再转化为timestamp
>>> new_stamp == stamp
False
>>> new_stamp
1482031898.0
>>> stamp
1482031898.039      # 可以看出转化过来后有秒以下的精度损失。

如果你知道绝对精确转换的方法, 请告诉我:)

三、datetime和str之间的转化

1.datetime生成成易于阅读的字符串(str)

>>> local_time.strftime('%Y-%m-%d')  # convert datetime to formate str
2016-12-18

2.从字符串(str)生成datime对象

>>> date_str = '2016-12-18'
>>> new_datetime = datetime.strptime(date_str, '%Y-%m-%d')  # string parsed to datime according to format
>>> new_datetime
datetime.datetime(2016, 12, 18, 0, 0)

更多格式可参考下表:python时间字符串格式表
关于datetime模块的更多知识可参考我的另外一篇文章Python中的datetime模块的使用

    原文作者:给我二两面
    原文地址: https://www.jianshu.com/p/9d04a2f3b054
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞