Nhận thời gian tạo tập tin tính bằng mili giây


13

Có cách nào để có được thời gian tạo tệp trong windows với độ chính xác cao hơn không? Tôi muốn có được thời gian tạo ra một video mp4 tính bằng mili giây. Điều này có thể không?


Tôi phải hỏi tại sao bạn cần sự chính xác này?
Moab

1
Tôi ghi lại một số dữ liệu cảm biến trên thiết bị Android cùng với video. Tôi đã tự viết nhật ký cảm biến và ghi lại thời gian hệ thống cùng với từng giá trị cảm biến. Để quay video tôi sử dụng hoạt động camera tiêu chuẩn. Sau khi gửi dữ liệu tới PC tôi muốn phân tích nó. Để hợp nhất video với dữ liệu cảm biến tôi phải biết khi video bắt đầu. Giây hơi quá thô, vì vậy tôi đang tìm cách để có thời gian bắt đầu chính xác hơn của video.
Phil

3
Lưu ý: nếu bạn cần loại mối quan hệ giữa hai luồng dữ liệu, thông thường cần đặt tín hiệu đăng ký vào luồng (giống như các bảng con cũ được sử dụng trong phim khi đạo diễn gọi là "hành động". Tiếng vỗ tay là một dấu hiệu trực quan và âm thanh cue, cho phép hai hoặc nhiều luồng được đồng bộ hóa sau này). Trong một số trường hợp, độ trễ thời gian giữa việc tạo tệp ở chế độ kernel (và ghi dấu thời gian) và đánh thức quá trình của bạn để cho nó biết rằng nó có xử lý tệp để sử dụng thực sự có thể cao hơn dung sai bạn có cho dữ liệu của mình.
Cort Ammon - Phục hồi Monica

Khi bạn sao chép nội dung của mình từ Android sang nơi khác, hãy đảm bảo tất cả các công cụ sao chép giữ chính xác dấu thời gian. Lưu ý rằng nhiều công cụ sao chép sẽ làm cho ctimebản sao trở thành thời gian được sao chép.
Peter Cordes

1
Trên các cửa sổ, tôi sử dụng cygwin / mingw statđể có được cả 3 dấu thời gian. Tất nhiên, đó là vì tôi thường sử dụng GNU / Linux.
Peter Cordes

Câu trả lời:


23

Độ phân giải dấu thời gian

Dấu thời gian tạo của tệp trong windows phụ thuộc vào hệ thống tệp:

  • FAT / VFAT có độ phân giải tối đa là 2 giây

  • NTFS có độ phân giải tối đa 100 ns


giải pháp vũ trụ

Bạn có thể sử dụng wmicđể truy xuất ngày tạo tệp đến micro giây gần nhất.

Thí dụ:

F:\test>wmic datafile where name="f:\\test\\test.txt" get creationdate | findstr /brc:[0-9]
20150329221650.080654+060

Creationdate 20150329221650.080654+060là dấu thời gian, với định dạng sau:

yyyymmddHHMMSS.xxxxxxsUUU

Ở đâu:

  • yyyy Năm bốn chữ số (0000 đến 9999).

  • mm Tháng hai chữ số (01 đến 12).

  • dd Ngày hai chữ số trong tháng (từ 01 đến 31).

  • HH Giờ hai chữ số trong ngày bằng đồng hồ 24 giờ (00 đến 23).

  • MM Phút hai chữ số trong giờ (00 đến 59).

  • SS Số có hai chữ số giây trong phút (00 đến 59).

  • xxxxxx Số lượng sáu chữ số của giây trong giây (000000 đến 999999)

  • sDấu cộng ( +) hoặc dấu trừ ( -) để biểu thị mức bù dương hoặc âm từ Thời báo quốc tế phối hợp (UTC).

  • UUU Độ lệch ba chữ số cho biết số phút mà múi giờ xuất phát lệch khỏi UTC.


giải pháp thống kê

Bạn cũng có thể sử dụng stat(từ cài đặt cygwin hoặc mingw ).

Thí dụ:

DavidPostill@Hal /f/test
$ stat test.txt | grep Birth
 Birth: 2015-03-29 22:16:50.080654200 +0100

đầu ra dir để so sánh

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

Đọc thêm


@NateEldredge Cảm ơn, phát hiện tốt. Trả lời đúng.
DavidPostill

4
Lưu ý thận trọng: chỉ vì dấu thời gian chứa chữ số tần số cao, chẳng hạn như chữ số 100 nano giây, không có nghĩa là đồng hồ có thể được sử dụng làm nguồn thời gian đáng tin cậy trong phạm vi 100ns. Nó chỉ tuyên bố rằng có rất nhiều bit nội dung [hy vọng] đơn điệu và gần tương quan với thời gian "thực".
Cort Ammon - Hồi phục lại

