15

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

关于我如何做到这一点的任何想法?

4

3 回答 3

27

您可以使用

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的一个项目)。

于 2012-09-18T18:46:40.637 回答
9

使用日期时间。ToUniversalTime方法。

于 2012-09-18T18:48:48.203 回答
7

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

TimeZone.CurrentTimeZone.ToUniversalTime(myLocalDateTime)

如果要将其从 UTC 转换回来:

TimeZone.CurrentTimeZone.ToLocalTime(myUtcDateTime)
于 2012-09-18T18:49:13.290 回答