我有一个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一直告诉我 - “你不能在空值表达式上调用方法。”
答案 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
}