以微秒为单位的纪元时间比较
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
我正在努力思考 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