zoukankan      html  css  js  c++  java
  • 常用模块

    一、简介

    datetime是Python处理日期和时间的标准库。

    1、datetime模块中常用的类:

    类名

    功能说明

    date

    日期对象,常用的属性有year, month, day

    time

    时间对象

    datetime

    日期时间对象,常用的属性有hour, minute, second

    2、datetime模块中包含的常量

    常量

    功能说明

    用法

    返回值

    MAXYEAR

    返回能表示的最大年份

    datetime.MAXYEAR

    9999

    MINYEAR

    返回能表示的最小年份

    datetime.MINYEAR

    1

     

    二、date类

    (一)、date对象构成

    1、date对象由year年份、month月份及day日期三部分构成: 

    >>> datetime.date(2018, 5, 1)
    datetime.date(2018, 5, 1)

    2、通过year, month, day三个数据描述符可以进行访问: 

    >>> date_today = datetime.date.today()
    >>> date_today
    datetime.date(2018, 4, 25)
    >>> date_today.year
    2018
    >>> date_today.month
    4
    >>> date_today.day
    25
    >>>

    3、也可以用__getattribute__()方法获得上年、月、日的值:

    >>> date_today.__getattribute__("year")
    2018
    >>> date_today.__getattribute__("month")
    4
    >>> date_today.__getattribute__("day")
    25
    >>>

    (二)、date对象中包含的方法与属性

    1、用于日期比较大小的方法

    方法名

    方法说明

    用法

    __eq__()

    是否等于(x==y)

    x.__eq__(y)

    __ge__()

    是否大于等于(x>=y)

    x.__ge__(y)

    __gt__()

    是否大于(x>y)

    x.__gt__(y)

    __le__()

    是否小于等于(x<=y)

    x.__le__(y)

    __lt__()

    是否小于(x<y)

    x.__lt__()

    __ne__()

    是否不等于(x!=y)

    x.__ne__(y)

    注:以上方法的返回值为True或者False

    示例代码如下:

    >>> a = datetime.date(2018, 4, 25)
    >>> b = datetime.date(2018, 5, 1)
    >>> a.__eq__(b)
    False
    >>> a.__ge__(b)
    False
    >>> a.__gt__(b)
    False
    >>> a.__le__(b)
    True
    >>> a.__lt__(b)
    True
    >>> a.__ne__(b)
    True
    >>>

    2、获得两个日期相关多少天

    使用__sub__()和__rsub__()方法,其实两个方法差不太多,一个是正向操作,一个是反向操作:

    方法名

    方法说明

    用法

    __sub__()

    x - y

    x.__sub__(y)

    __rsub__()

    y - x

    x.__rsub__(y)

    示例代码如下:

    >>> a = datetime.date(2018, 4, 25)
    >>> b = datetime.date(2018, 5, 1)
    >>> a.__sub__(b)
    datetime.timedelta(-6)
    >>> a.__rsub__(b)
    datetime.timedelta(6)
    >>>

    计算结果的返回值类型为datetime.timedelta,如果想获得整数类型的结果,其操作如下:

    >>> a.__sub__(b).days
    -6
    >>> a.__rsub__(b).days
    6
    >>>

    3、ISO标准化日期

    如果想要让所使用的日期符合ISO标准,那么使用如下四个方法:

    1)、isocalendar():返回一个包含三个值的元组,三个值依次为year年份、week number周数、weekday星期数(周一为1…周日为7)

    示例代码如下:

    >>> date_today = datetime.date.today()
    >>> date_today.isocalendar()
    (2018, 17, 3)
    >>> date_today.isocalendar()[0]
    2018
    >>> date_today.isocalendar()[1]
    17
    >>> date_today.isocalendar()[2]
    3
    >>>

    2)、isoformat():返回符合ISO标准(YYYY-MM-DD)的日期字符串

    示例代码如下:

    >>> date_today = datetime.date.today()
    >>> date_today.isoformat()
    '2018-04-25'
    >>>

    3)、isoweekday():返回符合ISO标准的指定日期所在的星期数(周一为1…周日为7)

    示例代码如下:

    >>> date_today = datetime.date.today()
    >>> date_today.isoweekday()
    3
    >>>

    4)、weekday():与isoweekday()相似,只不过是weekday()方法返回的是周一为0,周日为6

    示例代码如下:

    >>> date_today = datetime.date.today()
    >>> date_today.weekday()
    2
    >>>

    4、其他方法与属性

    1)、timetuple():该方法为了兼容time.localtime()返回一个类型为time.struct_time的数组,但跟时间相关的部分元素值为0

    >>> date_today = datetime.date.today()
    >>> date_today.timetuple()
    time.struct_time(tm_year=2018, tm_mon=4, tm_mday=25, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=115, tm_isdst=-1)
    >>> date_today.timetuple().tm_year
    2018
    >>> date_today.timetuple().tm_mon
    4
    >>> date_today.timetuple().tm_mday
    25
    >>>

    2)、toordinal():返回公元公历开始到现在的天数。公元1年1月1日为1

    >>> date_today = datetime.date.today()
    >>> date_today.toordinal()
    736809
    >>>

    3)、replace():返回一个替换指定日期字段的新date对象。参数3个可选参数,分别为year, month, day。需注意替换是产生新对象,不会影响原date对象

    >>> date_today = datetime.date.today()
    >>> date_today
    datetime.date(2018, 4, 25)
    >>> new_date = date_today.replace(2017)
    >>> new_date
    datetime.date(2017, 4, 25)
    >>> date_today
    datetime.date(2018, 4, 25)
    >>> new_date = date_today.replace(2016, 5, 1)
    >>> new_date
    datetime.date(2016, 5, 1)
    >>> date_today
    datetime.date(2018, 4, 25)
    >>>

    4)、resolution:date对象表示日期的最小单位。这里是天

    >>> datetime.date.resolution
    datetime.timedelta(1)
    >>>

    5)、fromordinal():将整型数字(从公元公历开始的天数)转换成date对象

    >>> date_for_int = date_today.fromordinal(736809)
    >>> date_for_int
    datetime.date(2018, 4, 25)

    6)、fromtimestamp():根据给定的时间戳,返回一个date对象

    >>> time.time()
    1524625600.0626569
    >>> datetime.date.fromtimestamp(time.time())
    datetime.date(2018, 4, 25)
    >>>

    7)、today():返回当前日期

    >>> datetime.date.today()
    datetime.date(2018, 4, 25)
    >>>

    8)、max:date类能表示的最大年、月、日的数值

    >>> datetime.date.max
    datetime.date(9999, 12, 31)
    >>>

    9)、min:date类能表示的最小的年、月、日的数值

    >>> datetime.date.min
    datetime.date(1, 1, 1)
    >>>

    (三)、日期的字符串输出

    1、__format__():将日期对象转化为指定格式的字符串

    >>> date_today = datetime.date.today()
    >>> date_today.__format__("%Y-%m-%d")
    '2018-04-25'
    >>> date_today.__format__("%Y/%m/%d")
    '2018/04/25'
    >>> date_today.__format__("%y/%m/%d")
    '18/04/25'
    >>> date_today.__format__("%D")
    '04/25/18'
    >>>

    与此方法等价的方法为strftime()

    >>> date_today = datetime.date.today()
    >>> date_today.strftime("%Y-%m-%d")
    '2018-04-25'
    >>> date_today.strftime("%Y/%m/%d")
    '2018/04/25'
    >>> date_today.strftime("%y/%m/%d")
    '18/04/25'
    >>> date_today.strftime("%D")
    '04/25/18'
    >>>

    关于时间日期格式化符号见文末的时间日期格式化符号表。

    2、__str__():简单的获得日期的字符串

    >>> date_today = datetime.date.today()
    >>> date_today.__str__()
    '2018-04-25'
    >>>

    3、ctime():获得ctime样式的格式

    >>> date_today = datetime.date.today()
    >>> date_today.ctime()
    'Wed Apr 25 00:00:00 2018'
    >>>

    三、time类

    (一)、time类的数据构成

    time类由hour小时、minute分钟、second秒钟、microsecond毫秒和tzinfo时区五部分组成

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

    相应的,time类中就有上述五个变量来存储对应的值:

    >>> temp_time = datetime.time(13, 54, 43, 801)
    >>> temp_time
    datetime.time(13, 54, 43, 801)
    >>> temp_time.hour
    13
    >>> temp_time.minute
    54
    >>> temp_time.second
    43
    >>> temp_time.microsecond
    801
    >>> temp_time.tzinfo
    >>>

    与date类一样,time类也包含__getattribute__()方法可以读取相应属性:

    >>> temp_time = datetime.time(13, 54, 43, 801)
    >>> temp_time.__getattribute__('hour')
    13
    >>> temp_time.__getattribute__('minute')
    54
    >>> temp_time.__getattribute__('second')
    43
    >>> temp_time.__getattribute__('microsecond')
    801
    >>> temp_time.__getattribute__('tzinfo')
    >>>

    (二)、time类中的方法和属性

    1、用于比较时间大小的方法

    方法名

    方法说明

    用法

    __eq__()

    是否等于(x==y)

    x.__eq__(y)

    __ge__()

    是否大于等于(x>=y)

    x.__ge__(y)

    __gt__()

    是否大于(x>y)

    x.__gt__(y)

    __le__()

    是否小于等于(x<=y)

    x.__le__(y)

    __lt__()

    是否小于(x<y)

    x.__lt__()

    __ne__()

    是否不等于(x!=y)

    x.__ne__(y)

    注:以上方法的返回值为True或者False

    示例代码如下: 

    >>> a = datetime.time(12, 20, 59, 899)
    >>> b = datetime.time(11, 20, 59, 899)
    >>> a.__eq__(b)
    False
    >>> a.__ge__(b)
    True
    >>> a.__gt__(b)
    True
    >>> a.__le__(b)
    False
    >>> a.__lt__(b)
    False
    >>> a.__ne__(b)
    True
    >>>

    2、其他属性

    1)、max:最大的时间表示数值:

    >>> datetime.time.max
    datetime.time(23, 59, 59, 999999)
    >>>

    2)、min:最小的时间表示数值:

    >>> datetime.time.min
    datetime.time(0, 0)
    >>>

    (三)、时间的字符串输出

    1、__format__():将日期对象转化为指定格式的字符串

    >>> temp_time = datetime.time(12, 20, 59, 899)
    >>> temp_time
    datetime.time(12, 20, 59, 899)
    >>> temp_time.__format__("%H:%M:%S")
    '12:20:59'
    >>>

    与此方法等价的方法为strftime()方法

    >>> temp_time = datetime.time(12, 20, 59, 899)
    >>> temp_time
    datetime.time(12, 20, 59, 899)
    >>> temp_time.strftime("%H:%M:%S")
    '12:20:59'
    >>>

    关于时间日期格式化符号见文末的时间日期格式化符号表。

    2、__str__():简单的获得日期的字符串

    >>> temp_time = datetime.time(12, 20, 59, 899)
    >>> temp_time
    datetime.time(12, 20, 59, 899)
    >>> temp_time.__str__()
    '12:20:59.000899'
    >>>

    3、ifoformat():ISO标准输出

    >>> temp_time = datetime.time(12, 20, 59, 899)
    >>> temp_time
    datetime.time(12, 20, 59, 899)
    >>> temp_time.isoformat()
    '12:20:59.000899'
    >>>

    四、datetime类

    (一)、datetime类的数据构成

    datetime类可以看做是date类和time类的结合体,其大部分的方法和属性都继承于这两个类,相关的方法可以参考date类和time类。其数据构成也是由这两个类所有的属性所组成的。

    datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])

    (二)、datetime的专属方法和属性(date类和time类所没有的)

    1、date():返回datetime对象的日期部分

    >>> datetime_now = datetime.datetime.now()
    >>> datetime_now
    datetime.datetime(2018, 4, 25, 14, 31, 57, 555633)
    >>> datetime_now.date()
    datetime.date(2018, 4, 25)
    >>>

    2、time():返回datetime对象的时间部分

    >>> datetime_now = datetime.datetime.now()
    >>> datetime_now
    datetime.datetime(2018, 4, 25, 14, 33, 5, 444498)
    >>> datetime_now.time()
    datetime.time(14, 33, 5, 444498)
    >>>

    3、utctimetuple():返回UTC时间元组

    >>> datetime_now = datetime.datetime.now()
    >>> datetime_now
    datetime.datetime(2018, 4, 25, 14, 33, 5, 444498)
    >>> datetime_now.utctimetuple()
    time.struct_time(tm_year=2018, tm_mon=4, tm_mday=25, tm_hour=14, tm_min=33, tm_sec=5, tm_wday=2, tm_yday=115, tm_isdst=0)
    >>>

    4、combine():将一个date对象和一个time对象合并生成一个datetime对象

    >>> datetime_now = datetime.datetime.now()
    >>> datetime_now
    datetime.datetime(2018, 4, 25, 14, 33, 5, 444498)
    >>> datetime.datetime.combine(datetime_now.date(), datetime_now.time())
    datetime.datetime(2018, 4, 25, 14, 33, 5, 444498)
    >>>

    5、now():返回当前日期时间的datetime对象

    >>> datetime_now = datetime.datetime.now()
    >>> datetime_now
    datetime.datetime(2018, 4, 25, 14, 33, 5, 444498)

    6、utcnow():返回当前日期时间的UTC datetime对象

    >>> datetime_now = datetime.datetime.utcnow()
    >>> datetime_now
    datetime.datetime(2018, 4, 25, 6, 37, 47, 665777)
    >>>

    7、strptime():根据string, format两个参数,返回一个对应的datetime对象

    >>> datetime.datetime.strptime("2018-4-25 14:33", "%Y-%m-%d %H:%M")
    datetime.datetime(2018, 4, 25, 14, 33)
    >>>

    8、utcfromtimestamp():UTC时间戳的datetime对象

    >>> datetime.datetime.utcfromtimestamp(time.time())
    datetime.datetime(2018, 4, 25, 6, 41, 31, 888988)
    >>>

    五、timedelta类

    timedelta类是用来计算两个datetime对象的差值的。

    此类中包含如下属性:

    1、days:天数

    2、microseconds:微秒数(>=0并且<1秒)

    3、seconds:秒数(>=0并且<1天)

    六、日期计算实例

    1、获取当前日期时间:

    >>> datetime_now = datetime.datetime.now()
    >>> datetime_now
    datetime.datetime(2018, 4, 25, 14, 45, 59, 239506)
    >>> date_today = datetime.date.today()
    >>> date_today
    datetime.date(2018, 4, 25)
    >>> datetime_now.date()
    datetime.date(2018, 4, 25)
    >>> datetime_now.time()
    datetime.time(14, 45, 59, 239506)
    >>>

    2、获取上个月第一天和最后一天的日期:

    >>> date_today = datetime.date.today()
    >>> date_today
    datetime.date(2018, 4, 25)
    >>> mlast_day = datetime.date(date_today.year, date_today.month, 1) - datetime.timedelta(1)
    >>> mlast_day
    datetime.date(2018, 3, 31)
    >>> mfirst_day = datetime.date(mlast_day.year, mlast_day.month, 1)
    >>> mfirst_day
    datetime.date(2018, 3, 1)
    >>>

    3、获取时间差:

    >>> start_time = datetime.datetime.now()
    >>> end_time = datetime.datetime.now()
    >>> (end_time - start_time).seconds
    10
    >>>
    >>> (end_time - start_time).days
    0
    >>> (end_time - start_time).microseconds
    22076
    >>>

    4、计算当前时间向后8个小时的时间:

    >>> datetime1 = datetime.datetime.now()
    >>> datetime2 = datetime1 + datetime.timedelta(hours = 8)
    >>> datetime1
    datetime.datetime(2018, 4, 25, 14, 55, 41, 598834)
    >>> datetime2
    datetime.datetime(2018, 4, 25, 22, 55, 41, 598834)
    >>>

    timedelta的参数可以有:days(天)、hours(小时)、minutes(分钟)、seconds(秒钟)、microseconds(微秒)

    5、计算上周一和周日的日期:

    >>> date_today = datetime.date.today()
    >>> date_today
    datetime.date(2018, 4, 25)
    >>> today_weekday = date_today.isoweekday()
    >>> today_weekday
    3
    >>> last_sunday = date_today - datetime.timedelta(days = today_weekday)
    >>> last_sunday
    datetime.date(2018, 4, 22)
    >>> last_monday = last_sunday - datetime.timedelta(days = 6)
    >>> last_monday
    datetime.date(2018, 4, 16)
    >>>

    6、计算指定日期当月最后一天的日期和当月的天数:

    >>> temp_date = datetime.date(2018, 4, 25)
    >>> def eomonth(date_obj):
    ...     if date_obj.month == 12:
    ...         next_month_first_date = datetime.date(date_obj.year + 1, 1, 1)
    ...     else:
    ...         next_month_first_date = datetime.date(date_obj.year, date_obj.month + 1, 1)
    ...     return next_month_first_date - datetime.timedelta(1)
    ...
    >>> eomonth(temp_date)
    datetime.date(2018, 4, 30)
    >>> eomonth(temp_date).day
    30
    >>>

    7、计算指定日期下个月当天的日期:

    >>> temp_date = datetime.date(2018, 4, 25)
    >>> def edate(date_obj):
    ...     if date_obj.month == 12:
    ...         next_month_date = datetime.date(date_obj.year + 1, 1, date_obj.day)
    ...     else:
    ...         next_month_first_day = datetime.date(date_obj.year, date_obj.month + 1, 1)
    ...         if date_obj.day > eomonth(next_month_first_day).day:
    ...            next_month_date = datetime.date(date_obj.year, date_obj.month + 1, eomonth(next_month_first_day).day)
    ...         else:
    ...             next_month_date = datetime.date(date_obj.year, date_obj.month +1, date_obj.day)
    ...     return next_month_date
    ...
    >>> edate(temp_date)
    datetime.date(2018, 5, 25)
    >>>

    注:这里调用了上一个事例中的eomonth()函数。

    8、获得本周一至今天的时间段并获得上周对应的时间段:

    >>> temp_today = datetime.date.today()
    >>> temp_today
    datetime.date(2018, 4, 25)
    >>> this_monday = temp_today - datetime.timedelta(temp_today.isoweekday() - 1)
    >>> this_monday
    datetime.date(2018, 4, 23)
    >>> last_weekday = temp_today - datetime.timedelta(7)
    >>> last_weekday
    datetime.date(2018, 4, 18)
    >>> last_monday = this_monday - datetime.timedelta(7)
    >>> last_monday
    datetime.date(2018, 4, 16)
    >>>

    附录:Python中时间日期格式化符号对应表

    符号

    说明

    %y

    两位数的年份(00-99)

    %Y

    四位数的年份表示(0001-9999)

    %m

    两位数的月份(01-12)

    %d

    两位数的天数(01-31)

    %H

    24小时制小时数(0-23)

    %I

    12小时制小时数(1-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),0表示周日

    %W

    一年中的第几周(00-53),周一为星期的开始

    %x

    本地相应的日期表示

    %X

    本地相应的时间表示

    %Z

    当前时区的名称

    %%

    %号本身

     

  • 相关阅读:
    特殊json处理
    css3
    居中定位
    微信支付
    vue 封装cookie,请求,登录拦截,接口拦截
    vue中axios的封装(简易版拦截,get,post
    JS的Event Loop
    JS模块化
    JS的排序算法
    时间复杂度 空间复杂度
  • 原文地址:https://www.cnblogs.com/mayi0312/p/8945395.html
Copyright © 2011-2022 走看看