Date 为什么Powershell写入输出日期格式不是系统设置?
我们有一个Windows服务器,短日期的区域设置设置为Date 为什么Powershell写入输出日期格式不是系统设置?,date,powershell,Date,Powershell,我们有一个Windows服务器,短日期的区域设置设置为dd.MM.yyyy。但是,powershell将日期输出为MM/dd/yyyy: $d = (Get-Item .\somefile.txt).CreationTime Write-Output "$d" # => 09/26/2016 15:35:35 此外,toString()函数返回不同的(正确的)格式 问题: powershell为什么使用MM/dd/yyyy 为什么上面的两种格式不同 我知道我们可以在powershell配
dd.MM.yyyy
。但是,powershell将日期输出为MM/dd/yyyy
:
$d = (Get-Item .\somefile.txt).CreationTime
Write-Output "$d" # => 09/26/2016 15:35:35
此外,toString()函数返回不同的(正确的)格式
问题:
脚本通常用于自动化,很少用于与用户交互或创建UI。当您将变量放入字符串中(例如,
“$d”
)时,自动转换为字符串将始终使用不变的区域性,而不会使用用户的首选项。例如,数字也是如此。这正是为了避免出现以下问题:对于不同的用户或在不同的机器上,字符串将包含不同的格式
如果需要控制格式,请显式转换为字符串,而不是隐式转换
顺便说一句,解析也是如此。您可以将字符串强制转换为日期时间或数字,但这需要特定的格式。如果要使用用户的首选项,请使用
[DateTime]::Parse
。事实上,更多的是其他系统了解数据,而不是用户。我想这是一件以美国为中心的事情,因为MM/dd/yyyy
并不是真正独立于文化的。大多数系统(尤其是数据库)都能很好地处理明确的yyyy-MM-dd
,而MM/dd/yyyy
则是不明确的。@Marc:I(作为德国人)也不同意选择固定日期格式。然而,好的一面是,在将字符串转换为DateTime
时,可以很好地使用ISO-8601。此外,如果使用格式字符串或显式的ToString()
调用,而不是字符串插值或强制转换,则会得到用户首选的格式。
Write-Output "$($d.toString())" # => 26.09.2016 15:35:35