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,它可以正常工作。
发生了什么事?
答案 0 :(得分:1)
正如Jeroen Mostert在您的问题的评论中指出的那样,正斜杠在日期/时间格式字符串中具有特殊含义。
" /"自定义格式说明符
" /"自定义格式说明符表示日期分隔符,用于区分年,月和日。从当前或指定文化的
DateTimeFormatInfo.DateSeparator
属性中检索适当的本地化日期分隔符。注意强>
要更改特定日期和时间字符串的日期分隔符,请在文字字符串分隔符中指定分隔符。例如,自定义格式字符串mm'/'dd'/'yyyy
生成一个结果字符串,其中" /"始终用作日期分隔符。要更改区域性的所有日期的日期分隔符,请更改当前区域性的DateTimeFormatInfo.DateSeparator
属性的值,或实例化DateTimeFormatInfo
对象,将字符分配给其DateSeparator
属性,并调用包含IFormatProvider
参数的格式化方法的重载。
要匹配文字正斜杠而不是系统区域设置中定义的日期分隔符,请使用反斜杠('MM\/dd\/yyyy'
)对其进行转义。
此外,不建议为格式提供程序传递$null
。为日期字符串指定正确的culture,或者如果您希望解析的字符串独立于特定的文化,请使用InvariantCulture
。
[DateTime]::ParseExact('10/14/2016', 'MM\/dd\/yyyy', [Globalization.CultureInfo]::InvariantCulture)
答案 1 :(得分:1)
如果您要处理非本地化值,请使用InvariantCulture
。
PS C:\> ([Globalization.CultureInfo]::InvariantCulture).DateTimeFormat.DateSeparator
/
在我的系统上,我有为ISO-8601设置的日期格式。这会导致我的分隔符为连字符-
。
PS C:\> (Get-Culture).DateTimeFormat.DateSeparator
-
有趣的转换。
PS C:\> (Get-Date).ToString("MM/dd/yyyy")
11-12-2016
答案 2 :(得分:0)
你可以用这个:
get-date -format "yyyy/MM/dd"
答案 3 :(得分:0)
长格式:
Get-Date -Format "yyyy\/MM\/dd"
速记:
date -f "yyyy\/MM\/dd"
请注意,是的,在这种情况下,您将反斜杠用作转义字符,而不是波浪号。