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