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