Python日期和時間相關操做

1. 先來看幾個經常使用的

1.1 獲取今天、昨天、明天的日期時間

from datetime import datetime, timedelta, date

'''今天'''
today1 = date.today()  # 精確到`天`
today2 = datetime.today()  # 精確到`微秒`
str(today1), str(today2)

# 結果:
# datetime.date(2015, 11, 20)
# datetime.datetime(2015, 11, 20, 16, 26, 21, 593990)
# ('2015-11-20', '2015-11-20 16:26:21.593990)


'''昨天'''
yesterday1 = date.today() + timedelta(days=-1)
yesterday2 = datetime.today() + timedelta(days=-1)
str(yesterday1), str(yesterday2)

# 結果:
# datetime.date(2015, 11, 19)
# datetime.datetime(2015, 11, 19, 16, 26, 21, 593990)
# ('2015-11-19', '2015-11-19 16:26:21.593990)


'''明天'''
tomorrow1 = date.today() + timedelta(days=1)
tomorrow2 = datetime.today() + timedelta(days=1)
str(tomorrow1), str(tomorrow2)

# 結果:
# datetime.date(2015, 11, 21)
# datetime.datetime(2015, 11, 21, 16, 26, 21, 593990)
# ('2015-11-21', '2015-11-21 16:26:21.593990)

那獲取幾小時,幾分鐘,甚至幾秒鐘先後的時間呢?該怎麼獲取?python

看以下的代碼:git

from datetime import datetime, timedelta

# 獲取兩小時前的時間
date_time = datetime.today() + timedelta(hours=-2)

其實就是給 timedelta() 這個類傳入的參數變一下就能夠了github

可傳入的參數有 timedelta(weeks, days, hours, second, milliseconds, microseconds) 每一個參數都是可選參數,默認值爲0,參數值必須是這些(整數浮點數正數負數函數

分別表示:timedelta(周,日,時,分,秒,毫秒,微秒)。也只能傳入這7個參數code

說明:timedelta 這個對象實際上是用來表示兩個時間的間隔對象

上面咱們都是使用 datetime.today() 加上 timedelta(),那若是是 datetime.today() 減去 timedelta() 這樣呢? 其實得出結果就是相反而已,不明白能夠動手試一下,對比一下 +- 以後的結果。get

1.2 下面來講說獲取N年前/後,N月前/後的技巧

由於 timedelta() 這個對象傳入的參數最大日期時間單位是,最小的是 微秒
因此,關於 須要咱們手動處理一下it

import datetime
import calendar

def conver(value, years=0, months=0):
    if months:
        more_years, months = divmod(months, 12)
        years += more_years

        if not (1 <= months + value.month <= 12):
            more_years, months = divmod(months + value.month, 12)
            months -= value.month
            years += more_years

    if months or years:
        year = value.year + years
        month = value.month + months

        # 此月份的的天號不存在轉換後的月份裏,將引起一個 ValueError 異常
        # 好比,1月份有31天,2月份有29天,我須要1月31號的後一個月的日期,也就是2月31號,可是2月份沒有31號
        # 因此會引起一個 ValueError 異常
        # 下面這個異常處理就是爲了解決這個問題的
        try:
            value = value.replace(year=year, month=month)
        except ValueError:
            _, destination_days = calendar.monthrange(year, month)
            day = value.day - destination_days
            month += 1
            if month > 12:
                month = 1
                year += 1
            value = value.replace(year=year, month=month, day=day)

    return value

today = datetime.datetime.today()
print today  # 今天日期
print conver(today, months=1)  # 1月後
print conver(today, months=-1)  # 1月前
print conver(today, years=1)  # 1年後
# 結果
# datetime.datetime(2015, 11, 20, 16, 26, 21, 593990)
# datetime.datetime(2015, 12, 20, 16, 26, 21, 593990)
# datetime.datetime(2015, 10, 20, 16, 26, 21, 593990)
# datetime.datetime(2016, 11, 20, 16, 26, 21, 593990)

代碼取自 when.py_add_time 函數部分代碼io

更新中...

相關文章
相關標籤/搜索