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 Get-Date

powershell入门

Powershell计算时间间隔(New-TimeSpan)

PowerShell Get-Date 获取年月日时分秒#yyds干货盘点#

PowerShell格式化输出字符串