为什么systemclock.utcnow.milliseconds始终是0

发布于 2025-02-09 08:51:31 字数 791 浏览 1 评论 0原文

i Impt 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

DateTime.UtcNow.Millisecond
786
new SystemClock().UtcNow.Millisecond
0
System.DateTimeOffset.UtcNow.Millisecond;
265

​“ alt =”在此处输入图像描述”>

I inject ISystemClock to my service:

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
        };
    }
}

it is simply registered on startup:

services.AddScoped<ISystemClock, SystemClock>();

but the DateTime milliseconds property is always 0.

Also this new SystemClock().UtcNow.Millisecond returns always 0.

Examples from Immediate Window:

DateTime.UtcNow.Millisecond
786
new SystemClock().UtcNow.Millisecond
0
System.DateTimeOffset.UtcNow.Millisecond;
265

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

↙厌世 2025-02-16 08:51:31

找到答案,这是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);
        }
    }

Found the answer, this is source code of 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);
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文