我的机器在PDT上,如果我说DateTime.Now,那么我将获得一个当地时间,相当于2012年9月18日上午6:00:00.我希望得到这个日期时间实例的UTC等价物.UTC时间比PDT提前7小时,比PST提前8小时.我想自动考虑夏令时.
有关如何做到这一点的任何想法?
Eri*_* J. 18
您可以使用
var now = DateTime.UtcNow;
Run Code Online (Sandbox Code Playgroud)
要转换现有DateTime,假设它具有时区信息,您可以使用DateTime.ToUniversalTime().如果你使用例如获得DateTime实例
var localNow = DateTime.Now; // Has timezone info
Run Code Online (Sandbox Code Playgroud)
它将有时区信息.如果您使用刻度计数创建它,除非您明确提供,否则它不会包含时区信息.
var unspecifiedNow = new DateTime(someTickCount); // No timezone info
Run Code Online (Sandbox Code Playgroud)
值得一提的是,.NET中的时区处理并不是最佳的.如果你需要做一些涉及时区的精心设计,你可能希望看看Noda Time(Jon Skeet的一个项目).
使用DateTime.ToUniversalTime方法.
如果要将日期从您的时区转换为UTC,请执行以下操作:
TimeZone.CurrentTimeZone.ToUniversalTime(myLocalDateTime)
Run Code Online (Sandbox Code Playgroud)
如果要将其从UTC转换回:
TimeZone.CurrentTimeZone.ToLocalTime(myUtcDateTime)
Run Code Online (Sandbox Code Playgroud)