Path().stat().st_time 时区?
Path().stat().st_time timezone?
我正在尝试使用 Cygwin 中的 Python 3.8 获取文件的最后修改时间。
所以如果我这样做 stat .profile
我得到:
File: .profile
Size: 1236 Blocks: 4 IO Block: 65536 regular file
Device: 46e61a95h/1189485205d Inode: 8162774324632653 Links: 1
Access: (0755/-rwxr-xr-x) Uid: (197609/ pepol) Gid: (197609/ pepol)
Access: 2020-09-14 15:16:04.773101900 +0700
Modify: 2020-09-14 15:15:21.977809000 +0700
Change: 2020-09-14 15:16:04.055602500 +0700
Birth: 2020-09-14 15:16:04.052652900 +0700
但是如果我尝试使用 Python 获取文件的时间戳:
from pathlib import Path
from datetime import datetime
p1 = Path(".profile")
p1st = p1.stat()
dts = datetime.fromtimestamp(p1st.st_mtime)
print(str(dts))
我得到这个 'naive'(无时区):
2020-09-14 09:15:21.977809
现在这是我感到困惑的地方:
- 如
stat
输出所示,我的时区是 UTC+07:00
- 我的国家没有夏令时
- Windows' 时区设置正确
15:15:21.977809000 +0700
等同于 08:15:21.977809000 +0000
为什么 pathlib.Path().stat()
获取的时间戳比 UTC 时间戳提前 1 小时?它实际使用的是哪个时区?
确保在 cygwin
中使用 Cygwin 的 Python。您可以使用 $which python3
检查 cygwin 使用哪个 Python 版本。那应该 return 例如/usr/bin/python3
.
- 如果您在 Cygwin 中使用 Windows Python 安装,它将无法正确确定机器的时区(OS 设置)(Windows Python 配置为在 Windows 上执行此操作,而不是在 Unix 环境中,反之亦然)。
旁注,由于 pathlib.Path().stat()
编辑的时间戳 return 是 POSIX 时间戳,因此您可以使用例如datetime.fromtimestamp(p1st.st_mtime, tz=timezone.utc)
立即获取 UTC。
我正在尝试使用 Cygwin 中的 Python 3.8 获取文件的最后修改时间。
所以如果我这样做 stat .profile
我得到:
File: .profile
Size: 1236 Blocks: 4 IO Block: 65536 regular file
Device: 46e61a95h/1189485205d Inode: 8162774324632653 Links: 1
Access: (0755/-rwxr-xr-x) Uid: (197609/ pepol) Gid: (197609/ pepol)
Access: 2020-09-14 15:16:04.773101900 +0700
Modify: 2020-09-14 15:15:21.977809000 +0700
Change: 2020-09-14 15:16:04.055602500 +0700
Birth: 2020-09-14 15:16:04.052652900 +0700
但是如果我尝试使用 Python 获取文件的时间戳:
from pathlib import Path
from datetime import datetime
p1 = Path(".profile")
p1st = p1.stat()
dts = datetime.fromtimestamp(p1st.st_mtime)
print(str(dts))
我得到这个 'naive'(无时区):
2020-09-14 09:15:21.977809
现在这是我感到困惑的地方:
- 如
stat
输出所示,我的时区是 UTC+07:00 - 我的国家没有夏令时
- Windows' 时区设置正确
15:15:21.977809000 +0700
等同于08:15:21.977809000 +0000
为什么 pathlib.Path().stat()
获取的时间戳比 UTC 时间戳提前 1 小时?它实际使用的是哪个时区?
确保在 cygwin
中使用 Cygwin 的 Python。您可以使用 $which python3
检查 cygwin 使用哪个 Python 版本。那应该 return 例如/usr/bin/python3
.
- 如果您在 Cygwin 中使用 Windows Python 安装,它将无法正确确定机器的时区(OS 设置)(Windows Python 配置为在 Windows 上执行此操作,而不是在 Unix 环境中,反之亦然)。
旁注,由于 pathlib.Path().stat()
编辑的时间戳 return 是 POSIX 时间戳,因此您可以使用例如datetime.fromtimestamp(p1st.st_mtime, tz=timezone.utc)
立即获取 UTC。