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格式的字符串