【问题标题】:datetime.fromtimestamp Gives Error 22 Invalid Argument on ctime_ns from Path objectdatetime.fromtimestamp 在来自 Path 对象的 ctime_ns 上给出错误 22 无效参数
【发布时间】:2020-11-25 02:30:15
【问题描述】:

我在 Windows 环境中尝试获取 ctime 的路径对象,如下所示:

tfileobj = Path(r"..\odfs\etest\odfs\test.txt")
tstamp =  datetime.fromtimestamp(tfileobj.stat().st_ctime_ns).strftime('%b-%d-%Y_%H:%M:%S')

但这给了我错误:

tstamp =  datetime.fromtimestamp(tfileobj.stat().st_ctime_ns).strftime('%b-%d-%Y_%H:%M:%S')
OSError: [Errno 22] Invalid argument

是的,路径是真实的路径。出于安全考虑,我刚刚删除了额外的目录信息

为什么我会遇到这些问题?

没有datetime 函数,stat().st_ctime_ns 返回:

1596581792639031900

【问题讨论】:

    标签: python python-3.x pathlib


    【解决方案1】:

    您正在尝试将纳秒传递给需要 POSIX 时间戳的函数。只需将时间戳除以 10 亿:

    datetime.fromtimestamp(tfileobj.stat().st_ctime_ns / 1000000000).strftime('%b-%d-%Y_%H:%M:%S')
    

    【讨论】:

    • 这行得通,我怎样才能将它转换为UTC?它如何将给定的时间转换为 UTC?
    • 那是 UTC。时间戳没有附加任何时区数据。您可以将可选的时区信息对象作为tz=my_tz_obj 传递给函数,以将其转换为另一个时区。 docs.python.org/3.3/library/datetime.html#datetime.timezone 请记得点赞并接受,因为我回答了你原来的问题。
    • 我查过了,不是 UTC。它实际上是我在 Windows 环境中创建的文件的本地时间。我在下午 3:56 制作了文件,当我执行你的方法时,它返回了准确的时间,这意味着它使用的是当地时间
    • 您可以尝试使用datetime.utcfromtimestamp() 而不是fromtimestamp。这对您来说可能准确也可能不准确,具体取决于您的时区和时间戳的创建方式。您可能需要根据我上面包含的文档链接创建一个时区对象,以获得准确的时间字符串。我不知道您文件中的纳秒时间戳是如何创建的。阅读此处了解有关时间戳和时区的更多信息。 stackoverflow.com/questions/23062515/…
    猜你喜欢
    • 1970-01-01
    • 2012-06-16
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 2017-07-13
    相关资源
    最近更新 更多