昨天尝试读取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/

10-11 22:24
查看更多