Date 为什么Powershell写入输出日期格式不是系统设置?

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配

我们有一个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配置文件中设置格式,但是否没有确定格式的“系统”设置

  • 脚本通常用于自动化,很少用于与用户交互或创建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