在 Go 中轉換 Chrome 時間戳
我正在嘗試使用 Go 將時間戳從本地 Chrome sqlite 資料庫轉換為本地時間。我知道這些時間戳記是從 1601/01/01 開始的微秒。
檢查我在此 Chrome 時間戳轉換網站上的以下程式中獲取的 lastVisitTime
的值,我似乎正在從資料庫中正確檢索它們。
<code>package main import ( "database/sql" "fmt" "time" _ "github.com/mattn/go-sqlite3" "github.com/local_library/comp" ) var ( dbPath = comp.Expanduser("~/Library/Application Support/Google/Chrome/Default/History") chromeEpochStart = time.Date(1601, 1, 1, 0, 0, 0, 0, time.UTC) ) const ( driverName = "sqlite3" tmpPath = "/tmp/History" query = ` SELECT last_visit_time FROM urls ORDER BY last_visit_time DESC LIMIT 5 ` ) func main() { // Copy to tmp to unlock err := comp.Copy(dbPath, tmpPath) comp.MustBeNil(err) db, err := sql.Open(driverName, tmpPath) comp.MustBeNil(err) rows, err := db.Query(query) comp.MustBeNil(err) for rows.Next() { var lastVisitTime int64 rows.Scan(&lastVisitTime) d := time.Duration(time.Microsecond * time.Duration(lastVisitTime)) t := chromeEpochStart.Add(d) fmt.Println(t, lastVisitTime) } err = rows.Close() comp.MustBeNil(err) err = rows.Err() comp.MustBeNil(err) } </code>
但由於某種原因,我的 .Add(d)
將時間設為 1601 之前,這是我以前從未見過的。
1439-07-05 20:00:21.462742384 +0000 UTC 13350512095172294 1439-07-05 19:58:20.377916384 +0000 UTC 13350511974087468 1439-07-05 19:57:58.539932384 +0000 UTC 13350511952249484 1439-07-05 19:57:48.539540384 +0000 UTC 13350511942249092 1439-07-05 19:52:09.587445384 +0000 UTC 13350511603296997
這裡發生了什麼,更重要的是,我該如何正確執行此操作?
正確答案
感謝 Peter 的評論指出了我原始程式碼中的溢出,我找到了不同的方法。
如果將 Chrome 開始日期轉換為 UnixMicro()
,則會得到與常規紀元時間的負偏移量:
<code>chromeMicroOffset := time.Date(1601, 1, 1, 0, 0, 0, 0, time.UTC).UnixMicro() fmt.Println(chromeMicroOffset) </code>
-11644473600000000
將這些加入資料庫值中,並在 time.Unix()
中將它們轉換為奈秒,即可獲得正確的 UTC 時間:
<code>microFromEpoch := chromeMicroOffset + lastVisitTime t := time.Unix(0, microFromEpoch*1000) </code>
轉換為太平洋時間的完整範例:
<code>package main import ( "fmt" "time" ) var ( chromeMicroOffset = time.Date(1601, 1, 1, 0, 0, 0, 0, time.UTC).UnixMicro() ) func main() { chromeTimestamp := int64(13350516239099543) microFromEpoch := chromeMicroOffset + chromeTimestamp t := time.Unix(0, microFromEpoch*1000) loc, err := time.LoadLocation("America/Los_Angeles") if err != nil { panic(err) } fmt.Println(t.In(loc)) } </code>
2024-01-23 12:43:59.099543 -0800 PST
以上是在 Go 中轉換 Chrome 時間戳的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

是的,H5頁面製作是前端開發的重要實現方式,涉及HTML、CSS和JavaScript等核心技術。開發者通過巧妙結合這些技術,例如使用<canvas>標籤繪製圖形或使用JavaScript控制交互行為,構建出動態且功能強大的H5頁面。

如何使用JavaScript或CSS控制瀏覽器打印設置中的頁首和頁尾在瀏覽器的打印設置中,有一個選項可以控制是否顯�...

關於inline-block元素錯位顯示的原因及解決方案在編寫網頁佈局時,我們常常會遇到一些看似奇怪的顯示問題。比...

如何實現分段器的45度曲線效果?在實現分段器的過程中,如何讓點擊左側按鈕時右側邊框變成45度曲線,而點�...

CSS自定義resize符號的方法與背景色統一在日常開發中,我們經常會遇到需要自定義用戶界面細節的情況,比如調...

實時比特幣美元價格 影響比特幣價格的因素 預測比特幣未來價格的指標 以下是 2018-2024 年比特幣價格的一些關鍵信息:
