• 眼见为实:.NET类库中的DateTimeOffset用途何在


    EnyimMemcachedCore(支持.NET Core的memached客户端)中实现 Microsoft.Extensions.Caching.Distributed.IDistributedCache 接口时,遇到了一个过期时间处理的问题。

    在 IDistributedCache 中用到了 DistributedCacheEntryOptions ,其中有一个属性 AbsoluteExpiration 的类型是 DateTimeOffset 。而 EnyimMemcachedCore 计算过期时间用的是 DateTime,计算方法如下(示例代码):

    DateTime expiresAt = DateTime.Now.AddHours(1);
    DateTime unixEpoch = new DateTime(1970, 1, 1);
    var totalSeconds = (uint)(expiresAt.ToUniversalTime() - unixEpoch).TotalSeconds;

    上面的代码中,totalSeconds 的运行结果是 1474951193 。

    那使用 DateTimeOffset 时该如何处理呢?

    DateTimeOffset 表示的是时间偏移量,那它是基于哪个时间基准的偏移呢?从 DateTimeOffset 的注释中得知它是基于 UTC 时间(Coordinated Universal Time)。它和 DateTime 一样也有 Now 属性,于是有了下面的代码:

    DateTimeOffset expiresAtOffset = DateTimeOffset.Now.AddHours(1);

    那如何计算它相对于 1970-1-1 00:00:00 的总秒数呢?发现 DateTimeOffset 有个方法叫 ToUnixTimeSeconds() ,从名称看应该就是它吧。第1次使用它,需要验证一下,眼见为实:

    totalSeconds = (uint)expiresAtOffset.ToUnixTimeSeconds();

    totalSeconds 的运行结果也是是 1474951193 。

    有了 DateTimeOffset ,计算过期时间更方便了,你也可以不用记住 Unix 时间戳的计算起始时间了。

  • 相关阅读:
    P3723 【[AH2017/HNOI2017]礼物】
    P4555 【[国家集训队]最长双回文串】
    manacher学习笔记
    多项式学习笔记
    题解 CF1097F 【Alex and a TV Show】
    docker数据卷容器
    python基础学习
    docker监控之cadvisor
    docker监控系统
    ssh配置详解及公私钥批量分发
  • 原文地址:https://www.cnblogs.com/dudu/p/5912328.html
Copyright © 2020-2023  润新知