【问题标题】:convert date time to Epoch format in CSV in powershell在PowerShell中将日期时间转换为CSV中的Epoch格式
【发布时间】:2017-08-01 13:05:57
【问题描述】:

我想使用 PowerShell 将日期时间转换为 csv 文件中的 Epoch 格式。在 csv 文件中我只有时间数据,我想使用 csv 中指定的当前日期和时间将其转换为 Epoch 格式。

in.csv

"192.168.1.2","01-any1TEST ","Ping","Down at least 3 min","17:25:14",":Windows 2012 Server"
"192.168.1.2","02-any2TEST  ","Ping","Down at least 4 min","17:25:40",":Unix Server"
"192.168.1.2","03-any3TEST ","Ping","Down at least 3 min","17:26:21",":windows host " 

我的发现

这应该可以使用以下两者的组合来实现。我面临的主要问题是我无法将当前日期与 csv 文件中的时间结合起来。

Import-Csv ".\out.csv" |
ForEach-Object {
    $_.Date = [datetime]::Parse($_.Date).ToString('MM/dd/yyyy HH:mm')
}

Get-Date -Date "12/31/2015 23:59:59" -UFormat %s

【问题讨论】:

  • 你不需要。如果您使用[datetime]::Parse() 解析默认系统语言环境格式的时间戳,它将假定您的日期部分是“今天的日期”。
  • 吹毛求疵:请不要再说“Epoch 格式”。那不是一回事。具体说明你想要什么输出。

标签: powershell csv datetime


【解决方案1】:

使用Get-Date 时,您可以选择手动覆盖值或使用另一个datetime

例如:

Import-Csv ".\out.csv" |
ForEach-Object {
    $tempDate = [datetime]::Parse($_.Date).ToString('MM/dd/yyyy HH:mm')
    Get-Date -Hour $tempDate.Hour -Minute $tempDate.Minute -UFormat %s
}

【讨论】:

    【解决方案2】:

    我会这样做:

    Import-Csv ".\out.csv" |
    ForEach-Object {
        $_.Date = Get-Date -Date $_.Date -UFormat %s
    }
    

    如果您想更明确地了解它在做什么,可以将时间转换为时间跨度,然后将其添加到日期中。然后您可以将其通过管道传递给 Get-Date 以对其进行格式化:

    Import-Csv ".\out.csv" |
    ForEach-Object {
        $_.Date = [DateTime]::Today + [Timespan]::Parse($_.Date) | Get-Date -UFormat %s
    }
    

    [DateTime]::Today 是今天午夜的日期(时间 00:00:00)。


    好的,试试下面的代码。当它发现无法解析的日期时,它将向控制台写入警告消息。它不会解决问题,但它会告诉你问题出在哪里。

    Import-Csv ".\out.csv" |
    ForEach-Object {
        $t = [timespan]::Zero
        if ([Timespan]::TryParse($_.Date,[ref]$t)) {
            $_.Date = [DateTime]::Today + $t | Get-Date -UFormat %s
        }
        else {
            Write-Warning "Unable to parse timespan '$($_.Date)' for record $($_)"
        }
    }
    

    【讨论】:

    • 嗨,“17:25:14”是不是有效的时间跨度?出现以下错误:使用“1”参数调用“Parse”的异常:“字符串未被识别为有效的 TimeSpan。”
    • 应该是,是的。我当然可以在 PowerShell 提示符下运行 [TimeSpan]::Parse("17:25:14")。试试$_.Date.Trim()。您可能需要重写它以使用[timespan]::TryParse(),但该函数很痛苦,因为它使用引用传递。
    • @sachinbhomale 试试我更新的代码。它可能有助于排除故障。
    【解决方案3】:

    这在 2.0 而不是 4.0 版本中非常适合我。如果可能的话,请让我知道为什么在 powershell 4.0 上不起作用。

    $EventTime = $($s.EventTime)
    

    $value = get-date -format d $Imported = Import-Csv 'C:\PathToFIle\out.csv'

    $Output = foreach ($i in $Imported) { foreach ($c in $EventTime) {

        $time=$i.eventtime
    
        $fulltime =$value+' '+$time
    
    
         $i.EventTime = Get-Date -Date $fulltime -UFormat %s
    
    
    }
    $i
    

    }

    $输出 $输出 | Export-Csv 'C:\PathToFIle\TestComputers.csv' -NoTypeInformation

    【讨论】:

      猜你喜欢
      • 2015-08-19
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 2016-07-23
      • 2017-03-23
      • 1970-01-01
      相关资源
      最近更新 更多