如何修复 Powershell 中的日期格式以使用 ISO 8601

问题描述 投票:0回答:1

我想更改 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 iso8601
1个回答
0
投票

(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

© www.soinside.com 2019 - 2024. All rights reserved.