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

Windows Server中os.path.getmtime返回负数报错,求文件修改时间获取方案

在Windows Server中获取文件修改时间的问题

我在Windows Server中编写Python脚本,需要获取文件夹内文件的修改时间,代码如下:

filestamp = datetime.fromtimestamp(os.path.getmtime(path+filename))

该代码在本地运行正常,但在Windows Server中执行时,datetime.fromtimestamp抛出错误:

OSError : [Errno 22] Invalid argument

打印os.path.getmtime(path+filename)的结果为-11623064500.963923,该值无法正常转换为datetime,且仅在Windows Server中出现此问题。尝试过将数值乘/除以1000,但无效(尤其数值为负时)。请问有获取文件修改时间的替代方法吗?


替代解决方案

1. 异常捕获+UTC时间转换

Windows支持的文件时间范围从1601年1月1日开始,早于Unix时间戳的起始点(1970年1月1日),导致负时间戳转换失败。可以改用UTC时间转换后再适配时区:

import os
from datetime import datetime

def get_file_modify_time(file_path):
    try:
        mtime = os.path.getmtime(file_path)
        return datetime.fromtimestamp(mtime)
    except OSError:
        # 针对早于1970年的文件时间,用UTC转换后再转本地时区
        return datetime.utcfromtimestamp(mtime).astimezone()

2. 使用pathlib模块(Python 3.4+)

pathlib提供了更安全的路径拼接和文件状态读取方式,对Windows兼容性更好:

from pathlib import Path
from datetime import datetime

# 用Path自动处理路径拼接,避免手动拼接的错误
file_path = Path(path) / filename
try:
    filestamp = datetime.fromtimestamp(file_path.stat().st_mtime)
except OSError:
    filestamp = datetime.utcfromtimestamp(file_path.stat().st_mtime).astimezone()

3. 调用Windows原生API(依赖pywin32)

如果上述方法仍有问题,可借助pywin32直接读取Windows原生文件时间,彻底绕过Unix时间戳转换:

import win32file
import win32con
from datetime import datetime

def get_win_native_mtime(file_path):
    # 打开文件获取句柄
    handle = win32file.CreateFile(
        file_path,
        win32con.GENERIC_READ,
        win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE,
        None,
        win32con.OPEN_EXISTING,
        0,
        None
    )
    try:
        # 获取文件创建、修改、访问时间,修改时间是元组第二个元素
        _, mtime, _ = win32file.GetFileTime(handle)
        return datetime.fromtimestamp(mtime.timestamp())
    finally:
        handle.Close()

关键说明

出现负时间戳报错的核心原因是Windows文件时间范围覆盖了Unix时间戳之前的日期,datetime.fromtimestamp无法直接解析这类负时间戳。改用UTC转换或直接读取Windows原生时间,就能解决兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:40:40