Digitalizei minhas fitas VHS antigas e agora são vários arquivos separados. Quero definir os arquivos como as datas 'originais' dos eventos, para poder classificá-los cronologicamente.
Isso pode ser feito com o PowerShell usando CreationTime
e LastWriteTime
, mas há algo que não entendo. O formato de data do meu sistema é europeu, então DD-MM-AAAA, mas CreationTime
só aceita o formato de data dos EUA, então MM/DD/AAAA (o mesmo vale para LastWriteTime
). Veja o código abaixo, é PS v4.0 aliás.
# 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'
Parece que CreationTime
e Get-Date
usa os formatos de data opostos? Existe alguma lógica por trás disso ou estou faltando alguma coisa?
Responder1
O que você está tentando fazer agora é converter uma string (a data) diretamente em um datetime
objeto (a CreationTime
propriedade)
Se você converter uma string para datetime
, poderá usar apenas dois formatos, cultura en-US ou formato ISO 8601 (também conhecido como formato de data e hora japonês). Leia mais sobre isso aqui:https://stackoverflow.com/questions/14359053/why-does-powershell-always-use-us-culture-when-casting-to-datetime
Então você tem três opções agora:
- Usar formato ISO:
(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = "1998-12-31"
- Use en-US:
(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = "12/31/1998"
- Analisar:
(gci oud_en_nieuw_beijum.mpg).CreationTime = ([datetime]::Parse("31.12.1998"))
se você parse()
fizer isso, o PowerShell analisará a string, com as informações da sua cultura local, para que possa lidar com o "formato europeu"
se você quiser analisar informações culturais diferentes da sua cultura local, basta criar um [cultureinfo]
objeto e analisar a data. por exemplo:
$dateString = '10.12.2018'
$frenchCulture = [cultureinfo]::GetCultureInfo('fr-FR')
# Parsing with French Culture
[datetime]::Parse($dateString, $frenchCulture)
Responder2
Eu usei (Get-Item Filename.extension).CreationTime=("6 October 2020 17:47:22") e funciona totalmente.
A mesma coisa se você usar para LastWriteTime e LastAccessTime.