簡體   English   中英

在 Bash 中計算 PowerShell 滴答

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM