Python中的時間與日期處理技巧分享
時間這東西,最神奇的地方就在于——它從來不等人!就像你說好5分鐘后起床,結(jié)果一睜眼發(fā)現(xiàn)已經(jīng)是中午了;或者老板讓你統(tǒng)計個Excel報表,你想著"一會兒就搞定",結(jié)果時間一晃,天都黑了。
在Python的世界里,時間也很有個性,格式多種多樣、時區(qū)坑多如山、轉(zhuǎn)換容易讓人頭禿,但別擔心,今天我們就來聊聊Python中的時間與日期處理,讓你從時間小白變成時間大師!
1. 先來個簡單的“時間基礎(chǔ)操作”
如果你是Python初學(xué)者,那你肯定會用到datetime
模塊。讓我們從最簡單的創(chuàng)建和輸出時間開始。
獲取當前時間
import datetime now = datetime.datetime.now() print(now)
這段代碼簡單明了,datetime.now()
會返回當前的日期和時間。例如:
2025-03-19 12:30:45.678901
當然,你也可以自定義格式來輸出時間。
格式化輸出
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S") print(formatted_time)
這段代碼使用strftime
方法來格式化日期和時間。常見的格式化代碼包括:
格式符 | 含義 |
---|---|
%Y | 四位年份(2025) |
%m | 月份(01-12) |
%d | 日期(01-31) |
%H | 小時(00-23) |
%M | 分鐘(00-59) |
%S | 秒(00-59) |
輸出結(jié)果類似:
2025-03-19 12:30:45
這是不是比原始的時間輸出看起來更加整潔了?
2. 從字符串轉(zhuǎn)換為日期對象
假如你從文件或者用戶輸入中獲取到一個時間字符串,那該怎么把它轉(zhuǎn)成Python中的日期對象呢?別擔心,這個問題簡單得很,strptime
方法來幫忙。
time_str = "2025-03-19 12:30:45" time_obj = datetime.datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S") print(time_obj)
這里,strptime
方法會根據(jù)你提供的格式化字符串,將時間字符串轉(zhuǎn)化為一個datetime
對象。轉(zhuǎn)換后的結(jié)果會是一個標準的日期時間對象,可以繼續(xù)進行各種操作。
3. 時間加減操作
獲取未來或者過去的時間
有時候你可能需要獲取一個日期的前幾天或后幾天的時間。例如,假設(shè)今天是2025年3月19日,你想知道7天后的日期。通過timedelta
,這可以輕松做到。
today = datetime.datetime.now() delta = datetime.timedelta(days=7) future_date = today + delta print(future_date)
輸出結(jié)果:
2025-03-26 12:30:45.678901
同樣,你也可以做日期的減法,得到過去的某個日期。
past_date = today - delta print(past_date)
輸出結(jié)果:
2025-03-12 12:30:45.678901
4. 處理時區(qū)和夏令時
大家可能知道,處理時區(qū)有點麻煩,因為不同的時區(qū)之間會有時差。而且,夏令時(DST)會讓你頭疼不已。比如說,北京時間與紐約時間的差異就會隨著夏令時的變化而有所不同。怎么處理這些問題呢?答案就是pytz
庫。
安裝pytz庫
pip install pytz
設(shè)置時區(qū)
import pytz now = datetime.datetime.now(pytz.timezone("Asia/Shanghai")) print(now) ny_time = datetime.datetime.now(pytz.timezone("America/New_York")) print(ny_time)
通過pytz
,你可以設(shè)置時區(qū),并且正確處理夏令時的轉(zhuǎn)換。如果你正在做涉及全球用戶的應(yīng)用,這個庫真的能幫你避免不少麻煩。
5. 處理日期范圍
有時候我們需要生成一個日期范圍,比如從2025年1月1日到2025年1月10日。這個可以用date_range
來輕松搞定。
import pandas as pd date_range = pd.date_range(start="2025-01-01", end="2025-01-10") print(date_range)
輸出的結(jié)果是一個日期范圍:
DatetimeIndex(['2025-01-01', '2025-01-02', '2025-01-03', '2025-01-04', '2025-01-05', '2025-01-06', '2025-01-07', '2025-01-08', '2025-01-09', '2025-01-10'], dtype='datetime64[ns]', freq='D')
非常適合用來生成日志時間戳、安排任務(wù)等。
6. 不常見但實用的時間操作
獲取一周的第幾天
now = datetime.datetime.now() weekday = now.weekday() # 周一是0,周日是6 print(f"今天是星期{weekday + 1}")
這段代碼會返回今天是星期幾,輸出類似“今天是星期3”。
獲取月份的天數(shù)
import calendar year, month = 2025, 2 days_in_month = calendar.monthrange(year, month)[1] print(f"{year}年{month}月有 {days_in_month} 天")
這段代碼會返回某年的某個月有多少天,比如:“2025年2月有 28 天”
獲取某個月的第一天和最后一天
from datetime import date first_day = date(year, month, 1) last_day = date(year, month, days_in_month) print(first_day, last_day)
獲取當前時間戳
如果你需要一個時間戳(自1970年1月1日以來的秒數(shù)),可以使用timestamp()
:
timestamp = datetime.datetime.now().timestamp() print(timestamp)
轉(zhuǎn)換為UTC時間
如果你需要將本地時間轉(zhuǎn)為UTC時間:
now_utc = datetime.datetime.now(pytz.utc) print(now_utc)
判斷某年是否是閏年
def is_leap_year(year): return calendar.isleap(year) print(is_leap_year(2024)) # True(閏年) print(is_leap_year(2025)) # False(平年)
計算兩個日期之間的工作日天數(shù)
import numpy as np start_date = datetime.date(2025, 3, 1) end_date = datetime.date(2025, 3, 10) workdays = np.busday_count(start_date.strftime('%Y-%m-%d'), end_date.strftime('%Y-%m-%d')) print(f"工作日天數(shù): {workdays}")
小結(jié)
今天,我們通過一些簡單又實用的代碼,了解了如何在Python中處理時間和日期。雖然時間和日期看起來是一塊很基礎(chǔ)的內(nèi)容,但細節(jié)處理起來可真是個大坑,尤其是時區(qū)、夏令時等問題。所以,掌握這些基本技巧,不僅能讓你的代碼更精確,還能避免很多因時間錯誤而引發(fā)的麻煩。
以上就是Python中的時間與日期處理技巧分享的詳細內(nèi)容,更多關(guān)于Python時間與日期處理的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SVM算法的理解及其Python實現(xiàn)多分類和二分類問題
這篇文章主要介紹了SVM算法的理解及其Python實現(xiàn)多分類和二分類問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02python數(shù)據(jù)結(jié)構(gòu)之列表和元組的詳解
這篇文章主要介紹了python數(shù)據(jù)結(jié)構(gòu)之列表和元組的詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家徹底理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-09-09pytorch如何對image和label同時進行隨機翻轉(zhuǎn)
這篇文章主要介紹了pytorch如何對image和label同時進行隨機翻轉(zhuǎn)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09python3 中的字符串(單引號、雙引號、三引號)以及字符串與數(shù)字的運算
這篇文章主要介紹了python3 中的字符串(單引號、雙引號、三引號)以及字符串與數(shù)字的運算,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07