HOWTO · PowerShell
使用 PowerShell 獲取日期和時間
本文將解釋我們如何獲取當前日期和時間,以及 DateTime 物件在 PowerShell 中是如何工作的。
本頁內容
PowerShell 的 Get-Date Cmdlet 會以 System.DateTime 值傳回目前日期和時間。你可以檢視它的屬性、使用 AddDays() 等方法計算新日期、比較日期值、透過 [DateTime] 轉換字串,並使用 -Format 格式化值。
在 PowerShell 中取得日期和時間
呼叫 Get-Date 以取得目前日期和時間。將結果指派給變數,便於檢視或重複使用。
$now = Get-Date
$now
顯示的日期和時間會反映電腦時鐘、本地時區和文化設定,因此每次執行可能不同。Get-Date 傳回的是 System.DateTime 物件,而不只是文字字串。你可以選取 Year、DayOfWeek 和 DayOfYear 等屬性,檢視其中的部分值:
$now = Get-Date
$now | Select-Object Year, Month, Day, DayOfWeek, DayOfYear, Hour, Minute
若要查看物件的型別,請使用 GetType()。若要檢視可用的屬性和方法,請將物件透過管線傳給 Get-Member:
$now = Get-Date
$now.GetType().FullName
$now | Get-Member
型別名稱是 System.DateTime。若要在其他運算式中使用個別屬性,請使用點記號,例如 $now.Year。
在 PowerShell 中使用 DateTime 方法進行日期運算
System.DateTime 值提供的方法可從起始日期向前或向後計算。若要讓計算結果可重複,請明確定義起始值;AddDays()、AddHours() 和 AddYears() 會傳回新的日期時間值,不會變更原始值。
$start = [datetime]::new(2024, 5, 10, 9, 0, 0)
$start.AddDays(8)
$start.AddHours(3)
$start.AddYears(5)
$start.AddDays(-7)
使用負數引數即可減去相應的時間。這些結果以 $start 為基準,因此變更起始值也會改變各項結果。DateTime 也提供 AddMonths() 和 AddMinutes() 等方法,可計算其他時間間隔。
在 PowerShell 中比較日期
PowerShell 的 -lt 和 -gt 運算子可判斷一個日期時間值是否早於或晚於另一個值。請使用來源明確的值,例如以 Get-Date 取得目前時間,或使用已剖析的日期字串。
$first = [datetime]::new(2024, 5, 10)
$second = [datetime]::new(2024, 5, 11)
$first -lt $second
$first -gt $second
每次比較都會傳回布林值:左側值較早時,-lt 為 true;左側值較晚時,-gt 為 true。範例中的日期時間是午夜,因為建構時沒有提供時間。
在 PowerShell 中將字串轉換為 DateTime 物件
當字串內容代表日期和時間時,可將它轉型為 [DateTime]:
$dateText = "2024-05-10T13:35:08"
$date = [DateTime]$dateText
$date.GetType().FullName
$date
轉型時,PowerShell 和 .NET 會嘗試將文字解讀為日期。請使用明確無歧義的輸入格式;接收使用者輸入的字串時,也要考量目前的文化設定。結尾的 Z 表示輸入時間戳記採用 UTC。PowerShell 將這段文字轉型為 [DateTime] 時,.NET 可能會把該時間點轉換為電腦的本地時間;結果的 Kind 可能是 Local,顯示的時鐘時間也可能是本地時間,而非輸入中的 UTC 時間欄位。因此,顯示值會受到電腦時區影響。若要保留時間戳記的明確偏移量,請將它剖析為 DateTimeOffset;結尾為 Z 的時間戳記會以 +00:00 偏移量表示。
PowerShell 中的 DateTime 方法
對於常見的日期和時間字串,DateTime 提供 ToLongDateString()、ToShortDateString()、ToLongTimeString() 和 ToShortTimeString()。每個方法都會依目前文化設定的慣例傳回字串。
此範例會先定義自己的值,再結合簡短日期和簡短時間格式:
$date = [datetime]::new(2024, 5, 10, 9, 30, 0)
$date.ToShortDateString() + " " + $date.ToShortTimeString()
這些方法會使用目前的文化設定,因此不同系統上的分隔符號和排列順序可能不同。若需要特定格式,請指定明確的格式字串。
在 PowerShell 中格式化 DateTime 物件
使用 Get-Date -Format 可將日期時間值轉成指定格式的字串。你可以透過 -Date 傳入現有值,或省略它以格式化目前日期和時間。
$date = [datetime]::new(2024, 5, 10, 21, 21, 0)
Get-Date -Date $date -Format "dddd dd-MM-yyyy HH:mm"
在此格式模式中,dddd 代表完整的星期名稱,dd 代表日期,MM 代表月份,yyyy 代表四位數年份,HH:mm 代表 24 小時制時間。名稱和日期慣例會依目前文化設定而異。若值代表特定時間點,時區轉換也會影響顯示的本地時間;需要顯示偏移量時,可加入適用的格式字元,例如 K。