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 可能会把所表示的时刻转换为计算机的本地时间;结果可能具有 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 等合适的格式说明符。