用PowerShell进行Unix时间转换

时间:2012-07-26 10:49:53

标签: powershell unix-timestamp

Import-Module SQLite
mount-sqlite -name places -data (resolve-path C:\Users\malware_win7x86\Desktop\places.sqlite)
$places = Get-ChildItem places:\moz_places

foreach ($entry in $places)
{
    [datetime]$origin = '1970-01-01 00:00:00'
    $visited = $entry.last_visit_date

    if ($visited) {
        $vtime = $origin.AddSeconds($visited)
    } else {
        $vtime = 'testing'
    }

    write-host ""
    $entry.url,
    $entry.visit_count,
    $vtime
}

参考:Convert Unix time with PowerShell

我很好奇如何处理没有数据的条目。

例如,以下是该脚本的一些输出:

http://sysforensics.org/
1
Exception calling "AddSeconds" with "1" argument(s): "Value to add was out of range.
Parameter name: value"
At line:7 char:28
+ $vtime = $origin.AddSeconds <<<< ($visited)
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

有关于此的任何想法吗?

由于

2 个答案:

答案 0 :(得分:1)

该错误看起来像是给AddSeconds一个太大或太小的参数,而不是丢失数据。使用AddSeconds$null致电0将返回原始日期不变。

话虽如此 - 我无法确定,因为你没有提供你想要转换的实际整数 - 我遇到了同样的问题,直到我意识到我收到的数据是在毫秒秒,而不是秒。您可以使用AddMilliseconds代替,或者在使用AddSeconds之前将数字除以1000,如果您不关心精度的损失。

感谢this answer指出我正确的方向。

答案 1 :(得分:0)

在这种情况下,您只需跳过方法调用并替换默认值,例如:

if ($visited) { # or maybe $ivisited -is [int] or whatever your criterion is
  $vtime = $origin.AddSeconds($visited)
} else {
  $vtime = $null
}