zoukankan      html  css  js  c++  java
  • Python学习--15 日期和时间

    方法预览:

    datetime.now() # 当前时间,datetime类型
    datetime.timestamp() # 时间戳,浮点类型
    datetime.strftime('%Y-%m-%d %H:%M:%S') # 格式化日期对象datetime,字符串类型
    datetime.strptime('2017-2-6 23:22:13', '%Y-%m-%d %H:%M:%S') # 字符串转日期对象
    datetime.fromtimestamp(ts) # 获取本地时间,datetime类型
    datetime.utcfromtimestamp(ts) # 获取UTC时间,datetime类型
    

    获取当前时间

    # coding: utf-8
    
    from datetime import datetime
    
    now = datetime.now()
    print(now)
    print(now.strftime('%Y-%m-%d %H:%M:%S'))
    
    print(type(now))
    

    输出:

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

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

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

    输出:

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

    获取时间戳

    # coding: utf-8
    
    from datetime import datetime
    import time
    
    now = datetime.now()
    print(now)
    
    # datetime模块提供
    print(now.timestamp())
    
    # time模块提供
    print(time.time())
    

    输出:

    2017-02-06 23:26:54.631582
    1486394814.631582
    1486394814.631582
    

    小数位表示毫秒数。

    自定义时间转换为时间戳:

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

    输出:

    1486394960.0
    1486394960.0
    

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

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

    时间戳转日期:

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

    输出:

    2017-02-06 23:38:05.213937
    2017-02-06 15:38:05.213937
    

    datetime加减

    可以直接导入timedelta类实现日期加减:

    # coding: utf-8
    
    from datetime import datetime, timedelta
    import time
    
    now = datetime.now()
    # now += timedelta(hours=10)
    # now += timedelta(minutes=10)
    # now += timedelta(weeks=1)
    now += timedelta(days=-1, hours=1, minutes=1, seconds=10)
    
    print(now)
    

    输出:

    2017-02-06 00:47:12.395231
    

    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 当前时区的名称
    %% %号本身
    

    time模块

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

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

    输出:

    1486797515.78742
    
    2017-02-11 15:18:35
    
    time.struct_time(tm_year=2017, tm_mon=2, tm_mday=11, tm_hour=15, tm_min=18, tm_sec=35, tm_wday=5, tm_yday=42, tm_isdst=0)
    
    1486797515.0
    1486796618.0
    
    time.struct_time(tm_year=2017, tm_mon=2, tm_mday=11, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=42, tm_isdst=-1)
    
    sleeping...
    sleeping end.
    

    时间元组

    下面是Python时间元组:

    | 序号 | 属性 | 值 |
    |--|--|
    | 0 | tm_year | 2008 |
    | 1 | tm_mon | 1 到 12 |
    | 2 | tm_mday | 1 到 31 |
    | 3 | tm_hour | 0 到 23 |
    | 4 | tm_min | 0 到 59 |
    | 5 | tm_sec | 0 到 61 (60或61 是闰秒) |
    | 6 | tm_wday | 0到6 (0是周一) |
    | 7 | tm_yday | 1 到 366(儒略历) |
    | 8 | tm_isdst | -1, 0, 1, -1是决定是否为夏令时的旗帜 |

    time模块内置函数

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

    序号 函数 描述
    1 time.altzone 返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。
    2 time.asctime([tupletime]) 接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18时07分14秒)的24个字符的字符串。
    3 time.clock( ) 用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。
    4 time.ctime([secs]) 作用相当于asctime(localtime(secs)),未给参数相当于asctime()
    5 time.gmtime([secs]) 接收时间辍(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组t。注:t.tm_isdst始终为0
    6 time.localtime([secs]) 接收时间辍(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组t(t.tm_isdst可取0或1,取决于当地当时是不是夏令时)。
    7 time.mktime(tupletime) 接受时间元组并返回时间辍(1970纪元后经过的浮点秒数)。
    8 time.sleep(secs) 推迟调用线程的运行,secs指秒数。
    9 time.strftime(fmt[,tupletime]) 接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。
    10 time.strptime(str,fmt='%a %b %d %H:%M:%S %Y') 根据fmt的格式把一个时间字符串解析为时间元组。
    11 time.time( ) 返回当前时间的时间戳(1970纪元后经过的浮点秒数)。
    12 time.tzset() 根据环境变量TZ重新初始化时间相关设置。
  • 相关阅读:
    国产化硬件设备性能追踪
    遇到的 超时重传
    系统加载
    nginx 全景图 转载
    引擎国产化适配&重构笔记
    记录一次syn后只收到ack的情况 --timewait
    PCIe网卡查看工具
    短说 反向代理&透传代理如何关闭connect
    XDP/AF_XDP ? eBPF
    ipvs--eBPF转载
  • 原文地址:https://www.cnblogs.com/52fhy/p/6372194.html
Copyright © 2011-2022 走看看