밀리 초 단위로 파일 생성 시간 가져 오기


13

윈도우에서 파일 생성 시간을 더 정확하게 얻는 방법이 있습니까? mp4 비디오의 생성 시간을 밀리 초 단위로 얻고 싶습니다. 이게 가능해?


왜이 정확도가 필요한지 물어봐야합니까?
Moab

1
비디오와 함께 Android 장치에 일부 센서 데이터를 기록합니다. 센서 로깅을 직접 작성하고 각 센서 값과 함께 시스템 시간을 기록합니다. 비디오 녹화를 위해 표준 카메라 활동을 사용합니다. 데이터를 PC로 보낸 후 분석하고 싶습니다. 비디오를 센서 데이터와 병합하려면 비디오가 언제 시작되었는지 알아야합니다. 초는 너무 거칠기 때문에 비디오의 정확한 시작 시간을 얻는 방법을 찾고 있습니다.
Phil

3
참고 : 두 데이터 스트림 사이에 이런 종류의 관계가 필요한 경우 감독이 "액션"을 호출 할 때 영화에 사용 된 기존 판자와 같이 스트림에 등록 신호를 넣어야합니다. 박수는 시각적 신호와 오디오였습니다. 큐, 두 개 이상의 스트림을 나중에 동기화 할 수 있습니다). 어떤 상황에서는 커널 모드에서 파일을 생성하고 타임 스탬프를 기록하고 프로세스가 깨어나서 파일 핸들을 가지고 있음을 알리기까지의 시간 지연이 실제로 데이터 허용 오차보다 클 수 있습니다.
Cort Ammon

Android에서 다른 곳으로 자료를 복사 할 때 모든 복사 도구가 타임 스탬프 정밀도를 유지하는지 확인하십시오. 많은 복사 도구는 ctime복사본을 복사 한 시간으로 만듭니다.
Peter Cordes

1
Windows에서는 cygwin / mingw stat를 사용 하여 3 개의 타임 스탬프를 모두 얻었습니다. 물론, 저는 보통 GNU / Linux를 사용하기 때문입니다.
Peter Cordes

답변:


23

타임 스탬프 해상도

Windows에서 파일의 작성 시간 소인은 파일 시스템에 따라 다릅니다.

  • FAT / VFAT의 최대 해상도는 2 초입니다

  • NTFS의 최대 해상도는 100ns입니다.


WMIC 솔루션

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 4 자리 연도 (0000 ~ 9999)

  • mm 두 자리 월 (01-12).

  • dd 월의 두 자리 숫자 (01-31).

  • HH 24 시간제 (00-23)를 사용한 하루 중 두 자리 시간.

  • MM 시간에서 두 자리 분 (00-59).

  • SS 분 단위의 두 자리 숫자 (초)입니다 (00-59).

  • xxxxxx 초의 6 자리 마이크로 초 수 (000000-999999)

  • s더하기 기호 ( +) 또는 빼기 기호 ( -)는 UTC (협정 세계시)로부터 양수 또는 음수 오프셋을 나타냅니다.

  • UUU 원래 시간대가 UTC에서 벗어난 시간 (분)을 나타내는 3 자리 오프셋입니다.


스탯 솔루션

cygwin 또는 mingw 설치 stat에서 사용할 수도 있습니다 .

예:

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이다 번째 (999999 통해 000000)의 마이크로 여섯 자리 숫자 . 마이크로 , 즉 10^-6. 물론 첫 번째 삼중 항은 mili- ( 10^-3)를 나타냅니다 . 추출 된 두 번째 삼중 나타냅니다 아무것도 자체가 ... 그러나 일부 wmi날짜 시간 값이 두 번째 삼중를 표시하지 000, 항상 예wmic OS get LocalDateTime
JosefZ

1
고마워, 이런 종류의 답변은 내가 스택 교환을 좋아하는 이유입니다. :)
Phil

1
@MarisB. 아 답변이 업데이트되었습니다.
DavidPostill


1

Matlab에서 이것을 얻는 방법을 찾았습니다.

Jan Simon이 작성한 GetFileTime 함수를 사용할 수 있습니다 . 자신의 mex 파일을 컴파일하지 않으려면 여기 에서 컴파일 된 파일을 다운로드 할 수도 있습니다 .

wmic (ms 만)를 사용하는 것만 큼 정확하지는 않지만 제 목적으로는 적합합니다.


-3

파일 시스템에 따라 NTFS는 FAT는 이초 해상도를 가지고 : 이론적으로 100 ns의 해상도를 가지고 있지만, 실제 해상도는 10 밀리 초입니다 . 즉, 인터럽트는 디스크 I / O보다 우선 순위가 높으며 쓰기 캐싱이 타임 스탬프에 미치는 영향이 확실하지 않습니다. 멀티미디어 타이머 는 정확성을 위해 최적화되었으므로 타이밍을 구현하는 데 선호되는 방법입니다.

XYplorer 와 같은 기존 도구를 사용하여 고해상도 타임 스탬프를 보거나 ms를 보여주는 XYplorer자신의 응용 프로그램을 작성하는 것이 좋습니다. File.GetCreationTime 메소드를 사용하십시오 . Millisecond 속성을 가진 DateTime 구조체를 반환 합니다.


1
음 ... 무례하지는 않지만 @DavidPostill의 답변을 읽었습니까?
td512

2
"NTFS는 이론적으로 100 ns 해상도를 갖지만 실제 해상도는 10 ms입니다 " " 정확하지 않습니다 .이 링크는 실제로 NT FAT 에서 " 시간은 10 밀리 초의 해상도를가집니다 "라고 말합니다. 그렇다고 NTFS 에 해상도가 있다는 의미 는 아닙니다 . 내 대답에서 NTFS 에서 가장 가까운 마이크로 초의 해상도를 보여줍니다 . wmic
DavidPostill

이론적 인 해상도와 최대 해상도 사이에는 차이가 있습니다. 하나는 최대 해상도를 나타내고 다른 하나는 averag 해상도를 나타냅니다.
Ramhound

1
@DavidPostill 클럭이 10ms마다 시간 만 증가시키는 경우 100ns를 나타낼 수있는 날짜 시간을 기록하면 여전히 10ms의 정확도를 갖습니다. 일반적인 UtcNow API (시간 차이 를 측정하도록 설계된 고성능 카운터와 달리 )는 Windows에서 0.5-16ms마다 시간을 증가 시키므로이 대답은 그럴듯합니다.
코드 InChaos

@CodesInChaos 네,하지만- "시스템 시간을 검색하는 데 가장 적합한 리소스는 GetSystemTimeAsFileTime API입니다. 인수에 충분히 정확한 (100ns 단위) 값을 보유 할 수있는 빠른 액세스 API입니다." -Windows 소스 코드에 액세스 할 수 없으므로 파일 타임 스탬프를 조작 할 때 어떤 호출이 사용되는지 알 수 없습니다. 우리는 실제 해상도가 무엇인지 모릅니다. 그것은 단지 추측입니다.
DavidPostill
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.