[英]Calculating PowerShell ticks in Bash
我正在 Bash 中翻譯 PowerShell 腳本。
這是在 PowerShell 中獲取當前日期時間刻度的方式:
[System.DateTime]::Now.Ticks;
按照Ticks的定義,這就是我嘗試使用 bash 中的date
命令近似相同計算的方式:
echo $(($(($(date -u '+%s') - $(date -d "0001-01-01T00:00:00.0000000 UTC" '+%s'))) * 10000000 ))
這是我最后一次嘗試得到的結果:
$ echo $(($(($(date -u '+%s') - $(date -d "0001-01-01T00:00:00.0000000 UTC" '+%s'))) * 10000000 )) ; pwsh -c "[System.DateTime]::Now.Ticks;"
637707117310000000
637707189324310740
特別是,前 7 位數字是相同的,但是這兩個值之間第 8 位和第 9 位的數字仍然相差太大。
我計算出這意味着兩個值之間只有 2 小時的差異。 但為什么? 它不能是時區,因為我在兩個date
命令中都指定了 UTC 時區,對嗎? 你怎么認為?
注意:我對時區的懷疑正在增加,因為我目前基於 UTC+2(因此與 UTC 相差 2 小時),但是這怎么可能,因為我在date
命令中明確指定了 UTC 作為時區?
解決了! 問題不在於date
命令,而在於使用 +2 時區(CEST 時間)的 PowerShell 命令。 為了解決這個問題,我現在使用UtcNow
而不是Now
。
這就是我現在得到的:
$ echo $(($(($(date -u '+%s') - $(date -d "0001-01-01T00:00:00.0000000 UTC" '+%s'))) * 10000000 )) ; pwsh -c "[System.DateTime]::UtcNow.Ticks;"
637707132410000000
637707132415874110
如您所見,現在所有數字都相同,除了最后的第 7 位數字,因為我故意添加了零以將秒轉換為刻度,因為我對幾分之一秒(目前)不感興趣,我認為它們可以忽略不計.
替代方式
使這兩個值相同(仍不包括秒的小數部分)的另一種方法是刪除第一個date
命令中的-u
選項以使用當前時區,並在第二個date
命令+0200
UTC
替換為+0200
。 如果我這樣做,我可以將Now
留在 PowerShell 命令上(而不是用UtcNow
替換它)。
通過這樣做,我得到:
$ echo $(($(($(date '+%s') - $(date -d "0001-01-01T00:00:00.0000000 +0200" '+%s'))) * 10000000)) ; pwsh -c "[System.DateTime]::Now.Ticks;"
637707218060000000
637707218067248090
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.