zoukankan      html  css  js  c++  java
  • Python时间获取及转换知识汇总

    时间处理是我们日常开发中最最常见的需求,例如:获取当前datetime、获取当天date、获取明天/前N天、获取当天开始和结束时间(00:00:00 23:59:59)、获取两个datetime的时间差、获取本周/本月/上月最后一天等。而这些转换看起来很乱不容易记住,那么今天我们就来总结一下python的时间的处理。

    原则:以datetime为中心, 起点或中转, 转化为目标对象, 涵盖了大多数业务场景中需要的日期转换处理

    步骤:

    1. 掌握几种对象及其关系

    2. 了解每类对象的基本操作方法

    3. 通过转化关系转化

    datetime是date与time的结合体,包括date与time的所有信息。

    函数原型是:

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

    各参数的含义与date、time的构造函数中的一样,要注意参数值的范围。 

    实例:

    1. 获取datetime对象

    代码如下:

    1
    2
    3
    4
    5
    >>> import datetime
    >>> now = datetime.datetime.now()
    >>> now
    datetime.datetime(2016, 11, 26, 8, 34, 30, 876359)
    >>> type(now)

    2. 获取timestamp(时间戳)

    时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数。它也被称为 Unix 时间戳(Unix Timestamp)。

    代码如下:

    1
    2
    3
    >>> import time
    >>> time.time()
    1480120686.733905

    3. 获取time tuple (元组)

    代码如下:

    1
    2
    3
    >>> import time
    >>> time.localtime()
    time.struct_time(tm_year=2016, tm_mon=11, tm_mday=26, tm_hour=8, tm_min=39, tm_sec=33, tm_wday=5, tm_yday=331, tm_isdst=0)

    4. 获取时间string(字符串)

    字符串格式化参数列表:

    datetime. strftime (format)  

    %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:  时区名称(如果是本地时间,返回空字符串)  

    %%:  %% => %

    代码如下:

    1
    2
    3
    >>> import datetime
    >>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    '2016-11-26 08:40:39'

    5. date(日期)

    代码如下:

    1
    2
    3
    >>> import datetime
    >>> datetime.datetime.now().date()
    datetime.date(2016, 11, 26)

    6. 获取当天date

    代码如下:

    1
    2
    3
    >>> import datetime
    >>> datetime.date.today()
    datetime.date(2016, 11, 26)

    7. 获取明天/前N天

    明天

    代码如下:

    1
    2
    3
    >>> import datetime
    >>> datetime.date.today() + datetime.timedelta(days=1)
    datetime.date(2016, 11, 27)

    两天前

    代码如下:

    1
    2
    3
    4
    5
    >>> import datetime
    >>> datetime.datetime.now()
    datetime.datetime(2016, 11, 26, 8, 42, 59, 665368)
    >>> datetime.datetime.now() - datetime.timedelta(days=3)
    datetime.datetime(2016, 11, 24, 8, 43, 14, 696948)

    8. 获取当天开始和结束时间(00:00:00 23:59:59)

    代码如下:

    1
    2
    3
    4
    5
    >>> import datetime
    >>> datetime.datetime.combine(datetime.date.today(), datetime.time.min)
    datetime.datetime(2016, 11, 26, 0, 0)
    >>> datetime.datetime.combine(datetime.date.today(), datetime.time.max)
    datetime.datetime(2016, 11, 26, 23, 59, 59, 999999)

    9. 获取两个datetime的时间差

    代码如下:

    1
    2
    3
    >>> import datetime
    >>> (datetime.datetime(2016,12,13,12,0,0) - datetime.datetime.now()).total_seconds()  
    1480506.809658

    10. 获取本周/本月/上月最后一天

    本周

    代码如下:

    1
    2
    3
    4
    5
    6
    7
    >>> import datetime
    >>> today = datetime.date.today()
    >>> today
    datetime.date(2016, 11, 26)
    >>> sunday = today + datetime.timedelta(6 - today.weekday())
    >>> sunday
    datetime.date(2016, 11, 27)

    本月

    代码如下:

    1
    2
    3
    4
    5
    6
    >>> import calendar
    >>> today = datetime.date.today()
    >>> _, last_day_num = calendar.monthrange(today.year, today.month)
    >>> last_day = datetime.date(today.year, today.month, last_day_num)
    >>> last_day
    datetime.date(2016, 11, 30)

    获取上个月的最后一天(可能跨年)

    代码如下:

    1
    2
    3
    4
    5
    6
    >>> import datetime
    >>> today = datetime.date.today()
    >>> first = datetime.date(day=1, month=today.month, year=today.year)
    >>> lastMonth = first - datetime.timedelta(days=1)
    >>> lastMonth
    datetime.date(2016, 10, 31)

    其他使用例子:

    1
    2
    3
    #当月1号  datetime.date(datetime.date.today().year,datetime.date.today().month,1)  
    #当月1号  datetime.date.today().replace(day=1)  
    #上月1号  (datetime.date.today().replace(day=1) - datetime.timedelta(1)).replace(day=1)
  • 相关阅读:
    hdu 5446 Unknown Treasure lucas和CRT
    Hdu 5444 Elven Postman dfs
    hdu 5443 The Water Problem 线段树
    hdu 5442 Favorite Donut 后缀数组
    hdu 5441 Travel 离线带权并查集
    hdu 5438 Ponds 拓扑排序
    hdu 5437 Alisha’s Party 优先队列
    HDU 5433 Xiao Ming climbing dp
    hdu 5432 Pyramid Split 二分
    Codeforces Round #319 (Div. 1) B. Invariance of Tree 构造
  • 原文地址:https://www.cnblogs.com/paranoia/p/6165134.html
Copyright © 2011-2022 走看看