Dapatkan waktu pembuatan file dalam milidetik


13

Apakah ada cara untuk mendapatkan waktu pembuatan file di windows dalam akurasi yang lebih tinggi? Saya ingin mendapatkan waktu pembuatan video mp4-dalam milidetik. Apakah ini mungkin?


Saya harus bertanya mengapa Anda membutuhkan akurasi ini?
Moab

1
Saya merekam beberapa data sensor pada perangkat Android bersama dengan video. Saya menulis sensor logging sendiri dan mencatat waktu sistem bersama dengan masing-masing nilai sensor. Untuk merekam video saya menggunakan aktivitas kamera standar. Setelah mengirim data ke PC saya ingin menganalisisnya. Untuk menggabungkan video dengan data sensor saya harus tahu kapan video dimulai. Detik agak terlalu kasar sehingga saya mencari cara untuk mendapatkan waktu mulai video yang lebih tepat.
Phil

3
Catatan: jika Anda memerlukan hubungan semacam itu antara dua aliran data, biasanya penting untuk menempatkan sinyal registrasi di aliran (seperti papan lama yang digunakan dalam film sebagai sutradara menyebut "aksi". Tepukan itu adalah isyarat visual dan audio isyarat, memungkinkan dua aliran atau lebih untuk disinkronkan nanti). Dalam beberapa situasi, waktu tunda antara membuat file dalam mode kernel (dan merekam stempel waktu) dan membangunkan proses Anda untuk memberi tahu bahwa file itu memiliki pegangan file yang bisa digunakan sebenarnya bisa lebih tinggi daripada toleransi yang Anda miliki untuk data Anda.
Cort Ammon - Reinstate Monica

Saat Anda menyalin barang-barang Anda dari Android ke tempat lain, pastikan semua alat salin mempertahankan ketepatan waktu. Perhatikan bahwa banyak alat salin akan membuat ctimesalinan menjadi waktu disalin.
Peter Cordes

1
Di windows, saya akan menggunakan cygwin / mingw statuntuk mendapatkan semua 3 cap waktu. Tentu saja, itu karena saya biasanya menggunakan GNU / Linux.
Peter Cordes

Jawaban:


23

Resolusi cap waktu

Cap waktu pembuatan file di windows tergantung pada sistem file:

  • FAT / VFAT memiliki resolusi maksimum 2s

  • NTFS memiliki resolusi maksimum 100 ns


solusi wmic

Anda dapat menggunakan wmicuntuk mengambil tanggal pembuatan file ke mikrodetik terdekat.

Contoh:

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

Tanggal pembuatan 20150329221650.080654+060adalah cap waktu, dengan format berikut:

yyyymmddHHMMSS.xxxxxxsUUU

dimana:

  • yyyy Tahun empat digit (0000 hingga 9999).

  • mm Dua digit bulan (01 hingga 12).

  • dd Dua digit hari dalam sebulan (01 hingga 31).

  • HH Jam dua digit sehari menggunakan jam 24 jam (00 hingga 23).

  • MM Dua digit menit dalam satu jam (00 hingga 59).

  • SS Dua digit jumlah detik dalam menit (00 hingga 59).

  • xxxxxx Enam digit jumlah mikrodetik dalam detik (000000 hingga 999999)

  • sTanda plus ( +) atau tanda minus ( -) untuk menunjukkan offset positif atau negatif dari Coordinated Universal Times (UTC).

  • UUU Offset tiga digit menunjukkan jumlah menit yang menyimpang dari zona waktu asal dari UTC.


solusi stat

Anda juga dapat menggunakan stat(dari instalasi cygwin atau mingw ).

Contoh:

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

output dir untuk perbandingan

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

Bacaan lebih lanjut


@NateEldredge Terima kasih, terlihat dengan baik. Jawaban dikoreksi.
DavidPostill

