获取日期 formatting/culture

Get-Date formatting/culture

如何指定输入字符串的哪一部分是日期和月份?

如果输入是 01/10/2017,则可以读作 2017 年 10 月 1 日2017 年 1 月 10 日。两者都正确。

我想明确指出 01 是日期,10 是月份,这样无论语言环境和时间格式如何,我都能得到一致的结果。

示例代码:

get-date  -Date '01/10/2017'

输出为:

Tuesday, January 10, 2017 12:00:00 AM

期望的输出是:

Sunday, October 01, 2017 12:00:00 AM

我有一个解决方案给你。它要求文化作为论据之一。

([datetime]::ParseExact($date,"dd/MM/yyyy",[Globalization.CultureInfo]::CreateSpecificCulture('en-GB')))

不必指定文化。但是,它的参数确实如此,否则你会得到一个错误:

Cannot find an overload for "ParseExact" and the argument count: "2".

[cultureinfo]::InvariantCulture$null 可以用作第三个参数:

$date = "01/10/2017"
[datetime]::ParseExact($date, "dd/MM/yyyy", [cultureinfo]::InvariantCulture)
[datetime]::ParseExact($date, "dd/MM/yyyy", $null)

三种情况下的输出

01 October 2017 00:00:00

试试这个:

Get-Date(Get-Date -Date $date -Format 'dd/MM/yyyy')

您可以为单个命令(或命令块)强制执行文化。这应该有助于避免日期混乱。

PS C:\> [System.Threading.Thread]::CurrentThread.CurrentUICulture = "en-US" ; [System.Threading.Thread]::CurrentThread.CurrentCulture = "en-US"; get-date -Date '01/10/2017'
Tuesday, January 10, 2017 12:00:00 AM

PS C:\> [System.Threading.Thread]::CurrentThread.CurrentUICulture = "en-GB" ; [System.Threading.Thread]::CurrentThread.CurrentCulture = "en-GB"; get-date -Date '01/10/2017'
01 October 2017 00:00:00