有没有一种方法可以更准确地获取Windows中文件的创建时间?我想以毫秒为单位获取mp4视频的创建时间。这可能吗?
ctime
副本作为复制的时间。
stat
来获取所有3个时间戳。当然,那是因为我通常使用GNU / Linux。
有没有一种方法可以更准确地获取Windows中文件的创建时间?我想以毫秒为单位获取mp4视频的创建时间。这可能吗?
ctime
副本作为复制的时间。
stat
来获取所有3个时间戳。当然,那是因为我通常使用GNU / Linux。
Answers:
Windows中文件的创建时间戳取决于文件系统:
FAT / VFAT的最大分辨率为2s
NTFS的最大分辨率为100 ns
您可以使用 wmic
用来将文件创建日期检索到最接近的微秒。
例:
F:\test>wmic datafile where name="f:\\test\\test.txt" get creationdate | findstr /brc:[0-9]
20150329221650.080654+060
创建日期20150329221650.080654+060
是一个时间戳,格式如下:
yyyymmddHHMMSS.xxxxxxsUUU
哪里:
yyyy
四位数的年份(0000到9999)。
mm
两位数的月份(01到12)。
dd
每月的两位数字(01到31)。
HH
使用24小时制(00到23)在一天中显示两位数。
MM
小时中的两位数字分钟(00到59)。
SS
分钟中的两位秒数(00到59)。
xxxxxx
秒中的六位微秒数(000000至999999)
s
加号(+
)或减号(-
)表示与世界标准时间(UTC)的正或负偏移。
UUU
三位数的偏移量,指示始发时区偏离UTC的分钟数。
例:
DavidPostill@Hal /f/test
$ stat test.txt | grep Birth
Birth: 2015-03-29 22:16:50.080654200 +0100
F:\test>dir /t:c test.txt
Volume in drive F is Expansion
Volume Serial Number is 3656-BB63
Directory of F:\test
29/03/2015 22:16 32 test.txt
1 File(s) 32 bytes
0 Dir(s) 1,798,546,849,792 bytes free
xxxxxx
是秒的六位数微秒(000000到999999)。微,即10^-6
。当然,第一个三元组代表mili-(10^-3
):被截断而不是四舍五入。提取的第二个三元组本身不代表任何内容 ...但是,某些wmi
日期时间值000
始终显示第二个三元组,例如wmic OS get LocalDateTime
这里展示了一个聪明的方法: https //stackoverflow.com/questions/5180592/showing-ntfs-timestamp-with-100-nsec-granularity
它使用VBScript查询WMI的CIM数据库并返回 FILETIME
文件关联结构。
我在Matlab中找到了一种获取方法:
您可以使用Jan Simon编写的GetFileTime函数。如果您不想编译自己的mex文件,也可以在此处下载已编译的文件。
它不像使用wmic(仅用于ms)那样精确,但就我的目的而言,它是合适的。
这取决于文件系统:FAT具有2秒的分辨率,NTFS 理论上具有100 ns的分辨率,但实际分辨率为10 ms。也就是说,中断的优先级高于磁盘I / O,并且我不确定写缓存对时间戳的影响。多媒体计时器针对准确性进行了优化,因此将是实现计时的首选方法。
您可以使用XYplorer之类的现有工具来查看高分辨率时间戳,或者,您可能更喜欢编写自己的应用程序。使用File.GetCreationTime方法;它返回具有毫秒属性的DateTime结构。
wmic
显示的分辨率接近最近的微秒。