如何在C#中获取当地时间的UTC等效值

时间:2012-09-18 18:45:32

标签: c# datetime

我的机器在PDT上,如果我说DateTime.Now,那么我将获得一个当地时间,相当于2012年9月18日上午6:00:00。我希望得到这个日期时间实例的UTC等价物。 UTC时间比PDT提前7小时,比PST提前8小时。我想自动考虑夏令时。

我对如何做到这一点有任何想法?

3 个答案:

答案 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 TimeJon Skeet项目)。

答案 1 :(得分:8)

使用DateTime。ToUniversalTime方法。

答案 2 :(得分:4)

如果您想将任何日期从您的时区转换为UTC,请执行以下操作:

TimeZone.CurrentTimeZone.ToUniversalTime(myLocalDateTime)

如果您想将其从UTC转换回来:

TimeZone.CurrentTimeZone.ToLocalTime(myUtcDateTime)