Powershell Get-Date没有正确格式化

时间:2018-04-10 22:24:54

标签: powershell datetime culture

我有一个约会,我正在从某处读取所以我正在检索字符串值。我的文化是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就好了,但我怎么能在这里得到它?

3 个答案:

答案 0 :(得分: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中了解有关日期格式的更多信息。

答案 1 :(得分:0)

查看此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的各种属性。

答案 2 :(得分:0)

$ 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"