在 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 时间戳的计算起始时间了。

眼见为实:.NET类库中的DateTimeOffset用途何在相关推荐

  1. Java中finalize方法用途何在?

    1 package thinking.in.java.demo; 2 3 /* 4 * finalize的用途何在? 5 * 6 *本例的终止条件是L所有的Book对象在被当做垃圾回收前都应该被签入. ...

  2. .NET框架类库中的命名空间

    .NET 框架类库是一个由 Microsoft .NET 框架 SDK 中包含的类.接口和值类型组成的库. 该库提供对系统功能的访问,并且被设计为 .NET 框架应用程序.组件和控件的生成基础. .N ...

  3. [召集] .NET Framework基本类库中的设计模式

    活动背景 现在研究设计模式的人很多,研究.NET设计模式的也不在少数.但大家的研究都是靠自己YY一个应用场景,然后写一些"样例"代码实现之.这离实际应用太遥远了. Anders L ...

  4. VS2010下创建WEBSERVICE,第二天 ----你会在C#的类库中添加web service引用吗?

    本文并不是什么高深的文章,只是VS2008应用中的一小部分,但小部分你不一定会,要不你试试: 本人对于分布式开发应用的并不多,这次正好有一个项目要应用web service,我的开发环境是vs2008 ...

  5. 在web项目中的类库中引用webservice 在部署后更改webservice路径的方法

    在一次开发过程中发现这样的问题: 我引用外部的webservice连接并不是在solution里面的web层,而是在solution里面的类库中引用的,原本在web中引用自动生成的引用路径会在web. ...

  6. 在C#的类库中使用log4net

    在C#的类库中使用log4net 1,在类库中添加对log4net的引用.并且在app.config(web.config)中添加如下代码: 添加的位置你懂的.  <section name=& ...

  7. 你会在C#的类库中添加web service引用吗?

    你会在C#的类库中添加web service引用吗? 本文并不是什么高深的文章,只是VS2008应用中的一小部分,但小部分你不一定会,要不你试试: 本人对于分布式开发应用的并不多,这次正好有一个项目要 ...

  8. dalvik Java类库中本地类

    dalvik中Java类库有许多本地类(全本地方法) 当(Java/C++)调用(Java类库中)本地类的本地方法时,ResolveNativeMethod:查映射表-->本地类的本地函数集-- ...

  9. 在C#代码中应用Log4Net(五)将Log4Net正确地封装在自己的类库中并进行调用

    前面的几篇文章已经比较完整地解释了怎么使用Log4Net,但是我们可能需要将Log4Net的日志类封装在自己的类库中,以便C/S或B/S程序进行调用.下面的示例程序简单地分为两层,一个是应用程序层We ...

最新文章

  1. qpushbutton 设置字体大小_怎样设置Qpushbutton 的大小
  2. Windows的设备驱动框架
  3. 【TypeScript】do...while 循环
  4. Matlab与C/C++混合编程接口及应用
  5. 工业用微型计算机(23)-汇编语言基本结构
  6. ubuntu mysql修改字符集后不能启动mysql_解决ubuntu下修改my.cnf设置字符集导致mysql无法启动...
  7. 数据库-linux安装mysql
  8. https://www.icourse163.org/learn/PKU-1002534001?tid=1003136008#/learn/quiz?id=1003986014
  9. Sagemath相关连接整理
  10. 登记车架号/VIN码用车架号识别
  11. Flutter调用摄像头录像及获取视频信息
  12. oracle中查找某一个时间段内的数据
  13. [乡土民间故事_徐苟三传奇]第廿三回_吃蒸肉财主受捉弄
  14. [高数][高昆轮][高等数学上][第一章-函数与极限]02.数列的极限
  15. 商用计算机使用温度,电脑一般的使用温度为?
  16. PostgreSQL变更表Owner
  17. MySQL 数据库之实现热备份
  18. Halting problem
  19. 空间三点定圆的解算过程
  20. compact php,php compact 通过变量创建数组

热门文章

  1. 对话尹成杰三农谋定压舱石-农业大健康·万祥军:稳农保供
  2. 体验Windows Azure的Access Control Service
  3. 【linux】tcpdump抓包
  4. Spring Boot 入门例子 Hello world - TerryHe 博客园
  5. css实现页面文字不换行、自动换行、强制换行
  6. 真正的职场强者,都是闭环主义高手
  7. 【干货】深入B端SaaS产品设计核心理念
  8. “百亿补贴”真的能拯救一切吗?
  9. 实战:移动APP项目产品开发流程详解
  10. 轻量级社会化分享openShare源码解析