• 时间模块(time、datetime)


    一、time模块

    1、表示时间的三种方式

    在Python中,通常有三种方式来表示时间:时间戳、元组(struct_time)、格式化时间字符串。

    (1)、时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
    (2)、格式化的时间字符串(Format String): ‘1999-12-06’

    python中时间日期格式化符号
    %y   两位数的年份表示(00-99)
    %Y   四位数的年份表示(000-9999)
    %m   月份(01-12)
    %d   月内中的一天(0-31)
    %H   24小时制小时数(0-23)
    %I   12小时制小时数(01-12)
    %M   分钟数(00=59)
    %S   秒(00-59)
    %a   本地简化星期名称
    %A   本地完整星期名称
    %b   本地简化的月份名称
    %B   本地完整的月份名称
    %c   本地相应的日期表示和时间表示
    %j   年内的一天(001-366)
    %p   本地A.M.或P.M.的等价符
    %U   一年中的星期数(00-53)星期天为星期的开始
    %w   星期(0-6),星期天为星期的开始
    %W   一年中的星期数(00-53)星期一为星期的开始
    %x   本地相应的日期表示
    %X   本地相应的时间表示
    %z   当前时区的名称
    %%   %号本身

    练习:

    import time
    print(time.strftime('%y-%m-%d'))
    # 18-11-26
    print(time.strftime('%Y-%m-%d'))
    # 2018-11-26
    print(time.strftime('%H:%M:%S'))
    # 15:25:11
    print(time.strftime('%a, %A, %b, %B'))
    # Mon, Monday, Nov, November
    print(time.strftime('%c'))
    # Mon Nov 26 15:25:11 2018
    print(time.strftime('%j'))
    # 330
    print(time.strftime('%p'))
    # PM
    print(time.strftime('%U, %W'))
    # 47, 48
    print(time.strftime('%w'))
    # 1
    print(time.strftime('%x'))
    # 11/26/18
    print(time.strftime('%X'))
    # 15:25:11
    print(time.strftime('%z'))
    # +0800
    print(time.strftime('%%'))
    # %
    View Code

    (3)、元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)

    索引 属性(Attribute) 值(Vlaues)
    0 tm_year(年) 2018
    1 tm_mon(月) 1-12
    2 tm_mday(日) 1-31
    3 tm_hour(时) 0-23
    4 tm_min(分) 0-59
    5 tm_sec(秒) 0-59
    6 tm_wday(周几) 0-6,0表示周一
    7 tm_yday(一年中的第几天) 1-366
    8 tm_isdst(是否是夏令时) 默认为0

    首先,我们先导入time模块,来认识一下python中表示时间的几种格式:
    #导入时间模块
    >>>import time

    #时间戳
    print(time.time())
    # 1543219503.5940044

    #时间字符串
    print(time.strftime("%Y-%m-%d %X"))
    # 2018-11-26 16:04:02
    print(time.strftime("%Y-%m-%d %H:%M:%S"))
    # 2018-11-26 16:04:24

    #时间元组:localtime将一个时间戳转换为当前时区的struct_time
    print(time.localtime())
    # time.struct_time(tm_year=2018, tm_mon=11, tm_mday=26, tm_hour=16, tm_min=5, tm_sec=3, tm_wday=0, tm_yday=330, tm_isdst=0)

    小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的

    2、几种格式之间的转换

    格式化时间 ----> 结构化时间
    ft = '2018-11-27 12:30:30'
    st = time.strptime(ft,'%Y/%m/%d %H:%M:%S')
    print(st)

    结构化时间 ---> 格式化时间
    ft = time.strftime('%Y/%m/%d %H:%M:%S',st)
    print(ft)

    结构化时间 ---> 时间戳
    t = time.mktime(st)
    print(t)

    时间戳 ----> 结构化时间
    t = time.time()
    st = time.localtime(t)
    print(st)

    localtime()与gmtime()

    import time
    t = time.time()
    print(time.localtime(t))
    # time.struct_time(tm_year=2018, tm_mon=11, tm_mday=26, tm_hour=17, tm_min=5, tm_sec=8, tm_wday=0, tm_yday=330, tm_isdst=0)
    
    print(time.gmtime(t))
    # time.struct_time(tm_year=2018, tm_mon=11, tm_mday=26, tm_hour=9, tm_min=5, tm_sec=8, tm_wday=0, tm_yday=330, tm_isdst=0)

    函数说明:localtime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。结构tm的定义请参考gmtime()。此函数返回的时间日期已经转换成当地时区。
    返回值:返回结构tm 代表目前的当地时间。

    函数说明:gmtime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。此函数返回的时间日期未经时区转换,而是UTC时间。
    返回值:返回结构tm代表目前UTC时间。

    结构化时间 --> %a %b %d %H:%M:%S %Y字符串
    time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串
    >>>time.asctime(time.localtime(1500000000))
    'Fri Jul 14 10:40:00 2017'
    >>>time.asctime()
    'Thu Nov 26 22:44:13 2018'

    时间戳 --> %a %b %d %H:%M:%S %Y字符串
    time.ctime(时间戳) 如果不传参数,直接返回当前时间的格式化串
    >>>time.ctime()
    'Thu Nov 26 22:44:13 2018'
    >>>time.ctime(1500000000)
    'Fri Jul 14 10:40:00 2017'

    t = time.time()
    ft = time.ctime(t)
    print(ft)
    # Thu Nov 29 22:48:49 2018

    st = time.localtime()
    ft = time.asctime(st)
    print(ft)
    # Thu Nov 29 22:48:49 2018

    例子:
    1、计算两个格式化时间之间差了多少年月日时分秒

    import time
    
    time1 = '2010-10-10 08:08:08'
    time2 = '2018-11-27 12:30:30'
    timestamp1 = time.mktime(time.strptime(time1, '%Y-%m-%d %H:%M:%S'))
    timestamp2 = time.mktime(time.strptime(time2, '%Y-%m-%d %H:%M:%S'))
    time_difference = time.gmtime(timestamp2 - timestamp1)
    
    print('时间相差%s年%s月%s日%s时%s分%s秒'%(time_difference.tm_year-1970, time_difference.tm_mon-1, time_difference.tm_mday-1, 
    time_difference.tm_hour, time_difference.tm_min, time_difference.tm_sec))
    
    时间相差8年1月17日4时22分22秒
    View Code 

    2、计算当前时间所在月1号的时间戳

    import time
    time_now = time.strftime('%Y-%m-1 %H:%M:%S')
    timestruct = time.strptime(time_now, '%Y-%m-%d %H:%M:%S')
    timestramp = time.mktime(timestruct)
    print(timestramp)
    
    1541048065.0
    View Code

    二、datetime模块

    1、显示时间

    import datetime
    
    print(datetime.datetime)
    # <class 'datetime.datetime'>
    
    now_time = datetime.datetime.now() # 现在的时间
    print(now_time)
    # 2018-11-27 23:06:37.154336

    2、调整时间

    只能调整的字段:weeks days hours minutes seconds

    print(datetime.datetime.now() + datetime.timedelta(weeks=3)) # 三周后
    print(datetime.datetime.now() + datetime.timedelta(weeks=-3)) # 三周前
    print(datetime.datetime.now() + datetime.timedelta(days=3)) # 三天后
    print(datetime.datetime.now() + datetime.timedelta(days=-3)) # 三天前
    print(datetime.datetime.now() + datetime.timedelta(hours=5)) # 5小时后
    print(datetime.datetime.now() + datetime.timedelta(hours=-5)) # 5小时前
    print(datetime.datetime.now() + datetime.timedelta(minutes=15)) # 15分钟后
    print(datetime.datetime.now() + datetime.timedelta(minutes=-15)) # 15分钟前
    print(datetime.datetime.now() + datetime.timedelta(seconds=70)) # 70秒后
    print(datetime.datetime.now() + datetime.timedelta(seconds=-70)) # 70秒前

    3、设置时间

    print(datetime.datetime.now().replace(year=2010)) #将年份设置为2010年
    # 2010-11-27 23:16:19.293633
    print(datetime.datetime.now().replace(month=1)) #将月份设置为1月
    # 2018-01-27 23:16:19.293633
    print(datetime.datetime.now().replace(day=1)) #将日期调整为1号
    # 2018-11-01 23:16:19.293633
    print(datetime.datetime.now().replace(year=2010, month=10, day=10, hour=10, minute=10, second=10)) #自定义年月日时分秒
    # 2010-10-10 10:10:10.293633

    4、 将时间戳转化成时间

    print(datetime.date.fromtimestamp(1231231231))
    # 2009-01-06
  • 相关阅读:
    归并两路有序链表
    [转]两种高性能I/O设计模式(Reactor/Proactor)的比较
    linux 静态库使用经验
    系统性能调优经验
    编译-O 选项对性能提升作用
    [转]Linux shell中的那些小把戏
    shell函数传递带空格的参数
    标题清洗引发的算法(两个字符串的最长公共子串)
    正则表达式之Matcher类中group方法
    ConcurrentHashMap JDK 1.6 源码分析
  • 原文地址:https://www.cnblogs.com/dxnui119/p/10041287.html
Copyright © 2020-2023  润新知