Powershell Get-Date 格式不正确
Posted
技术标签:
【中文标题】Powershell Get-Date 格式不正确【英文标题】:Powershell Get-Date not formatting properly 【发布时间】:2018-04-10 22:24:54 【问题描述】:我有一个从某处读取的日期,因此我将其作为字符串值检索。我的文化是 de-DE,但在脚本在 en-US 中运行时需要时间来获得 AM/PM:
$date = 10.04.2018 14:40:20
$NewDate = Get-Date -Date $date -Format "dd MMM yyyy h:mm:ss tt"
我想要的是 $NewDate 是 2018 年 4 月 10 日下午 2:40:20,但我只能得到 2018 年 4 月 10 日 2:40:20。在英语中,tt 可以很好地转换为 AM/PM,但我如何在这里得到它?
【问题讨论】:
你在 en_US 系统上运行过这个吗?结果如何? 【参考方案1】:如果你想依赖一个特定的日期字符串,无论你的脚本在哪里以及使用什么文化信息运行,你都必须为你的输出定义一个固定的文化信息:
$date = '10.04.2018 14:40:20'
$culture = [System.Globalization.CultureInfo]::CreateSpecificCulture('en-US')
(Get-Date $date).ToString('dd MMM yyyy h:mm:ss tt', $culture)
输出:
10 Apr 2018 2:40:20 PM
即使在您的“de-DE”机器上,输出也将始终相同。您可以在我的回答 here 中阅读有关日期格式的更多信息。
【讨论】:
【参考方案2】:看看这个article,并修改这个代码来实现你想要的。
$cultures = "en-US","en-GB","fr-CA","fr-FR","ms-MY","zh-HK", "de-DE"
foreach ($c in $cultures)
$culture = New-Object system.globalization.cultureinfo($c)
$date = get-date -format ($culture.DateTimeFormat.LongTimePattern)
New-Object psobject -Property @"name"=$culture.displayname; "date"=$date
另外一定要看看$culture.DateTimeFormat
的各种属性。
【讨论】:
这可能有效,或者其中一些代码。我想我会动态获取当前的文化,但我只需要自定义格式的格式【参考方案3】:$date 变量不是日期时间类型。实际上,这个任务不会运行。我假设您打算将其设为字符串。使用ParseExact()
将其转换为日期。
$date = [datetime]::ParseExact('10.04.2018 14:40:20','M.d.yyyy H:m:s', $null)
$NewDate = Get-Date -Date $date -Format "dd MMM yyyy h:mm:ss tt"
【讨论】:
假设 OP 只是忘记了$date = '10.04.2018 14:40:20'
上的引号,那么他们的代码会运行,因为该字符串将被转换为 DateTime。我怀疑问题出在 de-DE 文化和那里的互操作上。
我的问题实际上是,在美国,4 月 10 日是 2018 年 4 月 10 日,而在德国是 2018 年 10 月 4 日。我不能使用 parseExact,因为我不知道它始终采用的确切格式。
如果不知道传入的数据,不知怎么办。正如@KoryGill 建议的那样,选择一种文化仍然需要根据传入的数据格式来完成。程序在美国机器上运行时传入的数据是 en_US 格式,在德国机器上运行时是 de_DE 格式吗?以上是关于Powershell Get-Date 格式不正确的主要内容,如果未能解决你的问题,请参考以下文章
powershell 日期格式(与get-date的-format参数一起使用)
Powershell计算时间间隔(New-TimeSpan)