以微秒为单位的纪元时间比较

Epoch time comparisons in microseconds

我正在努力思考 PowerShell 中的大纪元时间。基本上,我有一个 CSV,其中有一列以微秒为单位的大纪元时间。我只想获取 "yesterday midnight and today midnight UTC (but not including today midnight UTC") 内的记录。

这样的东西行得通吗?如何将日期时间转换为微秒?我只看过几秒的帖子..

$yesterdayMidnight = (Get-Date -Hour 0 -Minute 0 -Second 0).AddDays(-1)
$todayMidnight = Get-Date -Hour 0 -Minute 0 -Second 0
Import-Csv "Q:\data.csv" | ForEach-Object {
if (($_."Time-UTC-MicroSec" -le $yesterdayMidnight) -and ($_."Time-UTC-MicroSec" -lt $todayMidnight)) {
  # do stuff with records
}

示例文件:

ID1    ID2 ID3 Time-UTC-MicroSec
2080101 26  501032  1483232054547470
2080101 5   501032  1483231158598830
2080101 30  501012  1483230264931800
2080101 28  501032  1483230721849650
2080101 28  501032  1483231194379190

我从 here 得到了转换函数。首先,您只需除以一百万即可将微秒转换回秒。

Function get-epochDate ($epochDate) { [timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($epochDate))}

$yesterdayMidnight = (get-date -Hour 0 -Minute 0 -Second 0).AddDays(-1)
$todayMidnight = get-date -Hour 0 -Minute 0 -Second 0

Import-CSV "Q:\data.csv" | ForEach-Object {
    $dt = get-epochDate ([Double]($_."Time-UTC-MicroSec" / 1000000))
    if(($dt -ge $yesterdayMidnight) -and ($dt -lt $todayMidnight)) {
        #Do Stuff With Records
    }
}

为了获得正确的 csv 文件,我使用以下方法进行了转换:

$FileIn = "Q:\Test17-01\SO_41514002.csv"
(gc $FileIn) -replace " +",","|Set-Content .\Test.csv

我的方法是将日期转换为秒

$FileIn = ".\Test.csv"
$unixEpochStart = new-object DateTime 1970,1,1,0,0,0,([DateTimeKind]::Utc)
$UTCNow = [DateTime]::UtcNow
$TodMid = new-object DateTime $UTCNow.Year,$UTCNow.Month,$UTCNow.Day,0,0,0,([DateTimeKind]::Utc)
$YesMid = $TodMid.AddDays(-1)
$TodMidSec = [int]($TodMid - $unixEpochStart).TotalSeconds
$YesMidSec = [int]($YesMid - $unixEpochStart).TotalSeconds

Import-CSV $FileIN | ForEach-Object {
    $dt = [int]($_."Time-UTC-MicroSec" / 1000000)
    "$YesMidSec $dt $TodMidSec"
    if(($dt -ge $yesMidsec) -and ($dt -lt $todMidsec)) {
    "in range"
    }
}

脚本的输出显示秒数刚好超出范围:

> .\SO_41514002.ps1
1483574400 1483232055 1483660800
1483574400 1483231159 1483660800
1483574400 1483230265 1483660800
1483574400 1483230722 1483660800
1483574400 1483231194 1483660800