gpt4 book ai didi

powershell - PowerShell中字符串到日期时间的转换出错(以前可以工作)

转载 作者:行者123 更新时间:2023-12-02 23:20:14 28 4
gpt4 key购买 nike

脚本正在解析 *.csv 中的值文件。
其中一个值是格式为 7/21/2018 7:07 AM UTC 的时间戳。

这条线以前曾经工作过:

$DR.Item($property.Name) = (
[System.DateTime](Get-Date($property.value -replace " UTC", ""))
).TolocalTime() -f "MM/d/yyyy HH:mm:ss"

它不再工作了。我收到以下错误:
Get-Date : Cannot bind parameter 'Date'. Cannot convert value "7/21/2018 7:07 AM" to type "System.DateTime". Error: "String was not recognized as a valid
DateTime."

最佳答案

您的命令失败表明执行时的当前文化( [cultureinfo]::CurrentCulture )不是 en-US (美国英语),在这种情况下 Get-Date无法识别日期/时间字符串,例如 "7/21/2018 7:07 AM [1]。

解决方法是使用 [datetime]直接转换,不涉及 Get-Date , 因为一个 [datetime] cast 总是使用 invariant culture ,就像 en-US关于日期/时间格式的文化:

$DR.Item($property.Name) = ([datetime] ($property.value -replace ' UTC$')) -f "MM/d/yyyy HH:mm:ss"

警告 : 您调用 .ToLocalTime()输出格式不需要,因为 [datetime]默认情况下,您收到的实例的行为就像在本地时间一样,即使它在技术上与时区无关,如其 .Kind 中所反射(reflect)的那样。包含 Unspecified 的属性.也就是说,您的输出将反射(reflect) UTC 日期和时间,但未指明。
如果您确实想将输入的 UTC 时间戳转换为等效的本地时间,则需要做更多的工作:
$dtUtc = [datetime]::SpecifyKind(($property.value -replace ' UTC$'), 'Utc')
$DR.Item($property.Name) = $dtUtc.ToLocalTime() -f "MM/d/yyyy HH:mm:ss"

[1] PowerShell 在 from-string 和 to-string 类型转换时通常使用不变文化,但奇怪的是,在将字符串作为参数传递给已编译的 cmdlet 时不这样做,而不是 [advanced] 函数(编写在 PowerShell 中)。
这是 known problem , 但由于向后兼容的原因,它可能无法修复。

关于powershell - PowerShell中字符串到日期时间的转换出错(以前可以工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52694364/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com