为什么 PowerShell 将 DateTime 格式字符串中的斜杠视为点?

2024-01-01

PS C:\> (Get-Date).ToString("MM/dd/yyyy")
11.12.2016

PS C:\> [DateTime]::ParseExact('10/14/2016', 'MM/dd/yyyy', $null)
Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime."At line:1 char:1
+ [DateTime]::ParseExact('10/14/2016', 'MM/dd/yyyy', $null)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException


PS C:\> [DateTime]::ParseExact('10.14.2016', 'MM/dd/yyyy', $null)

14 Oct 2016 0:00:00



PS C:\> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      0      10586  117   

它运行在 Windows Server 2008 R2 上。 Windows 10 版本为 5.1.14393.206 并且可以正常工作。

到底是怎么回事?


As 杰罗恩·莫斯特 https://stackoverflow.com/questions/40566528/why-powershell-treats-slash-in-datetime-format-string-as-dot#comment68369975_40566528在您的问题的评论中指出,正斜杠在日期/时间格式字符串中具有特殊含义。

来自文档 https://msdn.microsoft.com/library/8kb3ddd4.aspx#dateSeparator:

“/”自定义格式说明符

“/”自定义格式说明符表示日期分隔符,用于区分年、月、日。从以下位置检索适当的本地化日期分隔符DateTimeFormatInfo.DateSeparator当前或特定文化的属性。

Note
要更改特定日期和时间字符串的日期分隔符,请在文字字符串定界符中指定分隔符。例如,自定义格式字符串mm'/'dd'/'yyyy生成一个结果字符串,其中始终使用“/”作为日期分隔符。要更改区域性所有日期的日期分隔符,请更改DateTimeFormatInfo.DateSeparator当前文化的属性,或实例化DateTimeFormatInfo对象,将字符分配给它DateSeparator属性,并调用格式化方法的重载,其中包括IFormatProvider范围。

要匹配文字正斜杠而不是系统区域设置中定义的日期分隔符,请使用反斜杠对其进行转义 ('MM\/dd\/yyyy').

还有,路过$null对于格式提供者不推荐。要么指定正确的culture https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx对于日期字符串,或使用InvariantCulture https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.invariantculture.aspx如果您希望独立于特定区域性来解析字符串。

[DateTime]::ParseExact('10/14/2016', 'MM\/dd\/yyyy', [Globalization.CultureInfo]::InvariantCulture)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 PowerShell 将 DateTime 格式字符串中的斜杠视为点? 的相关文章

随机推荐