You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中设置文件至指定日期时间?

修改文件时间(含创建时间)的Python实现

嘿,刚好碰到过类似需求,给你两种实用方案,看你场景选:

1. 最简单:调用Linux的touch命令(推荐)

你之前可能没注意到,Linux的touch本身就支持指定任意时间,用-d参数就行,甚至可以修改文件的创建时间(只要文件系统支持,比如ext4)。在Python里用subprocess直接调用就好:

修改文件的修改时间(mtime)和访问时间(atime)

import subprocess

# 目标时间可以是任意touch支持的格式,比如"2023-10-01 12:00:00"、"last week"等
target_time = "2023-10-01 12:00:00"
file_path = "/path/to/your/file.txt"

# 执行touch命令,指定时间
subprocess.run(["touch", "-d", target_time, file_path], check=True)

修改文件的创建时间(Birth Time)

如果需要改创建时间,加上--time=birth参数就行:

subprocess.run(["touch", "--time=birth", "-d", target_time, file_path], check=True)

这个方法的好处是不用折腾Python底层,touch已经帮你处理了各种文件系统的兼容性问题。

2. 纯Python实现:用标准库或底层调用

如果不想依赖外部命令,用Python标准库可以修改访问/修改时间,修改创建时间则需要调用Linux系统调用(依赖内核版本5.8+)。

修改访问/修改时间(atime/mtime)

用os.utime直接设置时间戳:

import os
from datetime import datetime

# 定义目标时间
target_datetime = datetime(2023, 10, 1, 12, 0, 0)
# 转成Unix时间戳(秒)
timestamp = target_datetime.timestamp()

# 修改文件的atime和mtime,第一个元组元素是atime,第二个是mtime
os.utime(file_path, (timestamp, timestamp))

修改创建时间(Birth Time)

这个需要调用Linux的utimensat系统调用,用ctypes实现:

import os
import ctypes
from datetime import datetime

# 定义Timespec结构体,对应Linux系统调用的时间格式
class Timespec(ctypes.Structure):
    _fields_ = [("tv_sec", ctypes.c_long), ("tv_nsec", ctypes.c_long)]

file_path = "/path/to/your/file.txt"
target_datetime = datetime(2023, 10, 1, 12, 0, 0)

# 转成秒和纳秒
tv_sec = int(target_datetime.timestamp())
tv_nsec = target_datetime.microsecond * 1000

# 准备时间数组,[0]是atime,[1]是mtime,设为UTIME_OMIT保持原有值
UTIME_OMIT = ((1 << 30) - 2)
times = (Timespec * 2)()
times[0].tv_sec = UTIME_OMIT
times[0].tv_nsec = UTIME_OMIT
times[1].tv_sec = UTIME_OMIT
times[1].tv_nsec = UTIME_OMIT

# 调用libc的utimensat函数,UTIME_BIRTH标志表示修改birth time
libc = ctypes.CDLL("libc.so.6")
# AT_FDCWD表示用当前目录作为基准路径
libc.utimensat(
    ctypes.c_int(-100),  # AT_FDCWD
    file_path.encode(),
    times,
    ctypes.c_int(0x40000000)  # UTIME_BIRTH
)

这个方法比较底层,需要确保你的Linux内核版本在5.8以上,且文件系统支持修改birth time。


内容的提问来源于stack exchange,提问作者SPRBRN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:11:46