4
Catatan hati-hati: hanya karena stempel waktu berisi digit frekuensi tinggi, seperti digit 100 nanodetik, tidak berarti jam dapat digunakan sebagai sumber waktu yang dapat diandalkan di kisaran 100ns. Ini hanya menyatakan bahwa ada banyak bit konten yang [mudah-mudahan] monoton dan secara kasar berkorelasi dengan waktu "nyata".
Cort Ammon - Reinstate Monica

1
Lihat msdn CIM_DATETIME : dalam notasi Anda, xxxxxxadalah Enam digit jumlah mikrodetik di detik (000000 hingga 999999) . Mikro , yaitu 10^-6. Tentu saja, triplet pertama mewakili mili- ( 10^-3): terpotong, tidak bulat. Triplet kedua yang diekstraksi tidak mewakili apa pun dalam dirinya sendiri ... Namun, beberapa wminilai datetime menunjukkan triplet kedua 000selalu, misalnyawmic OS get LocalDateTime
JosefZ

1
Terima kasih, jawaban semacam ini adalah mengapa saya suka pertukaran stack :)
Phil

1
@MarisB. Ah. Jawaban diperbarui.
DavidPostill


1

Saya menemukan cara bagaimana mendapatkan ini di Matlab:

Anda dapat menggunakan fungsi GetFileTime yang ditulis oleh Jan Simon. Jika Anda tidak ingin mengkompilasi file mex Anda sendiri, Anda juga dapat mengunduh file yang dikompilasi di sini .

Ini tidak setepat menggunakan wmic (hanya ms) tetapi untuk tujuan saya itu cocok.


-3

Ini tergantung pada sistem file : FAT memiliki 2 resolusi kedua, NTFS secara teoritis memiliki resolusi 100 ns, tetapi sebenarnya resolusi adalah 10 ms . Yang mengatakan, interupsi memiliki prioritas lebih tinggi daripada disk I / O, dan saya tidak yakin efek caching ada pada cap waktu. Pengatur waktu multimedia dioptimalkan untuk akurasi, sehingga akan menjadi cara yang lebih disukai untuk menerapkan pengaturan waktu.

Anda dapat menggunakan alat yang ada seperti XYplorer untuk melihat cap waktu resolusi tinggi, atau XYplorer menampilkan ms, Anda mungkin lebih suka menulis aplikasi Anda sendiri. Gunakan Metode File.GetCreationTime ; mengembalikan Struktur DateTime dengan properti Millisecond .


1
um ... jangan kasar, tapi, apakah Anda membaca jawaban @ DavidPostill?
td512

2
"NTFS secara teoritis memiliki resolusi 100 ns, tetapi sebenarnya resolusi adalah 10 ms " tidak benar - tautan itu sebenarnya mengatakan " pada NT FAT , buat waktu memiliki resolusi 10 milidetik". Itu tidak berarti NTFS memiliki resolusi itu. Anda dapat melihat dari jawaban saya bahwa pada NTFS wmicmenunjukkan resolusi ke mikrodetik terdekat .
DavidPostill

Ada perbedaan antara resolusi teoritis dan maksimum, yang satu menunjukkan resolusi maksimum, yang lain menunjukkan, lebih banyak dari resolusi rata-rata.
Ramhound

1
@ Davidvidost. Jika jam hanya menambah waktu setiap 10 ms, maka memiliki datetime diajukan yang dapat mewakili 100ns masih memiliki akurasi hanya 10 ms. API UtcNow yang khas (berbeda dengan penghitung kinerja tinggi yang dirancang untuk mengukur perbedaan waktu ) menambah waktu setiap 0,5-16 ms pada windows, jadi jawaban ini cukup masuk akal.
CodesInChaos

@CodesInChaos Ya, tapi - "Sumber daya terbaik untuk mengambil waktu sistem adalah GetSystemTimeAsFileTime API. Ini adalah API akses cepat yang mampu menyimpan nilai yang cukup akurat (100 unit unit) dalam argumennya." - Saya tidak memiliki akses ke kode sumber Windows jadi saya tidak tahu panggilan apa yang digunakan di bawah tenda saat memanipulasi cap waktu file. Kami tidak tahu apa resolusi sebenarnya - itu hanya menebak.
DavidPostill
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.