将48小时添加到CSV文件中的时间戳

时间:2013-03-14 04:22:14

标签: powershell csv timestamp

我有一个CSV文件,其时间戳为DD.MM.YYYY HH:MM 24小时格式,我需要在48小时内添加并以Powershell中的月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一直告诉我 - “你不能在空值表达式上调用方法。”

3 个答案:

答案 0 :(得分:1)

要解析您的日期,您可以使用:

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

所以以下工作:

$b = $a.AddHours(48)

您可以使用以下方式对其进行格式化:

$b.ToString("MMMM dd, yyyy HH:MM:ss")

答案 1 :(得分: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") 

答案 2 :(得分: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
}