『片段』C# DateTime 时间相减 和 时区的关系

 本文只是基础代码片段,直接先写 结论: 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时间.
> 之后, 项目开始 跨国家 —— 国外用户 也能使用.
问:
> 如何才能 对现有改动最小 的前提下 —— 完善项目 对国际时间的支持呢 ?

(本文 不是重量级 技术 —— 底层小细节而已,耽误大家时间的话,在此表示歉意。)

原文地址:https://www.cnblogs.com/shuxiaolong/p/20160623_1121.html