本文只是基礎代碼片段,直接先寫 結論: C# DateTime 時間相減 —— 和 時區無關,只和時間值有關。 運行結果: 測試代碼: 於是 就有了 這樣的問題 (如下問題 僅作思考): > 最開始, 項目是 國內項目 —— 從不考慮時區, 統一用的 +8時間, 存入資料庫的 也是 +8時間. > ...
本文只是基礎代碼片段,直接先寫 結論: C# DateTime 時間相減 —— 和 時區無關,只和時間值有關。
運行結果:
測試代碼:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Temp_20160623_時間時區 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 DateTime timeNow = DateTime.Now; //當前本地時間 (北京時間+8) 13 DateTime timeUtcNow = DateTime.UtcNow; //世界協調時間 (格林威治+0) 14 DateTime timeUtcNow2 = new DateTime( 15 timeUtcNow.Year, timeUtcNow.Month, timeUtcNow.Day, 16 timeUtcNow.Hour, timeUtcNow.Minute, timeUtcNow.Second, timeUtcNow.Millisecond, 17 DateTimeKind.Local); //世界協調時間 (北京時間+0) —— 和 UTC時間 值一樣 的 北京時間 18 19 20 Console.WriteLine("北京時間+8 :" + timeNow); 21 Console.WriteLine("格林威治+0 :" + timeUtcNow); 22 Console.WriteLine("北京時間+8 :" + timeUtcNow2); 23 24 25 26 //timeNow 和 timeUtcNow 相差 8個時區 27 //問: 這兩個時間相減 等於多少? 28 29 30 TimeSpan timeSpan = timeNow - timeUtcNow; 31 Console.WriteLine("({0} +8) - ({1} +0) = {2}", timeNow, timeUtcNow, timeSpan.TotalHours.ToString("F6")); 32 33 TimeSpan timeSpan2 = timeNow - timeUtcNow2; 34 Console.WriteLine("({0} +8) - ({1} +8) = {2}", timeNow, timeUtcNow2, timeSpan2.TotalHours.ToString("F6")); 35 36 37 } 38 } 39 }
於是 就有了 這樣的問題 (如下問題 僅作思考):
> 最開始, 項目是 國內項目 —— 從不考慮時區, 統一用的 +8時間, 存入資料庫的 也是 +8時間.
> 之後, 項目開始 跨國家 —— 國外用戶 也能使用.
問:
> 如何才能 對現有改動最小 的前提下 —— 完善項目 對國際時間的支持呢 ?
(本文 不是重量級 技術 —— 底層小細節而已,耽誤大家時間的話,在此表示歉意。)