如何将UTC DateTimeOffset转换为使用系统时区的DateTime

时间:2014-10-10 09:37:59

标签: c# datetime timezone quartz.net datetimeoffset

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

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

我这样做了trigger.GetNextFireTimeUtc().Value.DateTime但它给了我2小时的时间,即UTC时间。如何根据我的电脑获得正确的时间?

3 个答案:

答案 0 :(得分:39)

您可以使用DateTimeOffset.LocalDateTime属性:

trigger.GetNextFireTimeUtc().Value.LocalDateTime

来自文档:

  

如有必要,LocalDateTime属性会将当前DateTimeOffset对象的日期和时间转换为本地系统的日期和时间。转换是两步操作:

     
      
  • 该属性将当前DateTimeOffset对象的时间转换为协调世界时(UTC)。
  •   
  • 该属性然后将UTC转换为当地时间。
  •   

你应该真正研究DateTimeOffset - 如果你正在使用BCL进行日期/时间工作,这是一个重要的类型。

答案 1 :(得分:0)

我遇到了这个问题,但这些都不是真正的答案(通过这个问题标题)。问题标题的解决方案示例:

var myDateTimeOffset = (DateTimeOffset)DateTime.UtcNow;
var ans1 = myDateTimeOffset.DateTime.ToLocalTime();
var ans2 = myDateTimeOffset.DateTime.ToLocalTime().ToLocalTime(); // ans1==ans2

.NET5 C# 9.0

enter image description here

答案 2 :(得分:-1)

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

var local = utc.ToLocalTime();