PowerShell, 시스템에 유럽 날짜 형식이 있는데 CreationTime이 미국 날짜 형식을 요구하는 이유는 무엇입니까?

PowerShell, 시스템에 유럽 날짜 형식이 있는데 CreationTime이 미국 날짜 형식을 요구하는 이유는 무엇입니까?

예전 VHS 테이프를 디지털화했는데 이제는 꽤 많은 개별 파일이 되었습니다. 파일 날짜를 이벤트의 '원래' 날짜로 설정하여 연대순으로 정렬하고 싶습니다.

CreationTime이 작업은 PowerShell에서 및 을 사용하여 수행할 수 있지만 LastWriteTime이해가 되지 않는 부분이 있습니다. 내 시스템 날짜 형식은 유럽식이므로 DD-MM-YYYY이지만 CreationTime미국 날짜 형식만 허용하므로 MM/DD/YYYY도 마찬가지입니다 LastWriteTime. 아래 코드를 참조하세요. PS v4.0 btw입니다.

# This gives error message: Cannot convert value "31-12-1998" to type "System.DateTime"
(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = '31-12-1998'

# This works correctly
(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = '12/31/1998'

# This gives error message: Cannot convert value "12/31/1998" to type "System.DateTime"
Get-Date -Date '12/31/1998'

# This works correctly
Get-Date -Date '31-12-1998'

반대 날짜 형식을 사용하는 CreationTime것 같나요 ? Get-Date이것 뒤에 몇 가지 논리가 있습니까, 아니면 뭔가 빠졌습니까?

답변1

지금 하려는 작업은 문자열(날짜)을 객체 datetime( CreationTime속성) 에 직접 캐스팅하는 것입니다.

문자열을 로 캐스팅하는 경우 datetimeen-US Culture 또는 ISO 8601 형식(일본 날짜/시간 형식이라고도 함)의 두 가지 형식만 사용할 수 있습니다. 이에 대한 자세한 내용은 여기를 참조하세요.https://stackoverflow.com/questions/14359053/why-does-powershell-always-use-us-culture-when-casting-to-datetime

이제 세 가지 옵션이 있습니다.

  • ISO 형식 사용:(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = "1998-12-31"
  • en-US 사용:(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = "12/31/1998"
  • 구문 분석:(gci oud_en_nieuw_beijum.mpg).CreationTime = ([datetime]::Parse("31.12.1998"))

그렇게 하면 parse()PowerShell은 문자열을 현지 문화 정보로 구문 분석하여 "유럽 형식"을 처리할 수 있습니다.

현지 문화와 다른 문화 정보를 구문 분석하려면 개체를 만들고 [cultureinfo]날짜를 구문 분석하면 됩니다. 예:

$dateString = '10.12.2018'
$frenchCulture = [cultureinfo]::GetCultureInfo('fr-FR')
# Parsing with French Culture
[datetime]::Parse($dateString, $frenchCulture)

답변2

나는 (Get-Item Filename.extension).CreationTime=("6 October 2020 17:47:22") 을 사용했는데 완전히 작동했습니다.

LastWriteTime 및 LastAccessTime에 사용하는 경우에도 마찬가지입니다.

관련 정보