本文只是基礎代碼片段,直接先寫 結論: 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時間.
> 之後, 項目開始 跨國家 —— 國外用戶 也能使用.
問:
> 如何才能 對現有改動最小 的前提下 —— 完善項目 對國際時間的支持呢 ?
(本文 不是重量級 技術 —— 底層小細節而已,耽誤大家時間的話,在此表示歉意。)