我将ISystemClock注入我的服务:
public class EventSink
{
private readonly ISystemClock _systemClock;
public EventSink(ISystemClock systemClock)
{
_systemClock = systemClock;
}
private async Task SaveEvent(CancellationToken ct)
{
var event = new MyEvent
{
Timestamp = _systemClock.UtcNow.DateTime
};
}
}它只是在启动时注册:
services.AddScoped<ISystemClock, SystemClock>();但是DateTime毫秒属性始终为0。
而且,这个new SystemClock().UtcNow.Millisecond总是返回0。
直接窗口的例子:
DateTime.UtcNow.Millisecond
786
new SystemClock().UtcNow.Millisecond
0
System.DateTimeOffset.UtcNow.Millisecond;
265

发布于 2022-06-21 14:32:13
找到答案,这是SystemClock的源代码
public DateTimeOffset UtcNow
{
get
{
// the clock measures whole seconds only, to have integral expires_in results, and
// because milliseconds do not round-trip serialization formats
var utcNowPrecisionSeconds = new DateTime((DateTime.UtcNow.Ticks / TimeSpan.TicksPerSecond) * TimeSpan.TicksPerSecond, DateTimeKind.Utc);
return new DateTimeOffset(utcNowPrecisionSeconds);
}
}https://stackoverflow.com/questions/72702077
复制相似问题