• 技术文章 >后端开发 >Python教程

    Python的time和datetime模块详细介绍

    零下一度零下一度2017-07-20 15:33:15原创1426
    time模块中时间表现的格式主要有三种:

      a、timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量

      b、struct_time时间元组,共有九个元素组。

      c、format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。

    time

    常用的有time.time()time.sleep()函数。

    import timeprint(time.time())
    1499305554.3239055

    上面的浮点数称为UNIX纪元时间戳,是从1970年1月1日0点起到今天经过的秒数。可以看到后面有6位小数,使用round函数,可以实现浮点数的四舍五入。如下

    # 默认四舍五入到整数位,即不保留小数print(round(time.time()))# 可指定参数保留的小数位数print(round(time.time(), 2))
    1499305554
    1499305554.49

    time.sleep(sec)可以让当前休眠,参数填入秒(s)。

    print('good')
    time.sleep(5.5)# 5.5秒后才打印这句print('yes')
    good
    yes

    其他一些函数的使用

    # 返回UTC时间print(time.gmtime())# 返回本地时间,在中国就是UTC+8print(time.localtime())
    time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=1, tm_min=46, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=0)
    time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=9, tm_min=46, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=0)

    可以发现这是一个元组类型,中国所在时区位UTC+8,可以发现除了tm_hour不一样(它们相差了刚好+8),其余都一样。

    下面的函数可以返回一个格式化的日期时间,看起来更加直观。

    print(time.ctime())print(time.asctime())# 由于使用默认参数和上面的结果一样print(time.ctime(time.time()))print(time.asctime(time.localtime()))
    Thu Jul  6 09:46:15 2017
    Thu Jul  6 09:46:15 2017
    Thu Jul  6 09:46:15 2017
    Thu Jul  6 09:46:15 2017

    struct_time转化为字符串及字符串转为struct_time

    %Y-%m-%d表示年月日,在datetime模块会详细介绍。

    a = time.strptime('2017/7/6', '%Y/%m/%d')
    b = time.strftime('%Y-%m-%d', time.localtime())print(a)print(b)
    time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=-1)
    2017-07-06

    测量程序的运行时间

    使用时间戳可以方便地计时一段程序地运行时间

    start_time = time.time()sum = 0for i in range(10000000):sum += 1end_time = time.time()print(end_time - start_time)
    2.185124397277832

    可以看到执行循环计算加法一千万次,那段程序花了2秒多。

    也可以使用time.clock()函数

    start = time.clock()print(start)  # 2.6773594453225194e-06time.sleep(2)
    end = time.clock()print(end - start)  # 差值代表了睡眠2秒的时间。2.000246763295544time.sleep(3)print(time.clock())  # 5.00058991153112,返回的是从第一次调用到这次调用的时间间隔
    4.4622657422041984e-07
    2.0026006084745567
    5.013243112269714

    可以看到clock第一次调用时比较奇怪,它返回的是进程运行的时间。之后再次调用都是与第一次调用clock的值的差了。即从第一次调用开始算起,到当前调用clock所经历的时间。
    像上面一样,在想测试的一部分代码的上方设置start,结束的地方设置end,相减也能得到片段代码运行时间,而且比time.time()还要准确。

    datetime

    datetime模块用来管理日期和时间,其中有三个子模块。分别是time、date、datetime,所以想要使用datetime可以使用下面的导入方式。

    from datetime import datetime# 返回当前时间now = datetime.now()print(now.year, now.month, now.microsecond)# 可以自定义参数,返回格式化后的时间dt = datetime(2017, 10, 1, 23, 59, 59, 456123)print(dt)
    2017 7 719609
    2017-10-01 23:59:59.456123

    datetime接受7个参数,分别对应年、月、日、时、分、秒、微秒。分别保存在datetime的year、month、day、hour、minute、second、microsecond属性中。

    由时间戳可以转换成datetime类型。如下,使用当前时间的时间戳。实际上等效于datetime.now()。当然反过来由datetime得到时间戳也是可以的。

    # 时间戳转datetimenow = datetime.fromtimestamp(time.time())print(now)
    sometime = datetime(2017, 7, 5, 23, 59, 59)# datetime转时间戳print(sometime.timestamp())
    2017-07-06 09:46:07.903769
    1499270399.0

    这些datetime对象可以使用><=符号来比较两个日期的先后。也可进行减运算,表示两个时刻的差值。比如

    dt1 = datetime(2017, 5, 31)
    dt2 = datetime(2017, 4, 1)print(dt1 - dt2)print(dt1 > dt2)
    60 days, 0:00:00
    True

    timedelta表示一段时间

    注意它不是表示一个时刻,而是一段时间。

    import datetime
    
    delta = datetime.timedelta(weeks=2, days=7, hours=1, seconds=59,microseconds=234353)
    delta1 = datetime.timedelta(days=5, hours=2)print(delta.seconds)  # 返回属性hours和seconds的和print(delta.total_seconds()) # 只是以秒来表示这段时间print(delta > delta1)print(delta + delta1)
    3659
    1818059.234353
    True
    26 days, 3:00:59.234353

    timedelta的接受的参数有weeks、days、hours、minutes、seconds、microseconds,但是其属性却只有days、seconds、microseconds。并且除了像datetime一样支持大小比较、减法运算外,还可以进行加法运算,表示两个时间段的差值

    将datetime转化为字符串形式及字符串转为datetime对象

    time模块也有这两个函数(见上面的例子),使用上比较累类似。

    from datetime import datetime
    
    a = datetime.strptime('2017/7/6', '%Y/%m/%d')
    b = datetime.now().strftime('%Y-%m-%d')print(a)print(b)
    2017-07-06 00:00:00
    2017-07-06

    关于日期时间的格式,看下表。

    格式指令含义
    %Y带世纪的四位年份,如2017
    %y后两位年份,如17表示2017
    %m月份,从01到12
    %B完整的月份,如November
    %b月份的简写,如Nov
    %d一个月中的第几天,如从01到31(如果有的话)
    %j一年中的第几天
    %w一周中的第几天
    %A完整的周几,如Monday
    %a简写的周几,如Mon
    %H24小时制的小时00-23
    %h12小时制的小时01-12
    %M分,00-59
    %S秒,00-59
    %pAM或者PM

    以上就是Python的time和datetime模块详细介绍的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:datetime Python time
    上一篇:pickle库的使用详解 下一篇:Python基础教程系列目录,最全的Python入门系列教程!
    Web大前端开发直播班

    相关文章推荐

    • Python归纳总结之json标准库• 详细讲解Python之Seaborn(数据可视化)• Python详细解析之多线程爬虫与常见搜索算法• 完全掌握Python数学相关模块• python基础语法详解之函数

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网