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


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.