zoukankan      html  css  js  c++  java
  • python

    python中的time和datetime模块是时间方面的模块

    一、time模块

     time模块中时间表现的格式主要有三种:

      1、timestamp:时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量

      2、struct_time:时间元组,共有九个元素组。

      3、format time :格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。

    1、时间格式转换图:

    2、主要time生成方法和time格式转换方法实例:

      生成timestamp(时间戳)

    1 >>> 
    2 >>> import time
    3 >>> time.time()
    4 1491631287.1797802
    5 >>> #由struct_time生成timestamp
    6 >>> time.mktime(time.localtime())
    7 1491631461.0       #后面始终都是一位小数,0 ?
    8 >>> 

      生成struct_time (时间元组)

     1 >>> #直接生成时间元组
     2 >>> time.localtime()
     3 time.struct_time(tm_year=2017, tm_mon=4, tm_mday=8, tm_hour=14, tm_min=7, tm_sec=20, tm_wday=5, tm_yday=98, tm_isdst=0)
     4 >>> #把时间戳转换为时间元组
     5 >>> time.localtime(time.time())
     6 time.struct_time(tm_year=2017, tm_mon=4, tm_mday=8, tm_hour=14, tm_min=8, tm_sec=5, tm_wday=5, tm_yday=98, tm_isdst=0)
     7 >>> #把localtime()换为gmtime() 就表示格林威治时间
     8 >>> 
     9 >>> #把格式化时间转换为时间元组
    10 >>> time.strptime('2017-4-8 14:12:12','%Y-%m-%d %X')
    11 time.struct_time(tm_year=2017, tm_mon=4, tm_mday=8, tm_hour=14, tm_min=12, tm_sec=12, tm_wday=5, tm_yday=98, tm_isdst=-1)
    12 >>> time.strptime('2017-4-8','%Y-%m-%d')
    13 time.struct_time(tm_year=2017, tm_mon=4, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=98, tm_isdst=-1)
    14 >>> 
        
          属性 值
        tm_year(年)                  比如2017 
        tm_mon(月)                   1 - 12
        tm_mday(日)                  1 - 31
        tm_hour(时)                  0 - 23
        tm_min(分)                   0 - 59
        tm_sec(秒)                   0 - 61
        tm_wday(weekday)             0 - 6(0表示周日)
        tm_yday(一年中的第几天)        1 - 366
        tm_isdst(是否是夏令时)        默认为-1

      生成format_time (格式化时间)

    1 >>> 
    2 >>> #直接生成format_time
    3 >>> time.strftime('%Y-%m-%d %X')
    4 '2017-04-08 14:16:11'
    5 >>> 
    6 >>> #把struct_time转换为format_time
    7 >>> time.strftime('%Y-%m-%d %X',time.localtime())
    8 '2017-04-08 14:17:30'
    9 >>> 
          %Y 年 Year with century as a decimal number.
          %m 月 Month as a decimal number [01,12].
          %d 日 Day of the month as a decimal number [01,31].
          %H 时 Hour (24-hour clock) as a decimal number [00,23].
          %M 分 Minute as a decimal number [00,59].
          %S 秒 Second as a decimal number [00,61].
          %z Time zone offset from UTC.
          %a 周几简写(英文Sun) Locale's abbreviated weekday name.
          %A 周几全名(英文Sunday) Locale's full weekday name.
          %b 月份简写(英语Apr) Locale's abbreviated month name.
          %B 月份全名(英语April) Locale's full month name.
          %c Locale's appropriate date and time representation.
          %I 十二小时制小时数 Hour (12-hour clock) as a decimal number [01,12].
          %p AM/PM Locale's equivalent of either AM or PM.
    %X 本地相应时间
          %x 本地相应日期

      生成固定格式的时间表示格式

     1 >>> time.asctime()
     2 'Sat Apr  8 14:20:04 2017'
     3 >>>
     4 >>> time.ctime()
     5 'Sat Apr  8 14:20:09 2017'
     6 >>> 
     7 >>> time.asctime(time.localtime())
     8 'Sat Apr  8 14:20:27 2017'
     9 >>>
    10 >>> time.ctime(time.time())
    11 'Sat Apr  8 14:20:44 2017'

     3、time加减

     1 >>> 
     2 >>> #timestamp加减是以秒为单位
     3 >>> import time
     4 >>> t1 = time.time()
     5 >>> t2 = t1 + 10
     6 >>> t1
     7 1491634614.3497803
     8 >>> t2
     9 1491634624.3497803
    10 >>> 

    二、datetime模块

    datatime模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime,timedelta,tzinfo。

    1、date类

    datetime.date(year, month, day)

    静态方法和字段

    date.max、date.min:date对象所能表示的最大、最小日期;
    date.resolution:date对象表示日期的最小单位。这里是天。
    date.today():返回一个表示当前本地日期的date对象;
    date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象;
     1 >>> import datetime
     2 >>> datetime.date.max
     3 datetime.date(9999, 12, 31)
     4 >>> datetime.date.min
     5 datetime.date(1, 1, 1)
     6 >>> datetime.date.resolution
     7 datetime.timedelta(1)
     8 >>> datetime.date.today()
     9 datetime.date(2017, 4, 8)
    10 >>> datetime.date.fromtimestamp(time.time())
    11 datetime.date(2017, 4, 8)
    12 >>> 

    方法和属性

    d1 = date(2017,4,8)  #date对象(年月日都不能是以0开头 (2017,04,08)错误 )
    >>> d1 = datetime.date(2017,4,8)
    >>> d1
    datetime.date(2017, 4, 8)
    >>> d1.year
    2017
    >>> d1.month
    4
    >>> d1.day
    8
    >>> 
    d1.replace(year, month, day):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变)
    >>> d2 = d1.replace(2017,3,20)
    >>> d1
    datetime.date(2017, 4, 8)
    >>> d2
    datetime.date(2017, 3, 20)
    >>>
    d1.timetuple():返回日期对应的time.struct_time对象; 
    >>> d1.timetuple()
    time.struct_time(tm_year=2017, tm_mon=4, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=98, tm_isdst=-1)
    >>> 
    d1.weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推; 
    >>> d1.weekday()
    5       #周六
    >>> 
    d1.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推; 
    >>> d1.isoweekday()
    6      #周六   weekday镜像?
    >>> 
    d1.isocalendar():返回格式如(year,sum_week,day)的元组; 
    >>> d1
    datetime.date(2017, 4, 8)
    >>> d1.isocalendar()
    (2017, 14, 6)          #第一个是2017年, 14是 当前为今年的第14周  6 表示 第14周结束后过了6天(当前是15周)
    >>> 
    d1.isoformat():返回格式如'YYYY-MM-DD’的字符串; 
    >>> d1.isoformat()
    '2017-04-08'
    >>> 
    d1.strftime(fmt):和time模块format相同。
    >>> d1.strftime('%Y-%m-%d')
    '2017-04-08'
    >>> 

    2、time类

    datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ) 

    静态方法和字段

    time.min、time.max:time类所能表示的最小、最大时间
    >>> import datetime
    >>> datetime.time.min
    datetime.time(0, 0)
    >>> datetime.time.max
    datetime.time(23, 59, 59, 999999)
    >>> 
    time.resolution:时间的最小单位,这里是1微秒;
    >>> datetime.time.resolution
    datetime.timedelta(0, 0, 1)      #秒,毫秒,微秒
    >>> 

    方法和属性

    t1 = datetime.time(10,23,15)  #time对象 时,分,秒...
    t1.hour、t1.minute、t1.second、t1.microsecond:时、分、秒、微秒;
    >>> t = datetime.time(15,30,20)
    >>> t
    datetime.time(15, 30, 20)
    >>> t.hour
    15
    >>> t.minute
    30
    >>> t.second
    20
    >>> t.microsecond
    0
    >>> 
    t1.tzinfo:时区信息;
    t1.replace([ hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ):创建一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性
    (原有对象仍保持不变);
    t1.isoformat():返回型如"HH:MM:SS"格式的字符串表示;
    t1.strftime(fmt):同time模块中的format;

    3、datetime类

    datetime相当于date和time结合起来。
    datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )

    静态方法和字段

    datetime.today():返回一个表示当前本地时间的datetime对象;
    datetime.now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;
    datetime.utcnow():返回一个当前utc时间的datetime对象;#格林威治时间
    datetime.fromtimestamp(timestamp[, tz]):根据时间戮创建一个datetime对象,参数tz指定时区信息;
    datetime.utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象;
    datetime.combine(date, time):根据date和time,创建一个datetime对象;
    datetime.strptime(date_string, format):将格式字符串转换为datetime对象;

    方法和属性

    dt=datetime.now()#datetime对象
    dt.year、month、day、hour、minute、second、microsecond、tzinfo:
    dt.date():获取date对象;
    dt.time():获取time对象;
    dt. replace ([ year[ , month[ , day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ] ] ]):
    dt. timetuple ()
    dt. utctimetuple ()
    dt. toordinal ()
    dt. weekday ()
    dt. isocalendar ()
    dt. isoformat ([ sep] )
    dt. ctime ():返回一个日期时间的C格式字符串,等效于time.ctime(time.mktime(dt.timetuple()));
    dt. strftime (format)

    4.timedelta类,时间加减

    使用timedelta可以很方便的在日期上做天days,小时hour,分钟,秒,毫秒,微妙的时间计算,如果要计算月份则需要另外的办法。

     1 >>> import datetime
     2 >>> d = datetime.datetime.now()
     3 >>> d
     4 datetime.datetime(2017, 4, 8, 15, 42, 1, 656144) 8 >>> d1 = d + datetime.timedelta(days=-1)      #昨天
     9 >>> d1
    10 datetime.datetime(2017, 4, 7, 15, 42, 1, 656144)
    11 >>> d2 = d - datetime.timedelta(days=1)      #昨天
    12 >>> d2
    13 datetime.datetime(2017, 4, 7, 15, 42, 1, 656144)
    14 >>> d3 = d + datetime.timedelta(days=1)          #明天
    15 >>> d3     
    16 datetime.datetime(2017, 4, 9, 15, 42, 1, 656144)
    17 >>> 

     5、tzinfo时区类

    #! /usr/bin/python
    # coding=utf-8
    
    from datetime import datetime, tzinfo,timedelta
    
    """
    tzinfo是关于时区信息的类
    tzinfo是一个抽象类,所以不能直接被实例化
    """
    class UTC(tzinfo):
        """UTC"""
        def __init__(self,offset = 0):
            self._offset = offset
    
        def utcoffset(self, dt):
            return timedelta(hours=self._offset)
    
        def tzname(self, dt):
            return "UTC +%s" % self._offset
    
        def dst(self, dt):
            return timedelta(hours=self._offset)
    
    #北京时间
    beijing = datetime(2011,11,11,0,0,0,tzinfo = UTC(8))
    print "beijing time:",beijing
    #曼谷时间
    bangkok = datetime(2011,11,11,0,0,0,tzinfo = UTC(7))
    print "bangkok time",bangkok
    #北京时间转成曼谷时间
    print "beijing-time to bangkok-time:",beijing.astimezone(UTC(7))
    
    #计算时间差时也会考虑时区的问题
    timespan = beijing - bangkok
    print "时差:",timespan
    
    #Output==================
    # beijing time: 2011-11-11 00:00:00+08:00
    # bangkok time 2011-11-11 00:00:00+07:00
    # beijing-time to bangkok-time: 2011-11-10 23:00:00+07:00
    # 时差: -1 day, 23:00:00
     
  • 相关阅读:
    -bash: fork: Cannot allocate memory 问题的处理
    Docker top 命令
    docker常见问题修复方法
    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
    What's the difference between encoding and charset?
    hexcode of é î Latin-1 Supplement
    炉石Advanced rulebook
    炉石bug反馈
    Sidecar pattern
    SQL JOIN
  • 原文地址:https://www.cnblogs.com/xtsec/p/6682052.html
Copyright © 2011-2022 走看看