Dan*_*eny 15 powershell localization date date-format powershell-3.0
昨天尝试读取CSV时,我注意到PowerShell在使用时似乎总是采用美国日期格式[datetime]"date".
我的区域设置都是正确的,并[DateTime]::Parse("date")使用英国日期格式(年/月/ 日).
这是一个错误,还是一个刻意的决定?如果是故意的决定,是否记录在任何地方?
PS D:\> [DateTime]"12/10/2012"
10 December 2012 00:00:00
PS D:\> [DateTime]::Parse("12/10/2012")
12 October 2012 00:00:00
Run Code Online (Sandbox Code Playgroud)
(注意:在美国的机器上,我希望这些物体是相同的,但在英国的机器上却不是这样).
注意:我不想更改格式(它是来自外部源的文件),我不想在输出中格式化日期,我知道我可以使用[DateTime]::Parse().问题是结尾的一点?:-)
Joe*_*oey 16
这是一个深思熟虑的决定.将字符串转换为a时,DateTime您可以使用braindead US格式或 ISO 8601 - [datetime]'2012-10-12'工作得很好并且阅读起来更好.
限制和限制的原因是脚本不应该依赖于当前的文化,至少对于文字和准文字(如类似的字符串).这是编写健壮的批处理文件的主要问题,您当然不希望在PowerShell中出现相同的问题.
Lee Holmes有一个解释,可以被认为是半官方的,因为他/他在MS的PowerShell团队中:
为了防止微妙的国际化问题弹出到您的脚本中,PowerShell将
[DateTime] '11/26/2007'(日期常量)视为语言功能 - 就像它一样[Double] 10.5(数字常量).并非所有文化都使用小数点作为分数分隔符,但编程语言标准化它.并非所有文化都使用en-USDateTime格式,当人们不考虑在这些文化中运行软件的影响时,会导致数百万的国际化错误.
李忘记提到的是我之前写过的,更合理的ISO 8601格式也适用.
遗憾的是,PowerShell文档或语言规范(v2)中都没有这方面的文档.但是,很少有证据表明这是一个错误.
| 归档时间: |
|
| 查看次数: |
5258 次 |
| 最近记录: |