2017-05-23 11 views
1

私は困惑しています。 :)PowerShellの日付形式が正しく動作しない

私のコンピュータにはPowerShell 5.1がインストールされています。別のコンピュータ(同じ言語)5.0では期待通りに動作します。 (ゲット・文化を使用して確認してください。私のロケールは、NB-NO(ノルウェー)である)

はこの考えてみましょう:

Get-Date 

戻り

tirsdag 23. mai 2017 13.13.18 

だから私はこの

Get-Date -Format "H-m-s" 

を行います期待通りの返信

13-13-18 

しかし、その後、私はこの

Get-Date -Format "H:m:s" 

を行うあなたはそれが

13:13:18 

右を返すと思いますか? (それはPS5.0上で!)いいえ!私はこれを取得:

13.13.18 

だけ私はこれを行う場合、私が欲しいもの出力されます。これはなぜ

Get-Date -Format "H\:m\:s" 
13:13:18 

は、誰かが説明していただけますか? SQL Serverで使用するためにdatetime互換の文字列をフォーマットしたかったときに、「偶然に」見つけました。

+1

私は単に ' – LotPings

+0

申し訳ありませんが、それは何も解決しない、それはまだとして返す「T」-format'は、Get-日付を使用したいです13.13.18私のために。 – tplive

+0

誰もが時間の区切り記号を頭から出ないので、上のコマンドの前に@Mathias tip [CultureInfo] :: CurrentCulture.DateTimeFormat.TimeSeparator = ":" ' – LotPings

答えて

1

DateTimeのフォーマット機能は、:と表示され、culture-dependent "time separator"として扱われるからです。

ノルウェー語(no-NO)では、デフォルトの時間区切り記号は.です。あなたは(no-NOが現在の文化であると仮定)でこれを検査することができます

PS C:\> [CultureInfo]::CurrentCulture.DateTimeFormat.TimeSeparator 
. 

すでに見つけた、またはすることができますようにあなたはまた、エスケープシーケンス\:で、リテラル:を挿入することにより、いずれか、これをオーバーライドすることができます(現在のプロセス/のAppDomainの存続期間)グローバルに上書き:

PS C:\> [CultureInfo]::CurrentCulture.DateTimeFormat.TimeSeparator = ":" 
PS C:\> Get-Date -Format "H:m:s" 
13:13:18 
+0

を付けてください!リテラル ":"は私のためにそれをしませんが、エスケープシーケンスを使用します。また、PS 5.0以降に変更されたのはなぜですか? – tplive

+2

申し訳ありませんが、結果の文字列にリテラル ':'が必要な場合は、エスケープシーケンスを使用する必要があります。 AFAIK、それはPowerShellの変更のためではありませんが、.NET 3.5(CLR 2.0)と.NET 4.5(CLR 4.0)の異なるDateTimeフォーマットの実装のため、なぜ –

関連する問題