你還在用 time.time()?獲取當前時間,這才是正確姿勢!
日志記錄、數(shù)據(jù)命名、時間戳生成……幾乎所有 Python 項目都繞不開時間處理。你知道嗎?Python 提供了豐富的時間工具,可以讓你輕松獲取當前時間,還能靈活轉(zhuǎn)換各種格式!
場景舉例
在開發(fā)中你是否遇到過這些需求?
- 獲取當前時間,格式化為 2025-04-13 21:33:12?
- 只要日期 2025-04-13,不要時分秒?
- 文件名中要帶當前時間戳,如 report_20250413_213312.txt?
- 需要一個毫秒級的 Unix 時間戳?
今天我們就來封裝一個 通用的日期時間工具類,一次性搞定以上所有需求!
工具函數(shù)封裝
from datetime import datetime
import time
def get_now(format_type: str = "datetime") -> str:
"""
獲取當前時間的多種格式
:param format_type: 支持 'datetime' | 'date' | 'time' | 'timestamp' | 'filename'
:return: 格式化后的時間字符串
"""
now = datetime.now()
if format_type == "datetime":
return now.strftime("%Y-%m-%d %H:%M:%S")
elif format_type == "date":
return now.strftime("%Y-%m-%d")
elif format_type == "time":
return now.strftime("%H:%M:%S")
elif format_type == "timestamp":
return str(int(time.time() * 1000)) # 毫秒級時間戳
elif format_type == "filename":
return now.strftime("%Y%m%d_%H%M%S") # 文件名用下劃線分隔
else:
raise ValueError("不支持的 format_type 類型")
使用示例
print(get_now("datetime")) # 2025-04-13 21:33:12
print(get_now("date")) # 2025-04-13
print(get_now("time")) # 21:33:12
print(get_now("timestamp")) # 1713028392000
print(get_now("filename")) # 20250413_213312
輸出效果一覽
模式類型 | 輸出樣例 | 應用場景 |
datetime | 2025-04-13 21:33:12 | 日志記錄、數(shù)據(jù)庫插入 |
date | 2025-04-13 | 日期展示、統(tǒng)計分組 |
time | 21:33:12 | 報警時間、運行耗時記錄 |
timestamp | 1713028392000 | 唯一ID生成、緩存Key、排序標識 |
filename | 20250413_213312 | 文件命名、數(shù)據(jù)導出 |
小貼士:時間戳轉(zhuǎn)換為日期
有時候你拿到的是一個時間戳,比如從數(shù)據(jù)庫或接口返回:
def timestamp_to_datetime(ts: int) -> str:
return datetime.fromtimestamp(ts / 1000).strftime("%Y-%m-%d %H:%M:%S")
print(timestamp_to_datetime(1713028392000)) # ? 2025-04-13 21:33:12
拓展:設置時區(qū)(UTC、北京時間)
Python 默認是本地時區(qū)。如果你在處理服務器端時間、或與其他國家用戶交互,可以結(jié)合 pytz 實現(xiàn)時區(qū)控制。
import pytz
def get_beijing_time():
tz = pytz.timezone('Asia/Shanghai')
now = datetime.now(tz)
return now.strftime("%Y-%m-%d %H:%M:%S")
總結(jié)一句話
獲取當前時間,不止 time.time() 一種寫法,真正實用的工具類應該能靈活應對不同格式,方便人讀,也方便機器處理!