python 日期計算案例

1、計算兩個日期內的全部月

def get_month_interval(start_str, end_str):
    start_year, start_month = list(map(int, start_str.split('-')))
    end_year, end_month = list(map(int, end_str.split('-')))
    result = []
    for year in range(start_year, end_year + 1):
        year_str = str(year)
        if year == end_year and year == start_year:  # 當前年份 =結束年份 and 當前年份 = 起始年份
            for month in range(start_month, end_month):
                date_str = year_str + '-' + str(month)
                result.append(date_str)
        elif year < end_year and year == start_year:  # 當前年份<結束年份 and 當前年份 = 起始年份
            for month in range(start_month, 13):
                date_str = year_str + '-' + str(month)
                result.append(date_str)
        elif year < end_year and year != start_year:  # 當前年份<結束年份 and 當前年份 != 起始年份
            for month in range(1, 13):
                date_str = year_str + '-' + str(month)
                result.append(date_str)
        else:  # 當前年份 = 結束年份 and 當前年份 != 起始年份
            for month in range(1, end_month + 1):
                date_str = year_str + '-' + str(month)
                result.append(date_str)
    return result

測試結果以下:python

>>> get_month_interval('2015-11','2016-2')
['2015-11', '2015-12', '2016-1', '2016-2']

2、計算兩個日期之間的差值

def get_date_diff(start_str, end_str):
    import datetime
    start = datetime.datetime.strptime(start_str, '%Y-%m-%d %H:%M:%S.%f')
    end = datetime.datetime.strptime(end_str, '%Y-%m-%d %H:%M:%S.%f')
    diff = end - start
    # 相差天數
    print('相差天數:', diff.days)
    # 相差秒數
    print('相差秒數:', diff.seconds)
    # 相差微秒數
    print('相差微秒數:', diff.microseconds)

測試結果以下:app

>>> get_date_diff('2016-1-25 23:59:59.100','2016-2-27 22:58:58.50')
相差天數: 32
相差秒數: 82739
相差微秒數: 400000

3、計算當前時間延後指定時間的日期

>>> compute_date(days=1,weeks=2)
2016-11-19 15:24:41.203940
2016-12-04 15:24:41.203940

測試結果以下:函數

#計算通過兩週一天以後的日期
>>> compute_date(days=1,weeks=2)
2016-11-19 15:24:41.203940
2016-12-04 15:24:41.203940

4、其餘

 

# 把UTC時間轉本地時間

from datetime import datetime from dateutil import tz # METHOD 1: Hardcode zones: from_zone = tz.gettz('UTC') to_zone = tz.gettz('America/New_York') # METHOD 2: Auto-detect zones: from_zone = tz.tzutc() to_zone = tz.tzlocal() # utc = datetime.utcnow() utc = datetime.strptime('2011-01-21 02:37:21', '%Y-%m-%d %H:%M:%S') # Tell the datetime object that it's in UTC time zone since # datetime objects are 'naive' by default utc = utc.replace(tzinfo=from_zone) # Convert time zone central = utc.astimezone(to_zone)

 

  

 

5、時間日期格式化符號

%y 兩位數的年份表示(00-99)
%Y 四位數的年份表示(000-9999)
%m 月份(01-12)
%d 月內中的一天(0-31)
%H 24小時制小時數(0-23)
%I 12小時制小時數(01-12) 
%M 分鐘數(00=59)
%S 秒(00-59)
%f  毫秒(小數點後6位)測試


%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化的月份名稱
%B 本地完整的月份名稱
%c 本地相應的日期表示和時間表示
%j 年內的一天(001-366)
%p 本地A.M.或P.M.的等價符
%U 一年中的星期數(00-53)星期天爲星期的開始
%w 星期(0-6),星期天爲星期的開始
%W 一年中的星期數(00-53)星期一爲星期的開始
%x 本地相應的日期表示
%X 本地相應的時間表示
%Z 當前時區的名稱
%% %號自己spa

6、相關模塊

datetime模塊

•datetime.date:表示日期的類。經常使用的屬性有year, month, day; 
•datetime.time:表示時間的類。經常使用的屬性有hour, minute, second, microsecond; 
•datetime.datetime:表示日期時間。 
•datetime.timedelta:表示時間間隔,即兩個時間點之間的長度。 
•datetime.tzinfo:與時區有關的相關信息。(這裏不詳細充分討論該類,感興趣的童鞋能夠參考python手冊) 
注:上面這些類型的對象都是不可變(immutable)的。 code

date類 
date類表示一個日期。日期由年、月、日組成(地球人都知道~~)。date類的構造函數以下: 

class datetime.date(year, month, day):參數的意義就很少做解釋了,只是有幾點要注意一下: 

•year的範圍是[MINYEAR, MAXYEAR],即[1, 9999]; 
•month的範圍是[1, 12]。(月份是從1開始的,不是從0開始的~_~); 
•day的最大值根據給定的year, month參數來決定。例如閏年2月份有29天; 
date類定義了一些經常使用的類方法與類屬性,方便咱們操做: 

•date.max、date.min:date對象所能表示的最大、最小日期; 
•date.resolution:date對象表示日期的最小單位。這裏是天。 
•date.today():返回一個表示當前本地日期的date對象; 
•date.fromtimestamp(timestamp):根據給定的時間戮,返回一個date對象; 
•datetime.fromordinal(ordinal):將Gregorian日曆時間轉換爲date對象;(Gregorian Calendar:一種日曆表示方法,相似於我國的農曆,西方國家使用比較多,此處不詳細展開討論。) orm

date提供的實例方法和屬性: 

•date.year、date.month、date.day:年、月、日; 
•date.replace(year, month, day):生成一個新的日期對象,用參數指定的年,月,日代替原有對象中的屬性。(原有對象仍保持不變) 
•date.timetuple():返回日期對應的time.struct_time對象; 
•date.toordinal():返回日期對應的Gregorian Calendar日期; 
•date.weekday():返回weekday,若是是星期一,返回0;若是是星期2,返回1,以此類推; 
•data.isoweekday():返回weekday,若是是星期一,返回1;若是是星期2,返回2,以此類推; 
•date.isocalendar():返回格式如(year,month,day)的元組; 
•date.isoformat():返回格式如'YYYY-MM-DD'的字符串; 
•date.strftime(fmt):自定義格式化字符串。在下面詳細講解。 對象

相關文章
相關標籤/搜索