Python 获取当前时间日期并格式化:datetime 常用示例
Python 用 datetime 获取当前日期时间、时间戳、星期、昨天明天,strftime 格式化输出常用格式,附完整代码和速查表。
场景痛点
写脚本经常要在文件名后面拼时间戳,比如 报告_2026-09-14.xlsx,或者日志里打印当前时间,或者算"昨天"、"本周一"是哪天。每次都去搜 strftime 格式符,写完一个脚本就忘。把常用写法整理成一个函数库,需要时直接复制。
用到的库
# 标准库 datetime,不需要安装
完整代码
from datetime import datetime, timedelta
import time
def now_overview():
"""当前时间常用字段一览"""
now = datetime.now()
print("当前时间对象:", now)
print("年:", now.year)
print("月:", now.month)
print("日:", now.day)
print("小时:", now.hour)
print("分钟:", now.minute)
print("秒:", now.second)
print("星期(0=周一):", now.weekday())
print("一年中第几天:", now.timetuple().tm_yday)
def format_demo():
"""strftime 常用格式化"""
now = datetime.now()
print("YYYY-MM-DD:", now.strftime("%Y-%m-%d"))
print("YYYYMMDD 紧凑:", now.strftime("%Y%m%d"))
print("YYYY-MM-DD HH:MM:SS:", now.strftime("%Y-%m-%d %H:%M:%S"))
print("文件名安全格式:", now.strftime("%Y%m%d_%H%M%S"))
print("中文日期:", now.strftime("%Y年%m月%d日"))
print("12小时制 AM/PM:", now.strftime("%Y-%m-%d %I:%M %p"))
def calc_dates():
"""相对日期计算:昨天、明天、本周一、30天后"""
today = datetime.now().date()
print("今天:", today)
print("昨天:", today - timedelta(days=1))
print("明天:", today + timedelta(days=1))
print("7天后:", today + timedelta(days=7))
# weekday() 周一=0,本周一 = 今天 - 已过去的天数
this_monday = today - timedelta(days=today.weekday())
print("本周一:", this_monday)
def timestamp_demo():
"""时间戳和 datetime 互转"""
ts = time.time()
print("当前 Unix 时间戳(浮点):", ts)
print("时间戳转 datetime:", datetime.fromtimestamp(ts))
print("datetime 转时间戳:", datetime.now().timestamp())
def main():
now_overview()
print("-" * 40)
format_demo()
print("-" * 40)
calc_dates()
print("-" * 40)
timestamp_demo()
if __name__ == "__main__":
main()
代码讲解
datetime.now()返回本地时区的当前时间对象,包含年月日时分秒微秒。strftime把时间对象格式化成字符串:%Y四位年、%m两位月、%d两位日、%H24小时制、%M分、%S秒。timedelta(days=N)做日期加减,算昨天明天一周后直接减加就行,不用自己处理大小月。weekday()周一返回 0、周日返回 6,所以本周一 = 今天 - weekday() 天。time.time()返回 Unix 时间戳(从 1970-01-01 秒数),适合做文件名唯一标识、日志排序。- 文件名用
%Y%m%d_%H%M%S格式,没有空格和冒号,Windows/Mac 都合法。
运行结果
运行后依次打印当前时间各字段、五种格式化结果、相对日期、时间戳互转。把 format_demo 里的某一行复制到自己脚本里就能用,比如导出文件时文件名拼 f"报告_{datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx"。
注意事项
%m是两位月,%M是分钟,大小写千万别搞反,错了就出怪结果。%H是 24 小时制,%I是 12 小时制,做日志用 24 小时制。- 跨时区服务部署时,
datetime.now()用服务器本地时区,要统一时区用datetime.now(timezone.utc)。 - 时间戳存数据库用整数秒(
int(time.time())),别存浮点,精度够还省空间。 - 解析字符串时间用
datetime.strptime("2026-09-14", "%Y-%m-%d"),和 strftime 反过来。

更新时间:2026-09-14 20:38:33
上一篇:Python OCR 识别图片文字:pytesseract 中文识别教程