关于c#:如何将UTC DateTimeOffset转换为使用系统时区的DateTime

How to convert a UTC DateTimeOffset to a DateTime that uses the systems timezone

quartz.net提供了获取下一次触发事件的方法:http://quartz net.sourceforge.net/apidoc/1.0/html/html/cc03bb79-c0c4-6d84-3d05-a17f59727c98.htm

docs声称这个Trigger.GetNextFireTimeUtc()方法返回一个DateTime?,但实际上它返回一个DateTimeOffset?。我真的不知道DateTimeOffset的用途,也不知道为什么这个函数返回一个而不是一个常规的DateTime。我只想在下次触发器运行时在我的时区内。

我做了这个trigger.GetNextFireTimeUtc().Value.DateTime,但它给了我提前2小时的时间,即UTC时间。我怎样才能根据我的电脑得到正确的时间?


您只需使用DateTimeOffset.LocalDateTime属性:

1
trigger.GetNextFireTimeUtc().Value.LocalDateTime

从文档中:

If necessary, the LocalDateTime property converts the current DateTimeOffset object's date and time to the local system's date and time. The conversion is a two-step operation:

  • The property converts the current DateTimeOffset object's time to Coordinated Universal Time (UTC).
  • The property then converts UTC to local time.

不过,您应该真正了解DateTimeOffset——如果您使用bcl进行日期/时间工作,这是一种重要的类型。


此代码用于将UTC转换为本地

1
var local = utc.ToLocalTime();