1

我有一个 CSV 文件,它的时间戳采用 DD.MM.YYYY HH:MM 24 小时格式,我需要在 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 一直告诉我—— “你不能在空值表达式上调用方法。”

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因为消息建议它为空。

如果值可能不包含日期,则可以使用 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 回答