有人知道解释是什么吗?
阐述这个问题就是从这条线上说出来的.
now.Date.AddDays(now.Hour < hourOfDay ? 0 : 1).AddHours(hourOfDay);
这是一个DateTime
对象,您并不知道,您实际上是在隐式转换到DateTimeOffset
对象nextTime
.
创建的这nextTime
个对象将具有自"our servers(+1GMT)"以来的1小时的Offset
.
因此,基本上,接近凌晨5点(1小时或更短)的时间将生成当天的DateTimeOffset
对象,Offset
为1小时,与now
(当天的DateTimeOffset
对象,Offset
为0小时)进行比较.
Alternative solution:个
就是把它转换回DateTimeOffset
加上零Offset
int hourOfDay = 15;
DateTimeOffset now = DateTimeOffset.UtcNow;
DateTimeOffset nextTime = new DateTimeOffset(now.Date.AddDays(now.Hour < hourOfDay ? 0 : 1).AddHours(hourOfDay), TimeSpan.Zero);
TimeSpan delay = nextTime - now;
Additional Info个
Conversions from DateTime to DateTimeOffset个
DateTimeOffset struct 提供了两种等价的方式来执行
DateTime到DateTimeOffset的转换适用于大多数
转换:
- DateTimeOffset构造函数,它基于DateTime值创建新的DateTimeOffset对象.
- 隐式转换运算符,它允许您将 DateTime值添加到DateTimeOffset对象.
隐式转换是指您在该行上所做的操作.
但是,对于Kind属性为
DateTimeKind.未指定,这两种转换方法会产生
其偏移量为本地时区的DateTimeOffset值.