C# DateTime的时区

C#中可以通过DateTime的Kind属性指定DateTime的时区

DateTimeKind有3个枚举值:

  Unspecified:未指定为UTC时间或本地时间

  Utc: UTC时间

  Local: 本地时间

var date1 = new DateTime(2018, 1, 2, 3, 4, 5);
Console.WriteLine("{0}\t{1:o}\t{2:o}", date1.Kind, date1, date1.ToUniversalTime());
var date2 = new DateTime(2018, 1, 2, 3, 4, 5, DateTimeKind.Local);
Console.WriteLine("{0}\t{1:o}\t{2:o}", date2.Kind, date2, date2.ToUniversalTime());
var date3 = new DateTime(2018, 1, 2, 3, 4, 5, DateTimeKind.Utc);
Console.WriteLine("{0}\t{1:o}\t{2:o}", date3.Kind, date3, date3.ToUniversalTime());

结果如图:

当Kind为Unspecified时,服务器按照当地时区进行解析,传递个给其他服务器时,其他服务器按各自所在的时区进行解析。所以,DateTime在多个服务器之前传递时,应指定为Local或Utc

下面是东八区的服务器解析东六区时间,解析正常

var date4 = DateTime.Parse("2018-01-02T03:04:05+06:00");
Console.WriteLine("{0}\t{1:o}\t{2:o}", date4.Kind, date4, date4.ToUniversalTime());

 

Javascript中,new Date(dateString)中的dateString参数支持ISO 8601格式的字符串,如图

*2018-01-02T03:04:05将被解析为客户端所在时区,所以服务端返回给客户端的时间应指定时区,以便客户端将时间转为正确的当地时间

客户端向服务端传递时间时,可通过Date.toISOString()转为ISO格式的字符串

 

posted @ 2018-04-11 14:33  绿皮儿橘子  阅读(5280)  评论(0编辑  收藏  举报