昨天尝试读取CSV时,我注意到PowerShell在使用[datetime]"date"
时似乎总是采用美国日期格式。
我的区域设置都是正确的, [DateTime]::Parse("date")
使用英国日期格式(dd / mm / yyyy)。
这是bug,还是故意的决定?如果是故意的决定,此文件是否记录在任何地方?
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
(注意:在美国的机器上,我希望这些对象是相同的,但在英国的机器上却不是这样)。
注意:我不想更改格式(它是来自外部来源的文件),我不想格式化输出中的日期,我知道我可以使用
[DateTime]::Parse()
。问题是以?
结尾的位:-) 最佳答案
这是一个故意的决定。将字符串强制转换为DateTime
时,可以使用Braindead美国格式或 ISO 8601 – [datetime]'2012-10-12'
可以正常工作,并且可读性更好。
之所以受到限制和限制,是因为脚本不应该依赖于当前的文化,至少对于文字和准文字(如强制转换的字符串)而言。在编写强大的批处理文件时,这是一个主要问题,您当然也不想在PowerShell中遇到同样的问题。
Lee Holmes has an explanation,可能是半官方的,因为他现在/曾经在MS的PowerShell团队中工作:
Lee忘记提及的是我之前写的,更明智的ISO 8601格式也可以使用。
遗憾的是,PowerShell文档或语言规范(v2)中都没有此文档。但是,几乎没有证据表明这是一个错误。
关于date - 为什么在转换为DateTime时PowerShell总是使用美国的文化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14359053/