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)
  • 相关阅读:
    JS Map的使用
    C# 创建Windows服务
    Oracle 表空间不足解决办法
    C# 企业微信API开发(获取Token,给用户发送消息)
    企业微信API开发笔记
    css实现div不定宽高垂直水平居中解决方案
    前端面试题目大全(附答案)
    移动Web开发
    jquery 给iframe里的元素添加事件
    Jquery实现可拖动进度条demo
  • 原文地址:https://www.cnblogs.com/maseng/p/3387845.html
Copyright © 2011-2022 走看看