1

DD.MM.YYYY HH:MM 24 時間形式のタイムスタンプを持つ CSV ファイルがあり、Powershell で 48 時間を追加して月 DD、YYYY HH:MM 形式で返す必要があります。

したがって、13.03.2013 23:12 は 2013 年 3 月 15 日 23:12 として返され、14.03.2013 10:00 は 2013 年 3 月 16 日 10:00 として返されます。

使ってみました

$newDate = [DateTime]::$_.Timestamp.AddHours(48)

しかし、Powershell は、「null 値の式でメソッドを呼び出すことはできません」と言い続けています。

4

3 に答える 3

1

日付を解析するには、次を使用できます。

$a = [datetime]::parse("13.03.2013 23:12")

したがって、次のように機能します。

$b = $a.AddHours(48)

次を使用してフォーマットできます:

$b.ToString("MMMM dd, yyyy HH:MM:ss")
于 2013-03-14T05:11:26.393 に答える
1

日付形式がカルチャ設定と一致する場合は、Get-Date を使用して日付文字列を解析できるはずです。

$date = Get-Date '13.03.2013 23:12'

そうでない場合は、ParseExact メソッドを使用する必要があります。

$date = [DateTime]::ParseExact('13.03.2013 23:12','dd.MM.yyyy HH:mm',$null)

これで、48 時間を追加して、必要に応じてフォーマットできます。

$date.AddHours(48).ToString('dd, yyyy HH:mm')  

@gjettison コメントから更新

タイムスタンプは米国の形式ではありませんでした。文化を少しいじる必要がありました。以下は、探していたものを実現します

$stampCulture = [Globalization.cultureinfo]::GetCultureInfo("en-GB")   
$timeStamp = [datetime]::Parse($_.Timestamp, $stampCulture)   
$expire = $timeStamp.AddHours(48).ToString("MMMM dd, yyyy HH:MM") 
于 2013-03-14T07:04:56.130 に答える
0

$_.Timestampメッセージが null を示唆しているため、時間を追加する前にの値を確認してください。

値に日付が含まれていない可能性がある場合は、TryParse を使用できます。

[string]$originalString = "25.12.2013 18:00"
[DateTime]$originalDate = Get-Date

if ([DateTime]::TryParse($originalString,  [ref]$originalDate))
{

    Write-Host "got date: $originalDate" -ForegroundColor Green
    Write-Host "plus 48 hours:" $originalDate.AddHours(48) -ForegroundColor Green
}
else
{
    Write-Host "error" -ForegroundColor Red
}
于 2013-03-14T05:17:59.263 に答える