zoukankan      html  css  js  c++  java
  • python 时间处理(time和datetime介绍)

    python的有关时间的有哪几种呢?今天我们介绍两个:time和datetime

     time模块提供各种操作时间的函数

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

    • datetime.date:表示日期的类。常用的属性有year, month, day;
    • datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;
    • datetime.datetime:表示日期时间。
    • datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
    • datetime.tzinfo:与时区有关的相关信息。

    python中处理的事件类型有哪几种呢?

    * 时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的,如:1382678303.098

    * 以数组的形式表示即(struct_time),共有九个元素,分别表示,同一个时间戳的struct_time会因为时区不同而不同如:time.struct_time(tm_year=2013, tm_mon=10, tm_mday=25, tm_hour=13, tm_min=21, tm_sec=33, tm_wday=4, tm_yday=298, tm_isdst=0)

    解释一下,前六个就不用解释了,解释下后四个:

    tm_wday:(0-6, Monday is 0)

    tm_yday:(day in the year, 1-366)

    tm_isdst:(-1, 0 or 1)  0:普通  1:DST夏令时比正常的早一个小时  -1:根据当前时区

    * 还有一种只能算作一种显示型式,字符串,如:2013-10-25 13:29:39.543000

    为了从实用的角度出发就不把time和datetime分开了,从获取和输出的角度来整理下:

    1. 如何获得时间,如何获得各种格式的时间?

    time模块:

    >>> import time
    >>> time.time()#获得当前时间的时间戳
    1382679270.196
    >>> time.clock()#第一次运行获得当前时间的时间戳,第二次运行就是间隔上一次运行的时间间隔
    2.1380998706449576e-06
    >>> time.mktime((2013,11,11,11,11,11,1,1,0))#利用mktime函数创建一个时间戳
    1384139471.0

    datetime模块:

    >>> from datetime import *
    >>> date.today()*获取今天的日期
    datetime.date(2013, 10, 25)
    >>> datetime.today()#获取今天的日期和时间
    datetime.datetime(2013, 10, 25, 13, 42, 53, 455000)
    >>> datetime.now()#获取当前的日期和时间
    datetime.datetime(2013, 10, 25, 13, 43, 0, 322000)

    2. 有了时间后,再实际中会设计到格式之间的处理,比如数据库中一般会保存时间戳格式的,而现实的时候应该是字符串了吧,那个struct_time,好吧,用的比较少吧?

    time模块:

    时间戳-->struct_time,字符串

    >>> import time
    >>> a = time.time()#获取当前时间的时间戳
    >>> a
    1382680272.862
    >>> time.ctime(a)*将时间戳转换为时间字符串
    'Fri Oct 25 13:51:12 2013'
    >>> time.gmtime(a)#将时间转换为struct_time
    time.struct_time(tm_year=2013, tm_mon=10, tm_mday=25, tm_hour=5, tm_min=51, tm_sec=12, tm_wday=4, tm_yday=298, tm_isdst=0)
    >>> time.localtime()#将当前时间转换为struct_time
    time.struct_time(tm_year=2013, tm_mon=10, tm_mday=25, tm_hour=13, tm_min=52, tm_sec=1, tm_wday=4, tm_yday=298, tm_isdst=0)
    >>> time.localtime(a)#将a转换为struct_time
    time.struct_time(tm_year=2013, tm_mon=10, tm_mday=25, tm_hour=13, tm_min=51, tm_sec=12, tm_wday=4, tm_yday=298, tm_isdst=0)

    struct_time-->字符串,时间戳

    >>> import time
    >>> a = time.localtime()
    >>> a
    time.struct_time(tm_year=2013, tm_mon=10, tm_mday=25, tm_hour=13, tm_min=57, tm_sec=18, tm_wday=4, tm_yday=298, tm_isdst=0)
    >>> b = time.asctime(a)#转换为字符串
    >>> b
    'Fri Oct 25 13:57:18 2013'
    >>> time.mktime(a)#转换为时间戳
    1382680638.0
    >>> time.strftime("%a %b %d %H:%M:%S %Y",a)#转换为字符串
    'Fri Oct 25 13:57:18 2013'

    字符串-->struct_time,PS:字符串不能直接转换为时间戳,需要先转为struct_time

    >>> import time
    >>> a
    time.struct_time(tm_year=2013, tm_mon=10, tm_mday=25, tm_hour=14, tm_min=5, tm_sec=28, tm_wday=4, tm_yday=298, tm_isdst=0)
    >>> b = time.asctime(a)
    >>> b
    'Fri Oct 25 14:05:28 2013'
    >>> c = time.strptime(b,'%a %b %d %H:%M:%S %Y')#按照格式转换为9元组
    >>> c
    time.struct_time(tm_year=2013, tm_mon=10, tm_mday=25, tm_hour=14, tm_min=5, tm_sec=28, tm_wday=4, tm_yday=298, tm_isdst=-1)

    datetime模块:

    介绍几个datetime模块常用的方法:

    datetime.fromtimestamp(time.time())#将时间戳转换为字符串

    from datetime import *
    import time
    
    print 'datetime.max:', datetime.max
    print 'datetime.min:', datetime.min
    print 'datetime.resolution:', datetime.resolution
    print 'today():', datetime.today()
    print 'now():', datetime.now()
    print 'utcnow():', datetime.utcnow()
    print 'fromtimestamp(tmstmp):', datetime.fromtimestamp(time.time())#将时间戳转换为字符串
    print 'utcfromtimestamp(tmstmp):', datetime.utcfromtimestamp(time.time())
    
    # ---- 结果 ----
    # datetime.max: 9999-12-31 23:59:59.999999
    # datetime.min: 0001-01-01 00:00:00
    # datetime.resolution: 0:00:00.000001
    # today(): 2010-04-07 09:48:16.234000
    # now(): 2010-04-07 09:48:16.234000
    # utcnow(): 2010-04-07 01:48:16.234000  # 中国位于+8时间,与本地时间相差8
    # fromtimestamp(tmstmp): 2010-04-07 09:48:16.234000
    # utcfromtimestamp(tmstmp): 2010-04-07 01:48:16.234000

    3. 处理一些特殊的情况,比如需要设定某个时间的间距的时候,用到datetime的datetime.timedelta类。

    见代码:

    #! /usr/bin/python
    # coding=utf-8
    
    from datetime import datetime,timedelta
    
    """
    timedelta代表两个datetime之间的时间差
    """
    now = datetime.now()
    past = past = datetime(2010,11,12,13,14,15,16)
    
    timespan = now - past
    #这会得到一个负数
    past - now
    attrs = [
    ("days",""),( 'seconds',""),( 'microseconds',"毫秒")
    #('min',"最小"),( 'max',"最大"),
    ]
    for k,v in attrs:
        "timespan.%s = %s #%s" % (k,getattr(timespan, k),v)
    
    """
    总共相差的秒数
    """
    timespan.total_seconds()
    
    """
    实例化一个timespan
    请注意它的参数顺序
    timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
    """
    timespan = timedelta(days=1)##timespan = timedelta(minutes=30)
    now - timespan #返回的是datetime型
    now + timespan
    
    timespan * 2 #还可以乘哦。代表二倍
    timespan / 13
    
    #增加一个月
    from calendar import monthrange
    now + timedelta(days=monthrange(start.year,start.month)[1])

    最后列出格式化字符串中的意义:

    %a 星期的简写。如 星期三为Web
    %A 
    星期的全写。如 星期三为Wednesday
    %b 
    月份的简写。如4月份为Apr
    %B月份的全写。如4月份为April 

    %c:  
    日期时间的字符串表示。(如: 04/07/10 10:43:39)
    %d:  
    日在这个月中的天数(是这个月的第几天)
    %f:  
    微秒(范围[0,999999])
    %H:  
    小时(24小时制,[0, 23])
    %I:  
    小时(12小时制,[0, 11])
    %j:  
    日在年中的天数 [001,366](是当年的第几天)
    %m:  
    月份([01,12])
    %M:  
    分钟([00,59])
    %p:  
    AM或者PM
    %S:  
    秒(范围为[00,61],为什么不是[00, 59],参考python手册~_~)
    %U:  
    周在当年的周数当年的第几周),星期天作为周的第一天
    %w:  
    今天在这周的天数,范围为[0, 6],6表示星期天
    %W:  
    周在当年的周数(是当年的第几周),星期一作为周的第一天
    %x:  
    日期字符串(如:04/07/10)
    %X:  
    时间字符串(如:10:43:39)
    %y:  
    2个数字表示的年份
    %Y:  
    4个数字表示的年份
    %z:  
    与utc时间的间隔 (如果是本地时间,返回空字符串)
    %Z:  
    时区名称(如果是本地时间,返回空字符串)
    %%:  
    %% => %

    例子:mysql中select当天的数据:

    today = datetime.datetime.today()
    print today
    yestoday = today - datetime.timedelta(days=1)
    print yestoday
    content1 = db.query("select * from log where time > %s and time < %s",yestoday,today)


    如果取的是前一天的0点到24点的数据则:

    day = datetime.datetime.now()
    oneday = datetime.timedelta(days=1)
    day = day - oneday
    date_from = datetime.datetime(day.year, day.month, day.day, 00, 00, 00)
    date_to = datetime.datetime(day.year, day.month, day.day, 23, 59, 59)
  • 相关阅读:
    MIne FirstBlog
    P6563 [SBCOI2020]一直在你身旁
    P6563 [SBCOI2020]一直在你身旁
    T122085 [SBCOI2020]时光的流逝
    LC 918. Maximum Sum Circular Subarray
    1026 Table Tennis
    LC 1442. Count Triplets That Can Form Two Arrays of Equal XOR
    LC 1316. Distinct Echo Substrings
    LC 493. Reverse Pairs
    1029 Median (二分)
  • 原文地址:https://www.cnblogs.com/maseng/p/3387845.html
Copyright © 2011-2022 走看看