我的机器在 PDT 上,如果我说 DateTime.Now,那么我会得到一个本地时间,相当于 2012 年 9 月 18 日上午 6:00:00。我想获得此日期时间实例的 UTC 等效值。UTC 时间将比 PDT 早 7 小时,比 PST 早 8 小时。我想自动考虑夏令时。
关于我如何做到这一点的任何想法?
您可以使用
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的一个项目)。
使用日期时间。ToUniversalTime方法。
如果要将任何日期从您的时区转换为 UTC,请执行以下操作:
TimeZone.CurrentTimeZone.ToUniversalTime(myLocalDateTime)
如果要将其从 UTC 转换回来:
TimeZone.CurrentTimeZone.ToLocalTime(myUtcDateTime)