我已經將我的舊 VHS 磁帶數位化,現在它是許多單獨的文件。我想將歸檔日期設定為事件的“原始”日期,以便我可以按時間順序對它們進行排序。
CreationTime
這可以透過 PowerShell 使用和來完成LastWriteTime
,但有一些我不明白的地方。我的系統日期格式是歐洲的,所以 DD-MM-YYYY 但CreationTime
只接受美國日期格式,所以 MM/DD/YYYY (同樣適用LastWriteTime
)。請參閱下面的程式碼,順便說一句,它是 PS v4.0。
# 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
屬性)
如果將字串轉換為datetime
,則只能使用兩種格式:en-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,也會發生相同的情況。