為什麼匯入的 GPX 檔案時間顯示不對?
一條記錄得完全正常的軌跡,上傳之後地圖上的位置分毫不差,旁邊顯示的時間卻早了六個小時,或是晚了六個小時,明明是中午走的路,看起來卻成了凌晨。檔案沒有任何問題。GPX 本來就不存時區,交給哪個服務,就得靠那個服務自己去猜一個時區補上。
先講結論
GPX 裡的每一個時間戳都是用 UTC(協調世界時)寫的,完全不帶時區資訊。上傳到某個地方之後,如果一條軌跡看起來是凌晨出發的,那個點本身其實沒有記錯。真正發生的,是 UTC 的數值被當成本地時間直接顯示了,或是接收的服務用了一個跟你實際所在時區不一樣的時區去換算。
這是顯示層面的問題,不是資料層面的問題。經緯度、海拔和點的先後順序都完全沒變,變的只是每個點旁邊印出來的那個時刻。
GPX 為什麼只存 UTC
GPX 檔案裡的每一個時間戳都是同一種寫法——日期、時間,後面接一個表示 UTC 的字母「Z」。格式裡根本沒有留一個欄位給時區偏移或地點,這不是疏漏,是刻意這樣設計的。一份在某個大陸記錄、拿到另一個大陸打開的檔案,指向的必須還是同一個瞬間,跟打開它的地方沒有關係。要保證這一點,唯一的辦法就是把所有時間戳都釘死在一個哪裡都不會變的基準上。UTC 就是這個基準。代價是,把它換算回人能看懂的時間,完全得靠打開檔案的那一方自己來做。
這個偏差到底從哪來
原因不只一個,好幾種情況都會產生同一個症狀:
- 接收服務裡帳號設定的時區。Strava、Garmin Connect 之類的服務,會把 UTC 換算成你帳號設定的那個時區,不是你實際走那條路時所在的時區。手機帳號還設成家鄉時區,在國外記錄的軌跡就會照家鄉時間顯示,不是當地時間。
- 完全沒做時區處理的檢視工具。有些比較簡單的工具直接把 UTC 的數值當成本地時間印出來,這種情況看起來偏差最誇張——差的是好幾個小時,不是幾分鐘。
- 夏令時間切換前後。切換前後幾天記錄的軌跡,換算用的固定時區偏移量可能跟實際記錄那一刻生效的偏移量不一致,看起來就會差一個小時。
- 記錄那一刻手機自己的時鐘。這種情況少見,但如果手機系統時間本身就不對,這個誤差會直接寫進每一個時間戳裡,之後不管時區處理得多準確,都補不回來。
這不代表什麼
這不代表檔案壞了,也不是要重新記錄或重新匯出的理由。距離、累計爬升、配速,還有地圖上軌跡的形狀,都是從座標和時間戳之間的間隔算出來的,顯示的時刻本身對不對,都不會影響這些數字。地圖上的軌跡完美無缺,開始時間卻離譜到不可能——這個組合恰恰就是這種情況最清楚的訊號。
怎麼把顯示的時間改對
去檢查那個顯示錯誤時間的服務裡的時區設定,通常是帳號或個人資料裡的一項設定,跟檔案本身沒關係。這個設定改一次,之後再上傳的每一份檔案都會顯示正確,不只是你現在發現問題的這一份。
直接改檔案裡的原始時間戳,技術上也做得到——它就是純文字,用合適的工具可以給每一個點都加上同一個偏移量。但這幾乎從來都不是該做的事,因為這些時間戳一開始就沒有錯。只有在你確實需要一份印出來的時間已經對齊本地時間的檔案、準備交給別處的特殊情況下,這樣做才有意義。
TrailCam 能做什麼
TrailCam 把軌跡匯出成 GPX 1.1,Strava、Garmin Connect、Komoot 都讀得懂這個規格,它的時間戳也遵循跟所有符合規範的 GPX 檔案一樣的 UTC 慣例。如果匯出之後在別處看到時間不對,該改的是那邊服務的時區設定,不是匯出本身。匯出功能包含在可選的 TrailCam Pro 裡,App 本身免費下載。
常見問題
- 匯入的 GPX 檔案時間不對,是不是代表檔案壞了?
- 不是。座標、海拔和點的順序都不受影響。GPX 的時間戳用 UTC 寫入,不存時區資訊,顯示出來的時間完全取決於打開它的那個 App 怎麼把 UTC 數值換算成本地時間。
- GPX 檔案能不能存一個時區,省得每次都要換算?
- 不能。這個格式只存 UTC 時間,根本沒有留欄位給時區偏移。換算成本地時間的工作,全部得靠打開檔案的軟體自己完成。
- 顯示的時間不對,會影響距離或海拔的數字嗎?
- 不會。那些數字是從座標和時間戳之間的間隔算出來的,不是從螢幕上顯示的那個時刻算出來的。時鐘顯示不對,和軌跡本身準確,兩者並不矛盾。
記錄你自己的軌跡
TrailCam 是一款 iPhone 上的 GPS 軌跡記錄 App,會把沿途拍下的影片、照片與語音釘在你拍它的那個位置,並支援匯出成 GPX 1.1 或 CSV。免費下載。