1
Xem msd CIM_DATETIME : trong ký hiệu của bạn, xxxxxxlà số sáu chữ số của micrô giây trong giây (000000 đến 999999) . Micro- , tức là 10^-6. Tất nhiên, bộ ba đầu tiên đại diện cho mili- ( 10^-3): cắt ngắn, không làm tròn. Bộ ba thứ hai trích đại diện không có gì của riêng mình ... Tuy nhiên, một số wmigiá trị datetime hiển thị bộ ba thứ hai 000luôn, ví dụ:wmic OS get LocalDateTime
JosefZ

1
Cảm ơn, những câu trả lời kiểu này là lý do tại sao tôi thích trao đổi ngăn xếp :)
Phil

1
@MarisB. Ah. Trả lời cập nhật.
DavidPostill

1

Một cách thông minh được thể hiện ở đây: /programming/5180592/showing-ntfs-timestamp-with-100-nsec-granularity

Đó là sử dụng VBScript để truy vấn cơ sở dữ liệu CIM của WMI và trả về FILETIMEcấu trúc được liên kết với một tệp.

Ngoài ra còn có các công cụ nguồn mở có thể kiểm tra siêu dữ liệu của tệp phương tiện, chẳng hạn như EXIFtool , hướng đến việc quản lý siêu dữ liệu của phương tiện được tạo bởi máy ảnh kỹ thuật số.


1

Tôi đã tìm thấy một cách để có được điều này trong Matlab:

Bạn có thể sử dụng chức năng GetFileTime được viết bởi Jan Simon. Nếu bạn không muốn biên dịch các tệp mex của riêng mình, bạn cũng có thể tải xuống các tệp đã biên dịch tại đây .

Nó không chính xác như sử dụng wmic (chỉ ms) nhưng với mục đích của tôi thì nó phù hợp.


-3

phụ thuộc vào hệ thống tệp : FAT có độ phân giải 2 giây, về mặt lý thuyết NTFS có độ phân giải 100 ns, nhưng độ phân giải thực tế là 10 ms . Điều đó nói rằng, các ngắt có mức độ ưu tiên cao hơn so với I / O của đĩa và tôi không chắc hiệu ứng ghi bộ đệm có trên tem thời gian. Bộ định thời đa phương tiện được tối ưu hóa cho độ chính xác, do đó sẽ là cách ưa thích để thực hiện thời gian.

Bạn có thể sử dụng một công cụ hiện có như XYplorer để xem dấu thời gian có độ phân giải cao hoặc XYplorer hiển thị ms, bạn có thể thích viết ứng dụng của riêng mình. Sử dụng Phương thức File.GetCreationTime ; nó trả về Cấu trúc DateTime với thuộc tính Millisecond .


1
Ừm ... đừng thô lỗ, nhưng, bạn đã đọc câu trả lời của @ DavidPostill chưa?
td512

2
"Về mặt lý thuyết NTFS có độ phân giải 100 ns, nhưng độ phân giải thực tế là 10 ms " là không chính xác - liên kết đó thực sự nói " trên NT FAT , thời gian tạo có độ phân giải 10 mili giây". Điều đó không có nghĩa là NTFS có độ phân giải đó. Bạn có thể thấy từ câu trả lời của tôi rằng trên NTFS wmichiển thị độ phân giải đến micro giây gần nhất .
DavidPostill

Có một sự khác biệt giữa độ phân giải lý thuyết và độ phân giải tối đa, một cái chỉ ra độ phân giải tối đa, cái còn lại chỉ ra, nhiều hơn độ phân giải trung bình.
Ramhound 7/07/2015

1
@DavidPostill Nếu đồng hồ chỉ tăng thời gian cứ sau 10ms, thì việc ghi thời gian có thể biểu thị 100ns vẫn có độ chính xác chỉ 10ms. Các API UtcNow điển hình (trái ngược với các bộ đếm hiệu suất cao được thiết kế để đo chênh lệch thời gian ) tăng thời gian cứ sau 0,5-16ms trên các cửa sổ, vì vậy câu trả lời này khá hợp lý.
CodeInChaos

@CodesInChaos Có, nhưng - "Tài nguyên tốt nhất để truy xuất thời gian hệ thống là API GetSystemTimeAsFileTime. Đây là API truy cập nhanh có thể giữ các giá trị đủ chính xác (100 ns) trong các đối số của nó." - Tôi không có quyền truy cập vào mã nguồn Windows vì vậy tôi không biết những cuộc gọi nào được sử dụng dưới mui xe khi thao tác dấu thời gian của tệp. Chúng tôi không biết độ phân giải thực tế là gì - đó chỉ là phỏng đoán.
DavidPostill
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.