รับเวลาสร้างไฟล์เป็นมิลลิวินาที


13

มีวิธีรับเวลาสร้างไฟล์ใน windows ด้วยความแม่นยำสูงขึ้นหรือไม่ ฉันต้องการได้เวลาในการสร้างวิดีโอ mp4 เป็นมิลลิวินาที เป็นไปได้ไหม


ฉันต้องถามว่าทำไมคุณถึงต้องการความแม่นยำนี้
Moab

1
ฉันบันทึกข้อมูลเซ็นเซอร์บางอย่างบนอุปกรณ์ Android พร้อมกับวิดีโอ ฉันเขียนการบันทึกเซ็นเซอร์ด้วยตัวเองและบันทึกเวลาของระบบพร้อมกับค่าเซ็นเซอร์แต่ละค่า สำหรับการบันทึกวิดีโอฉันใช้กิจกรรมกล้องมาตรฐาน หลังจากส่งข้อมูลไปยังพีซีฉันต้องการวิเคราะห์ สำหรับการผสานวิดีโอกับข้อมูลเซ็นเซอร์ฉันต้องรู้เมื่อวิดีโอเริ่ม วินาทีนั้นค่อนข้างหยาบเกินไปดังนั้นฉันจึงมองหาวิธีที่จะทำให้ได้เวลาเริ่มต้นที่แม่นยำยิ่งขึ้นของวิดีโอ
Phil

3
หมายเหตุ: ถ้าคุณต้องการความสัมพันธ์แบบนั้นระหว่าง data data สองกระแสมันเป็นเรื่องสำคัญที่จะต้องใส่สัญญาณการลงทะเบียนใน stream (เช่น clapboards เก่าที่ใช้ในภาพยนตร์ตามที่ผู้กำกับเรียกว่า "action" clap เป็นคิวภาพและเสียง คิวทำให้สามารถซิงค์สตรีมสองรายการขึ้นไปในภายหลัง) ในบางสถานการณ์การหน่วงเวลาระหว่างการสร้างไฟล์ในโหมดเคอร์เนล (และการบันทึกเวลา) และทำให้กระบวนการของคุณตื่นขึ้นเพื่อให้ทราบว่ามีการจัดการไฟล์ที่ใช้งานจริงอาจสูงกว่าความคลาดเคลื่อนที่คุณมีสำหรับข้อมูลของคุณ
Cort Ammon

เมื่อคุณคัดลอกสิ่งของจาก Android ไปยังที่อื่นตรวจสอบให้แน่ใจว่าเครื่องมือทำสำเนาทั้งหมดรักษาความแม่นยำของการประทับเวลา โปรดทราบว่าเครื่องมือคัดลอกจำนวนมากจะทำให้ctimeการคัดลอกเป็นเวลาที่คัดลอก
Peter Cordes

1
บน windows ฉันจะใช้ cygwin / mingw statเพื่อรับทั้งสาม timestamps แน่นอนว่าเป็นเพราะปกติฉันใช้ GNU / Linux
Peter Cordes

คำตอบ:


23

ความละเอียดการประทับเวลา

เวลาประทับของการสร้างไฟล์ใน windows ขึ้นอยู่กับระบบไฟล์:

  • FAT / VFAT มีความละเอียดสูงสุด 2 วินาที

  • NTFS มีความละเอียดสูงสุด 100 ns


วิธีแก้ปัญหา wmic

คุณสามารถใช้wmicเพื่อเรียกคืนวันที่สร้างไฟล์เป็นไมโครวินาทีที่ใกล้ที่สุด

ตัวอย่าง:

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

creationdate 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เครื่องหมายบวก ( +) หรือเครื่องหมายลบ ( -) เพื่อระบุออฟเซ็ตบวกหรือลบจาก Coordinated Universal Times (UTC)

  • UUU อ็อฟเซ็ตสามหลักระบุจำนวนนาทีที่เขตเวลาเริ่มต้นเบี่ยงเบนจาก UTC


วิธีการแก้ปัญหาสถิติ

คุณยังสามารถใช้stat(จากการติดตั้งcygwinหรือmingw )

ตัวอย่าง:

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

เอาท์พุท dir สำหรับการเปรียบเทียบ

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

อ่านเพิ่มเติม


@NateEldredge ขอบคุณเห็นดี แก้ไขคำตอบแล้ว
DavidPostill

4
ข้อควรระวัง: เนื่องจากการประทับเวลามีตัวเลขความถี่สูงเช่นหลัก 100 นาโนวินาทีไม่ได้หมายความว่านาฬิกาสามารถใช้เป็นแหล่งเวลาที่เชื่อถือได้ในช่วง 100ns เพียง แต่ระบุว่ามีเนื้อหาจำนวนมากซึ่งเป็น [หวังว่า] แบบโมโนโทนิกและมีความสัมพันธ์กับเวลา "ของจริง" อย่างคร่าวๆ
Cort Ammon

1
ดู MSDN CIM_DATETIME : สัญกรณ์ของคุณxxxxxxคือเลขหกหลักของไมโครในครั้งที่สอง (000000 ผ่าน 999999) ไมโคร10^-6คือ แน่นอน triplet แรกหมายถึงmili- ( 10^-3): ถูกปัดเศษ, ไม่ปัดเศษ ทริปเล็ตที่สองที่แยกออกมานั้นไม่มีอะไรในตัวมันเอง ... อย่างไรก็ตามwmiค่าบางอย่างในช่วง000เวลาหนึ่งแสดงทริปwmic OS get LocalDateTime
เล็ต

