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时间。如何根据我的电脑获得正确的时间?
答案 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
答案 2 :(得分:-1)
此代码用于将utc转换为本地
var local = utc.ToLocalTime();