• 17-[模块]-time&datetime


    1.表示时间time方式

    在Python中,用三种方式来表示时间,分别是时间戳、格式化时间字符串和结构化时间

    1.时间戳(timestamp):也就是1970年1月1日之后的秒,
    例如1506388236.216345,可以通过time.time()获得。时间戳是一个浮点数,可以进行加减运算,但请注意不要让结果超出取值范围。
    
    2.格式化的时间字符串(string_time):也就是年月日时分秒这样的我们常见的时间字符串,
    例如2017-09-26 09:12:48,可以通过time.localtime()获得;
    
    3,结构化时间(struct_time):一个包含了年月日时分秒的多元元组,
    例如time.struct_time(tm_year=2017, tm_mon=9, tm_mday=26, tm_hour=9, tm_min=14, tm_sec=50, tm_wday=1, tm_yday=269, tm_isdst=0),可以通过time.strftime('%Y-%m-%d')获得。
    

      

    由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。time模块目前只支持到2038年前。如果需要处理范围之外的日期,请使用datetime模块。

    UTC(Coordinated Universal Time,世界协调时),亦即格林威治天文时间,世界标准时间。我们中国为东八区,比UTC早8个小时,也就是UTC+8。关于UTC的缩写,有个故事,你可能已经注意到了,按英文的缩写,应该是CUT,而不是UTC。但是世界协调时在法文中的缩写是TUC,两国互相不让,作为妥协,最后干脆简称UTC。

    DST(Daylight Saving Time)即夏令时。

    2.time模块的方法

    • time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
    • time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
    • time.time():返回当前时间的时间戳。
    • time.mktime(t):将一个struct_time转化为时间戳。
    • time.sleep(secs):线程推迟指定的时间运行。单位为秒。
    • time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:'Sun Oct 1 12:04:38 2017'。如果没有参数,将会将time.localtime()作为参数传入。
    • time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
    • time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。

      • 举例:time.strftime("%Y-%m-%d %X", time.localtime()) #输出'2017-10-01 12:14:23'
    • time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。

      • 举例:time.strptime('2017-10-3 17:54',"%Y-%m-%d %H:%M") #输出 time.struct_time(tm_year=2017, tm_mon=10, tm_mday=3, tm_hour=17, tm_min=54, tm_sec=0, tm_wday=1, tm_yday=276, tm_isdst=-1)

      

    # time.time() 方法 :当前时间戳
    In [22]: import time
    
    In [23]: time.time()
    Out[23]: 1518865113.717425
    
    In [24]: time.time()/3600/24/365
    Out[24]: 48.1628973505411
    
    In [25]: time.time()/3600/24/365 + 1970
    Out[25]: 2018.1628977987789

    3.结构化时间

    结构化时间元组共有9个元素,按顺序排列如下表:
    
    索引	属性	取值范围
    0	tm_year(年)	比如2017
    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
    6	tm_wday(weekday)	0 - 6(0表示周一)
    7	tm_yday(一年中的第几天)	1 - 366
    8	tm_isdst(是否是夏令时)	默认为-1
    既然结构化时间是一个元组,那么就可以通过索引进行取值,也可以进行分片,或者通过属性名获取对应的值。
    

      

    # time.localtime()    该时区 当前时间的  时间戳转换为结构化时间
    In [26]: time.localtime()                                                                           
    Out[26]: time.struct_time(tm_year=2018, tm_mon=2, tm_mday=17, tm_hour=18, tm_min=59, tm_sec=17, tm_w
    day=5, tm_yday=48, tm_isdst=0)                                                                      
                                                                                                        
    In [27]: a = time.localtime()                                                                       
                                                                                                        
    In [28]: a.tm_year                                                                                  
    Out[28]: 2018                                                                                       
                                                                                                        
    In [29]: a.tm_mon                                                                                   
    Out[29]: 2                                                                                          
                                                                                                        
    In [30]: "%s-%s-%s"%(a.tm_year,a.tm_mon,a.tm_mday)           # 格式化输出                                       
    Out[30]: '2018-2-17'                                                                                
    # 0时区 当前时间 结构化时间
    In [31]: time.gmtime()
    Out[31]: time.struct_time(tm_year=2018, tm_mon=2, tm_mday=17, tm_hour=11, tm_min=2, tm_sec=29, tm_wday=5, tm_yday=48, tm_isdst=0)
    # 结构化转换为时间戳
    In [33]: time.mktime(a)
    Out[33]: 1518865175.0
    
    In [34]: a
    Out[34]: time.struct_time(tm_year=2018, tm_mon=2, tm_mday=17, tm_hour=18, tm_min=59, tm_sec=35, tm_wday=5, tm_yday=48, tm_isdst=0)
    # 表示为这种形式:'Sun Oct 1 12:04:38 2017'
    In [44]: time.asctime()             
    Out[44]: 'Sat Feb 17 19:08:53 2018' 
                                                                   
    # 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式                                    
    In [45]: time.ctime()               
    Out[45]: 'Sat Feb 17 19:09:32 2018' 
    In [46]: time.ctime(123232)
    Out[46]: 'Fri Jan  2 18:13:52 1970'
    
    In [47]: time.ctime(0)
    Out[47]: 'Thu Jan  1 08:00:00 1970'
    
    In [48]: time.ctime(+100)
    Out[48]: 'Thu Jan  1 08:01:40 1970'
    
    In [49]: time.ctime(+1000000)
    Out[49]: 'Mon Jan 12 21:46:40 1970'
    
    In [50]: time.ctime(+10000000000)
    Out[50]: 'Sun Nov 21 01:46:40 2286'

    4.格式化时间

    格式	含义
    %a	本地星期名称的简写(如星期四为Thu)
    %A	本地星期名称的全称(如星期四为Thursday)
    %b	本地月份名称的简写(如八月份为agu)
    %B	本地月份名称的全称(如八月份为august)
    %c	本地相应的日期和时间的字符串表示(如:15/08/27 10:20:06)
    %d	一个月中的第几天(01 - 31)
    %f	微秒(范围0.999999)
    %H	一天中的第几个小时(24小时制,00 - 23)
    %I	第几个小时(12小时制,0 - 11)
    %j	一年中的第几天(001 - 366)
    %m	月份(01 - 12)
    %M	分钟数(00 - 59)
    %p	本地am或者pm的标识符
    %S	秒(00 - 61)
    %U	一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之 前的所有天数都放在第0周。
    %w	一个星期中的第几天(0 - 6,0是星期天)
    %W	和%U基本相同,不同的是%W以星期一为一个星期的开始。
    %x	本地相应日期字符串(如15/08/01)
    %X	本地相应时间字符串(如08:08:10)
    %y	去掉世纪的年份(00 - 99)两个数字表示的年份
    %Y	完整的年份(4个数字表示年份)
    %z	与UTC时间的间隔(如果是本地时间,返回空字符串)
    %Z	时区的名字(如果是本地时间,返回空字符串)
    %%	‘%’字符
    

      

    # strftime() 格式化时间
    In [56]: a
    Out[56]: time.struct_time(tm_year=2018, tm_mon=2, tm_mday=17, tm_hour=18, tm_min=59, tm_sec=35, tm_wday=5, tm_yday=48, tm_isdst=0)
    
    In [55]: time.strftime('%Y-%m-%d')
    Out[55]: '2018-02-17'
    
    In [57]: time.strftime('%Y-%m-%d %H:%M:%S',a)
    Out[57]: '2018-02-17 18:59:35'
    
    In [58]: time.strftime('%Y-%m-%d %H:%M:%S %A',a)
    Out[58]: '2018-02-17 18:59:35 Saturday'
    
    In [59]: time.strftime('%Y-%m-%d %H:%M:%S %a',a)
    Out[59]: '2018-02-17 18:59:35 Sat'
    
    In [60]: time.strftime('%Y-%m-%d %H:%M:%S %p',a)
    Out[60]: '2018-02-17 18:59:35 PM'
    
    In [61]: time.strftime('%Y-%m-%d %H:%M:%S %U',a)
    Out[61]: '2018-02-17 18:59:35 06'
    
    In [64]: time.strftime('%Y-%m-%d %H:%M:%S %U')
    Out[64]: '2018-02-17 19:14:29 06'
    
    In [65]: time.strftime('%Y-%m-%d %H:%M:%S %w')
    Out[65]: '2018-02-17 19:14:33 6'
    
    In [66]: time.strftime('%Y-%m-%d %H:%M:%S %W')
    Out[66]: '2018-02-17 19:14:36 07'
    
    In [67]: time.strftime('%Y-%m-%d %H:%M:%S %z')
    Out[67]: '2018-02-17 19:14:39 Öйú±ê׼ʱ¼ä'
    
    In [68]: time.strftime('%Y-%m-%d %H:%M:%S %Z')
    Out[68]: '2018-02-17 19:14:44 Öйú±ê׼ʱ¼ä'

     5.转换关系

    6.datetime模块

    相比于time模块,datetime模块的接口则更直观、更容易调用

    datetime模块定义了下面这几个类:

    datetime.date:表示日期的类。常用的属性有year, month, day;
    datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;
    datetime.datetime:表示日期时间。
    datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
    datetime.tzinfo:与时区有关的相关信息。(这里不详细充分讨论该类,感兴趣的童鞋可以参考python手册)
    

      

    我们需要记住的方法仅以下几个:

    1.d=datetime.datetime.now() 返回当前的datetime日期类型

    d.timestamp(),d.today(), d.year,d.timetuple()等方法可以调用
      
    
    In [5]: datetime.datetime.now()
    Out[5]: datetime.datetime(2018, 2, 17, 19, 22, 27, 966803)
    
    In [9]: d.timestamp()
    Out[9]: 1518866577.650586
    
    In [10]: d.today()
    Out[10]: datetime.datetime(2018, 2, 17, 19, 23, 17, 125420)
    
    In [11]: d.year
    Out[11]: 2018
    
    In [12]: d.timetuple()
    Out[12]: time.struct_time(tm_year=2018, tm_mon=2, tm_mday=17, tm_hour=19, tm_min=22, tm_sec=57, tm_wday=5, tm_yday=48, tm_isdst=-1)

      

    2.datetime.date.fromtimestamp(322222) 把一个时间戳转为datetime日期类型

    In [13]: datetime.date.fromtimestamp(3232323)
    Out[13]: datetime.date(1970, 2, 7)

    3.时间运算

    >>> datetime.datetime.now()
    datetime.datetime(2017, 10, 1, 12, 53, 11, 821218)
    
    >>> datetime.datetime.now() + datetime.timedelta(4) #当前时间 +4天
    datetime.datetime(2017, 10, 5, 12, 53, 35, 276589)
    
    >>> datetime.datetime.now() + datetime.timedelta(hours=4) #当前时间+4小时
    datetime.datetime(2017, 10, 1, 16, 53, 42, 876275)
    In [21]: datetime.datetime.now() + datetime.timedelta(years=4)
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-21-764417f227f6> in <module>()
    ----> 1 datetime.datetime.now() + datetime.timedelta(years=4)
    
    TypeError: 'years' is an invalid keyword argument for this function

      4.时间替换

    >>> d.replace(year=2999,month=11,day=30)
    
    datetime.date(2999, 11, 30)
    

     

  • 相关阅读:
    用于json的 .ashx 小细节
    (转)写让别人能读懂的代码
    Mvc 中ViewBag Model 查找不到解决
    Windows 2008 R2 配置 DNS 实现二级域名
    Windows Server 2008 DNS服务器安装与配置
    【iOS】swift init构造器
    【iOS】OC-UTC日期字符串格式化
    android使用sharesdk的小感
    【iOS】Swift GCD-下
    【iOS】Swift GCD-上
  • 原文地址:https://www.cnblogs.com/venicid/p/8452094.html
Copyright © 2020-2023  润新知