Python 計算多少天前後、距離 X日多久的日期

pythondict發表於2020-05-04

原文出自:Python實用寶典Python 計算多少天前後、距離X日多久的日期

接下來,我就教大家怎麼用十行程式碼計算我們剩餘的假期天數!我們的程式碼用到了一個概念叫時間戳:

時間戳就是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數

因此,2019年8月1日的時間戳,就是從1970年01月01日08時00分00秒到2019年8月1日00時00分的秒數,我們可以先用工具計算一下這個秒數:

今天我們就基於時間戳,計算一下我們剩餘的假期天數吧!

import time
import datetime

def get_between_days(start_date, end_date):
    # 獲得兩個日期之間的天數
    start_sec = time.mktime(time.strptime(start_date,'%Y-%m-%d'))
    end_sec = time.mktime(time.strptime(end_date,'%Y-%m-%d'))
    work_days = int((end_sec - start_sec)/(24*60*60))
    work_hours = int((end_sec - start_sec)/(60*60))
    work_minutes = int((end_sec - start_sec)/(60))
    return work_days, work_hours, work_minutes
# 獲得當天時間 yyyy-mm-dd
start_date = time.strftime('%Y-%m-%d',time.localtime(time.time()))
end_date = '2019-09-01'
print (get_between_days(start_date, end_date))

首先,我們需要把類似2019-09-01這樣的yyyy-mm-dd格式的時間轉化為時間戳,這樣做就可以了:

time.mktime(time.strptime(start_date,'%Y-%m-%d'))

strptime是將yyyy-mm-dd這樣的字串轉化為time型別的變數,然後time.mktime()函式可以將time型別的變數轉化為時間戳。

將兩個日期的時間戳相減,就能得到這兩個時間之間的秒數,然後將其除以24小時60分鐘60秒就能得到這兩個時間間隔的天數

work_days = int((end_sec - start_sec)/(24*60*60))

除以60分鐘60秒就能得到這兩個時間間隔的*小時數**

work_hours = int((end_sec - start_sec)/(60*60))

除以60秒就能得到這兩個時間間隔的分鐘數

work_minutes = int((end_sec - start_sec)/(60))

讓我們嘗試一下,進入cmd(windows)/Terminal(macOS),cd到當前資料夾下,執行命令:

python count_days.py

執行結果

可以看到,從2019年8月12日到2019年9月1日,還剩餘20天,正好和我們數手指頭算出來的時間是一樣的呢

但是!!天吶,我們的大家的暑假只剩下20天,換算成小時,就是480個小時!!作業做了嗎?

你可以將start_date修改成你想要的任意時間進行計算哦,並不一定是今天。只要格式符合yyyy-mm-dd即可。

怎麼樣,方便吧?嘻嘻,接下來還有更方便的玩法,我們可以計算任意天的x天、y小時、t分鐘、z秒後的時間:

# 檔名:count_days.py
import time
import datetime
def time_controller(d=0, hour=0, minute=0, second=0, arg=1, day=datetime.datetime.now()):
    # 獲得某天的x天、y小時、t分鐘、z秒後的日期, day為空預設為當前時間開始
    # 所有引數預設都為0,只需要調你需要的時間即可
    # arg = 1: 獲得hour小時,minute分鐘,second秒後的具體時間
    # arg = -1: 獲得hour小時,minute分鐘,second秒前的具體時間
    now = datetime.datetime.now()
    if type(day) == str:
        now = datetime.datetime.strptime(day, '%Y-%m-%d %H:%M:%S')
    if arg == 1:
        value = now + datetime.timedelta(days=d, hours=hour, minutes=minute, seconds=second)
    elif arg == -1:
        value = now - datetime.timedelta(days=d, hours=hour, minutes=minute, seconds=second)
    return value
print(time_controller(d=10, hour=20, minute=10, second=0, arg=-1, day='2019-08-01 10:00:00'))
print(time_controller(d=10, hour=20, minute=10, second=0, arg=-1))

程式碼裡,argv=-1表示取day引數之前的時間,也就是2019-08-01 10:00:00之前10天、20小時、10分鐘的時間。同樣地,進入cmd(windows)/Terminal(macOS),cd到當前資料夾下,執行命令:

python count_days.py

得到2019-08-01 10:00:00的10天、20小時、10分鐘之前的時間為 2019-07-21 13:50:00. 如果day引數為空,預設為當前時間開始,那麼這個結果則是:2019-08-01 23:35:23.

由於datetime是精確到毫秒的,所以後面有小數點,大家可以自行去掉

今天小技巧不僅簡單,而且在實際生活中也非常方便實用。用上面的方法可做未來的計劃安排,考試倒數計時準備,也可以算算離上次某個時間點(節假日)過去了多久,我們一起認識了多長時間,在一起了多少天,想想就激動呢!

當然還有更多有趣的用法待大家去挖掘哦

我們的文章到此結束啦!如果你喜歡我們的文章,持續關注Python實用寶典哦!請記住我們的官方網站:https://pythondict.com 公眾號:python實用寶典

本作品採用《CC 協議》,轉載必須註明作者和本文連結

Python實用寶典, pythondict.com

相關文章