1
ขอบคุณชนิดของคำตอบเหล่านี้คือเหตุผลที่ฉันรักการแลกเปลี่ยนสแต็ค :)
ฟิล

1
@MarisB อา. อัปเดตคำตอบแล้ว
DavidPostill

1

วิธีที่ฉลาดจะแสดงให้เห็นที่นี่: /programming/5180592/showing-ntfs-timestamp-with-100-nsec-granularity

กำลังใช้ VBScript เพื่อสืบค้นฐานข้อมูล CIM ของ WMI และส่งคืน FILETIMEโครงสร้างที่สัมพันธ์กับไฟล์

นอกจากนี้ยังมีเครื่องมือโอเพ่นซอร์สที่สามารถตรวจสอบข้อมูลเมตาของไฟล์สื่อเช่นEXIFtoolซึ่งมุ่งเน้นการจัดการข้อมูลเมตาของสื่อที่สร้างโดยกล้องดิจิตอล


1

ฉันพบวิธีการขอรับสิ่งนี้ใน Matlab:

คุณสามารถใช้ฟังก์ชันGetFileTime ที่เขียนโดย Jan Simon หากคุณไม่ต้องการที่จะรวบรวมไฟล์ MEX ของคุณเองคุณยังสามารถดาวน์โหลดไฟล์ที่รวบรวมที่นี่

มันไม่แม่นยำเท่ากับการใช้ wmic (เฉพาะ ms) แต่สำหรับจุดประสงค์ของฉันมันเหมาะสม


-3

มันขึ้นอยู่กับระบบไฟล์ : FAT มี 2 ความละเอียดสอง, NTFS ในทางทฤษฎีมีความละเอียด 100 ns การ แต่ที่เกิดขึ้นจริงมีความละเอียดอยู่ที่ 10 มิลลิวินาที ที่กล่าวว่าอินเตอร์รัปต์มีลำดับความสำคัญสูงกว่าดิสก์ I / O และฉันไม่แน่ใจว่าเอฟเฟกต์การเขียนแคชจะมีผลต่อการประทับเวลาหรือไม่ ตัวจับเวลามัลติมีเดียได้รับการปรับให้เหมาะสมเพื่อความถูกต้องดังนั้นจึงเป็นวิธีที่ต้องการในการใช้การกำหนดเวลา

คุณสามารถใช้เครื่องมือที่มีอยู่เช่นXYplorerเพื่อดูการประทับเวลาความละเอียดสูงหรือXYplorer แสดง msคุณอาจต้องการเขียนแอปพลิเคชันของคุณเอง ใช้วิธี File.GetCreationTime ; มันจะส่งกลับโครงสร้าง DateTime ด้วยคุณสมบัติมิลลิวินาที


1
อืม ... เพื่อไม่ให้หยาบคาย แต่คุณอ่านคำตอบของ @ DavidPostill แล้วหรือยัง?
td512

2
"NTFS ตามหลักวิชามีความละเอียด 100 ns แต่ความละเอียดจริงคือ 10 ms " ไม่ถูกต้อง - ลิงก์นั้นบอกว่า " บน NT FATจริง ๆ แล้วสร้างเวลามีความละเอียด 10 มิลลิวินาที" ไม่ได้หมายความว่าNTFSมีวิธีแก้ไขปัญหานั้น คุณสามารถดูจากคำตอบของฉันว่าเมื่อวันที่ NTFS wmicแสดงให้เห็นถึงความละเอียดไปยังที่ใกล้ที่สุดของวินาที
DavidPostill

มีความแตกต่างระหว่างทางทฤษฎีและความละเอียดสูงสุดหนึ่งบ่งบอกถึงความละเอียดสูงสุดดีอื่น ๆ บ่งชี้ความละเอียดเฉลี่ยมากขึ้น
Ramhound

1
@DavidPostill หากนาฬิกาเพิ่มเวลาทุก ๆ 10ms เท่านั้นดังนั้นการยื่น datetime ที่สามารถเป็นตัวแทน 100ns ยังคงมีความแม่นยำเพียง 10ms UtcNow APIs ทั่วไป (ต่างจากตัวนับประสิทธิภาพสูงซึ่งออกแบบมาสำหรับการวัดความแตกต่างของเวลา) เพิ่มเวลาทุก ๆ 0.5-16ms บน windows ดังนั้นคำตอบนี้จึงน่าเชื่อถือ
CodesInChaos

@CodesInChaos ใช่ แต่ - "ทรัพยากรที่ดีที่สุดสำหรับการดึงเวลาของระบบคือ GetSystemTimeAsFileTime API มันเป็น API การเข้าถึงที่รวดเร็วที่สามารถเก็บค่าที่แม่นยำ (100 ns หน่วย) ในอาร์กิวเมนต์" - ฉันไม่สามารถเข้าถึงซอร์สโค้ดของ Windows ดังนั้นฉันจึงไม่ทราบว่ามีการใช้สายใดภายใต้ประทุนเมื่อจัดการกับการประทับเวลาของไฟล์ เราไม่รู้ว่าการแก้ปัญหาที่แท้จริงคืออะไร - นั่นเป็นเพียงการคาดเดา
DavidPostill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.