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

Ami*_*mit 10 c# datetime

我的机器在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的一个项目).


Dea*_*uga 8

使用DateTime.ToUniversalTime方法.

  • 对于现在的特殊情况,这不是因为在引擎盖下 .net 会将 `DateTime.UtcNow` 转换为本地时间,因此执行 `ToUniversalTime` 将进行 2 次转换而不是 0 次。 (2认同)

Mig*_*elo 5

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

TimeZone.CurrentTimeZone.ToUniversalTime(myLocalDateTime)
Run Code Online (Sandbox Code Playgroud)

如果要将其从UTC转换回:

TimeZone.CurrentTimeZone.ToLocalTime(myUtcDateTime)
Run Code Online (Sandbox Code Playgroud)