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(使用前将#替换为@)