当前位置: 首页 > news >正文

眼见为实:.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 时间戳的计算起始时间了。

转载于:https://www.cnblogs.com/dudu/p/5912328.html

相关文章:

  • SpringCloud学习系列之五-----配置中心(Config)和消息总线(Bus)完美使用版
  • ios中UIButton选中状态切换
  • WebRTC 的工作原理解析 | 掘金技术征文
  • Spring Boot中使用Swagger2构建强大的RESTful API文档
  • spring2.5整合struts2
  • 重学前端(六)-JavaScript中的class
  • Spring Security 基础登录实例
  • PostgreSQL pgbench SQL RT 与 事务RT 浅析
  • 决策树 熵
  • Knative 核心概念介绍:Build、Serving 和 Eventing 三大核心组件
  • 洛谷P2676 超级书架
  • 讲清楚分布式系统中的这个算法,帮你从面试候选人中脱颖而出!
  • 我的第一天!
  • JAVA-基础(接口---抽象)
  • 从0开始学习 GITHUB 系列之「GITHUB 常见的几种操作」
  • 深入了解以太坊
  • [iOS]Core Data浅析一 -- 启用Core Data
  • [译]前端离线指南(上)
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 【知识碎片】第三方登录弹窗效果
  • classpath对获取配置文件的影响
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • JavaScript 基础知识 - 入门篇(一)
  • JS字符串转数字方法总结
  • Linux gpio口使用方法
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • SpringBoot几种定时任务的实现方式
  • yii2中session跨域名的问题
  • 初识MongoDB分片
  • 欢迎参加第二届中国游戏开发者大会
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 实现菜单下拉伸展折叠效果demo
  • 通过npm或yarn自动生成vue组件
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 仓管云——企业云erp功能有哪些?
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 回归生活:清理微信公众号
  • ​iOS安全加固方法及实现
  • #define 用法
  • #Lua:Lua调用C++生成的DLL库
  • $.ajax中的eval及dataType
  • (BFS)hdoj2377-Bus Pass
  • (floyd+补集) poj 3275
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (二)WCF的Binding模型
  • (顺序)容器的好伴侣 --- 容器适配器
  • (五)关系数据库标准语言SQL
  • .aanva
  • .Net IE10 _doPostBack 未定义
  • .Net mvc总结
  • .NET 服务 ServiceController
  • .NET多线程执行函数