2016-10-20 22 views
1

地域サーバーの設定が短く、dd.MM.yyyyに設定されています。しかし、PowerShellはMM/dd/yyyyとして日付を出力:Powershell Write-Outputの日付形式がシステム設定ではないのはなぜですか?

$d = (Get-Item .\somefile.txt).CreationTime 
Write-Output "$d" # => 09/26/2016 15:35:35 

また、のtoString()関数は、異なる(正しい)フォーマット

Write-Output "$($d.toString())" # => 26.09.2016 15:35:35 

質問返し:

  1. なぜPowerShellは/ MMを使用しませんのdd/yyyy?
  2. 上記の2つのフォーマットが異なるのはなぜですか?
  3. 私はpowershellプロファイルでフォーマットを設定できますが、それを決定する "システム"設定はありません。

答えて

1

スクリプトは、多くの場合、ユーザーとのやりとりやUIの作成のために、自動化に使用されます。変数を文字列の中に入れたときに起こる文字列への自動変換。 "$d"は常に不変の文化を使用し、決してユーザーの好みを使用しません。例えば、数字にも同じです。これは、文字列が異なるユーザーや異なるマシンに異なる形式を含む場合に発生する問題を避けるためです。

フォーマットを制御する必要がある場合は、暗黙的に明示的に文字列に変換します。

これは、偶然にも解析にも当てはまります。文字列を日時または数値にキャストできますが、これには特定の形式が必要です。ユーザーの設定を使用する場合は、代わりに[DateTime]::Parseを使用してください。

+0

実際、それはユーザーではなく、データを理解している他のシステムです。私はそれが 'MM/dd/yyyy'は文化に依存しないものであるため、アメリカ中心のものだと思います。ほとんどのシステム(特にデータベース)は、あいまいな 'MM/dd/yyyy'とは対照的に、明白な' yyyy-MM-dd'にうまく対処します。 – Marc

+0

@Marc:私は(ドイツ語として)不変の日付形式の選択にも同意しません。しかし、良いことは、文字列を 'DateTime'にキャストするときにISO-8601をうまく使うことができることです。また、文字列補間やキャスティングの代わりに、フォーマット文字列や明示的な 'ToString()'呼び出しを使用すると、ユーザの好みのフォーマットが得られます。 – Joey

関連する問題