我想更改 Powershell 中日期和时间的默认格式以使用 ISO 8601 格式, 因此,它不会显示为
dd/mm/yyyy
,而是使用 yyyy-mm-dd
请注意:我不想直接在日期对象上指定任何内容, 因为当返回的对象上只有一个日期字段时,这会很烦人。 我想更改将在任何地方使用的默认格式。
Windows ISO 8601 时间戳 没有回答这个问题 那里的答案都涉及直接处理 DateTime 对象。
# NOT THIS
Get-Date -Format 'yyyy-mm-dd'
# NOR THIS
$d = Get-Date
$d.ToString('o')
该解决方案必须适用于 Powershell 7 及更高版本。
我进行了以下尝试,但它们都导致了所示的错误。
DateTimeFormat
(Get-Culture).DateTimeFormat = [cultureinfo]::InvariantCulture.DateTimeFormat
输出:
SetValueInvocationException: Exception setting "DateTimeFormat": "Instance is read-only."
Set-Culture
Set-Culture [cultureinfo]::InvariantCulture
输出:
Set-Culture: Cannot bind parameter 'CultureInfo'. Cannot convert value "[cultureinfo]::InvariantCulture" to type "System.Globalization.CultureInfo". Error: "Culture is not supported. (Parameter 'name')
[cultureinfo]::InvariantCulture is an invalid culture identifier."
(PowerShell 7.3.9)
我的解决方案是更改
LongDatePattern
的LongTimePattern
和
DateTimeFormat
。
function Switch-DefaultTimeFormat(){
$currentThread = [System.Threading.Thread]::CurrentThread
$culture = [CultureInfo]::InvariantCulture.Clone()
#see https://learn.microsoft.com/en-us/dotnet/api/system.globalization.datetimeformatinfo?view=net-7.0
$culture.DateTimeFormat.LongDatePattern = "yyyy-MM-dd"
$culture.DateTimeFormat.LongTimePattern = "HH:mm:ss.fff"
$currentThread.CurrentCulture = $culture
$currentThread.CurrentUICulture = $culture
}
调用此函数以应用新的默认日期格式。 从配置文件脚本调用该函数以“使其成为默认值”。
看看有没有帮助!
测试与输出:
PS D:\> Get-Date
Tuesday, 14 November 2023 3:38:17 pm
PS D:\> Switch-DefaultTimeFormat
PS D:\> Get-Date
2023-11-14 15:38:17.838