4

一部の文字列の短い時間の値を24時間形式に変換する際に問題が発生しました。

csvスクリプトでは、次のforeachループを使用して、 :からのデータの各行を解析します。

Foreach ($Line in $Data) {
    $command.CommandText=$SQLCommandPre+ `
        "'"+$line."Reference" `
        +"','"+$line."Date" `
        +"','"$line."Business Hour".SubString(0,8) `
        +"','"+"{0:f2}" -f ($line."Total"/2) `
    +"','"+"{0:f0}" -f ($line."Number"/2) `
    +"')"
    [void] $command.ExecuteNonQuery()
}

たとえば、私のソースデータは次のとおりです。

0101,8/19/2012,12:00 AM - 12:59 AM,241.83,21

現在、スクリプトでは午前12時を取得していますが、00:00に変換する必要があります。以下を使用してみましたが、PowerShellが作成するクエリには影響しません。

"{0:HH:mm}" -f ($line."Business Hour".SubString(0,8))

目標を達成するための別の方法のヒットを見つけることができませんでした。

4

2 に答える 2

7

フォーマットを試みる前に、取得した文字列を [DateTime] オブジェクトに変換してください。

C:\PS> "{0:HH:mm}" -f [datetime]'12:00 AM'
00:00
于 2012-08-28T15:40:04.870 に答える
0

これを達成するための複数の方法があります。これが私がおそらくそれをする方法です:

$test = '0101,8/19/2012,12:00 AM - 12:59 AM,241.83,21'
([dateTime]$test.Split(',')[2].Split('-')[0]).ToString('HH:mm')

必要に応じて、部分文字列の取得方法を微調整できます。このような場合、文字列の長さの変更に対する耐性が高くなるため、.SubString()よりも分割することをお勧めします。

于 2012-08-28T15:41:47.360 に答える