鱼C论坛

 找回密码
 立即注册
查看: 1833|回复: 17

[已解决]关于获取文件13位时间戳的问题

[复制链接]
回帖奖励 1 鱼币 回复本帖可获得 1 鱼币奖励! 每人限 1 次(中奖概率 50%)
发表于 2021-11-10 12:46:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我最近写一个数据处理文件 用最后修改时间戳作为id,但是os.path.getmtime()只能获取到文件10位的时间戳,我想精确到毫秒级百度了半天也没找到什么结果在这里求助广大鱼油
最佳答案
2021-11-11 00:37:45
本帖最后由 hrpzcf 于 2021-11-11 08:48 编辑

我知道你意思了,你认为getmtime返回的10位时间戳加6位小数只支持精确到秒,其实不是的,精确到秒只需前10位整数,后6位小数记录到微秒级。
python内置模块时间格式化也不用13位整数的时间戳,而是用10位整数加6为小数的时间戳,如果你要把通用的毫秒级时间戳给别人,直接把获得的时间戳乘1000保留整数就可以了。
# coding: utf-8

import os
import time
import datetime

st = os.path.getmtime(__file__)  # 获取文件时间戳

# 精确到秒时,只要前10位整数,后6位小数无关紧要
print(time.strftime("%H-%M-%S", time.localtime(st)))  # 10位整数加6位小数
print(time.strftime("%H-%M-%S", time.localtime(int(st))))  # 10位整数,秒数跟上面没区别

# time 不支持毫秒级格式化符,所以用 datetime
# 后 6 位小数支持精确到微秒级,值查到 %f 微秒格式化符,没查到毫秒符
# 所以格式化出的时间倒数 3 位时间不取就是毫秒了
dt = datetime.datetime.fromtimestamp(st)
t1 = datetime.datetime.strftime(dt, "%H-%M-%S-%f")[:-3]  # 毫秒
t2 = datetime.datetime.strftime(dt, "%H-%M-%S-%f")  # 微秒

print(t1, "\n", t2, sep="")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-10 13:30:25 | 显示全部楼层

回帖奖励 +1 鱼币

PS F:\Repos\ccode> python
Python 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.path.getmtime("main")
1636510119.444714
>>> t13 = int(os.path.getmtime("main") * 1000)
>>> t13
1636510119444
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-10 14:00:30 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-11-10 15:18:59 | 显示全部楼层
s =int(os.path.getmtime(r'D:\OneDrive\图床\1636449686933-1.jpg')*1000)
我是想说获取一个文件的修改时间,然后这个修改时间要精确到毫秒这样子,如果直接乘1000会补0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-10 15:21:51 From FishC Mobile | 显示全部楼层
盖世嘤雄 发表于 2021-11-10 15:18
我是想说获取一个文件的修改时间,然后这个修改时间要精确到毫秒这样子,如果直接乘1000会补0

getmtime返回的时间戳本来就是精确到小数点后6位呀,怎么会补0呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-10 20:18:52 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-11 00:37:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 hrpzcf 于 2021-11-11 08:48 编辑

我知道你意思了,你认为getmtime返回的10位时间戳加6位小数只支持精确到秒,其实不是的,精确到秒只需前10位整数,后6位小数记录到微秒级。
python内置模块时间格式化也不用13位整数的时间戳,而是用10位整数加6为小数的时间戳,如果你要把通用的毫秒级时间戳给别人,直接把获得的时间戳乘1000保留整数就可以了。
# coding: utf-8

import os
import time
import datetime

st = os.path.getmtime(__file__)  # 获取文件时间戳

# 精确到秒时,只要前10位整数,后6位小数无关紧要
print(time.strftime("%H-%M-%S", time.localtime(st)))  # 10位整数加6位小数
print(time.strftime("%H-%M-%S", time.localtime(int(st))))  # 10位整数,秒数跟上面没区别

# time 不支持毫秒级格式化符,所以用 datetime
# 后 6 位小数支持精确到微秒级,值查到 %f 微秒格式化符,没查到毫秒符
# 所以格式化出的时间倒数 3 位时间不取就是毫秒了
dt = datetime.datetime.fromtimestamp(st)
t1 = datetime.datetime.strftime(dt, "%H-%M-%S-%f")[:-3]  # 毫秒
t2 = datetime.datetime.strftime(dt, "%H-%M-%S-%f")  # 微秒

print(t1, "\n", t2, sep="")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-11 00:46:13 | 显示全部楼层

回帖奖励 +1 鱼币

学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-11 08:42:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-11 08:44:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-11 08:57:28 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-11 09:16:55 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-11 09:23:55 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-11 11:18:40 | 显示全部楼层
这个是需要计算一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-11 12:58:45 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-11 13:19:06 | 显示全部楼层

回帖奖励 +1 鱼币

留个标记 学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-11 14:52:38 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-11 16:02:40 | 显示全部楼层

回帖奖励 +1 鱼币

学习一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 21:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表