1. from datetime import datetime
    2. now = datetime.now()
    3. print(now)
    4. print(now.strftime('%Y-%m-%d %H:%M:%S'))
    5. print(type(now))

    输出:

    1. 2017-02-06 23:18:29.624698
    2. 2017-02-06 23:18:29
    3. <class 'datetime.datetime'>

    strftime()用于格式化日期对象datetime。另外一个方法strptime()则负责把一个字符串str转为datetime对象:

    1. from datetime import datetime
    2. # 注意时间字符串与格式化字符串位置一一对应,否则报错
    3. odate = datetime.strptime('2017-2-6 23:22:13', '%Y-%m-%d %H:%M:%S')
    4. print(odate)
    5. print(type(odate))

    输出:

    1. 2017-02-06 23:22:13
    2. <class 'datetime.datetime'>

    输出:

    1. 2017-02-06 23:26:54.631582
    2. 1486394814.631582
    3. 1486394814.631582

    小数位表示毫秒数。

    1. from datetime import datetime
    2. # 方式1:
    3. odate = datetime.strptime('2017-2-6 23:29:20', '%Y-%m-%d %H:%M:%S')
    4. print(odate.timestamp())
    5. odate = datetime(2017, 2, 6, 23, 29, 20)
    6. print(odate.timestamp())

    输出:

    1. 1486394960.0

    注意:timestamp的值是与时区无关的。datetime是有时区的。

    下面演示如何把timestamp转换为datetime。

    时间戳转日期:

    1. # coding: utf-8
    2. from datetime import datetime
    3. now = datetime.now()
    4. ts = now.timestamp()
    5. print(datetime.fromtimestamp(ts)) # 本地时间
    6. print(datetime.utcfromtimestamp(ts)) # UTC时间

    输出:

    1. # coding: utf-8
    2. from datetime import datetime, timedelta
    3. import time
    4. now = datetime.now()
    5. # now += timedelta(hours=10)
    6. # now += timedelta(minutes=10)
    7. # now += timedelta(weeks=1)
    8. now += timedelta(days=-1, hours=1, minutes=1, seconds=10)
    9. print(now)

    输出:

    1. 2017-02-06 00:47:12.395231
    1. %y 两位数的年份表示(00-99
    2. %Y 四位数的年份表示(000-9999
    3. %m 月份(01-12
    4. %d 月内中的一天(0-31
    5. %H 24小时制小时数(0-23
    6. %I 12小时制小时数(01-12
    7. %M 分钟数(00=59
    8. %S 秒(00-59
    9. %a 本地简化星期名称
    10. %A 本地完整星期名称
    11. %c 本地相应的日期表示和时间表示
    12. %j 年内的一天(001-366
    13. %p 本地A.M.或P.M.的等价符
    14. %U 一年中的星期数(00-53)星期天为星期的开始
    15. %w 星期(0-6),星期天为星期的开始
    16. %W 一年中的星期数(00-53)星期一为星期的开始
    17. %x 本地相应的日期表示
    18. %X 本地相应的时间表示
    19. %Z 当前时区的名称
    20. %% %号本身

    下面示例演示time模块里的常用方法:

    1. # coding:utf-8
    2. import time
    3. # 获取时间戳
    4. timestamp = time.time()
    5. print(timestamp)
    6. # 格式时间
    7. print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
    8. # 返回当地时间下的时间元组t
    9. print(time.localtime())
    10. # 将时间元组转换为时间戳
    11. print(time.mktime(time.localtime()))
    12. t = (2017, 2, 11, 15, 3, 38, 1, 48, 0)
    13. print(time.mktime(t))
    14. # 字符串转时间元组:注意时间字符串与格式化字符串位置一一对应
    15. print(time.strptime('2017 02 11', '%Y %m %d'))
    16. # 睡眠
    17. print('sleeping...')
    18. time.sleep(2) # 睡眠2s

    输出:

    下面是Python时间元组:

    time模块内置函数

    Time 模块包含了以下内置函数,既有时间处理相的,也有转换时间格式的:

    序号函数描述
    1time.altzone返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。
    2time.asctime([tupletime])接受时间元组并返回一个可读的形式为”Tue Dec 11 18:07:14 2008”(2008年12月11日 周二18时07分14秒)的24个字符的字符串。
    3time.clock( )用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。
    4time.ctime([secs])作用相当于asctime(localtime(secs)),未给参数相当于asctime()
    5time.gmtime([secs])接收时间辍(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组t。注:t.tm_isdst始终为0
    6time.localtime([secs])接收时间辍(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组t(t.tm_isdst可取0或1,取决于当地当时是不是夏令时)。
    7time.mktime(tupletime)接受时间元组并返回时间辍(1970纪元后经过的浮点秒数)。
    8time.sleep(secs)推迟调用线程的运行,secs指秒数。
    9time.strftime(fmt[,tupletime])接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。
    10time.strptime(str,fmt=’%a %b %d %H:%M:%S %Y’)根据fmt的格式把一个时间字符串解析为时间元组。
    11time.time( )返回当前时间的时间戳(1970纪元后经过的浮点秒数)。
    12time.tzset()根据环境变量TZ重新初始化时间相关设置。