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

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

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

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

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

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

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

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

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

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

totalSeconds = (uint)expiresAtOffset.ToUnixTimeSeconds();

totalSeconds 的运行结果也是是 1474951193 。

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

posted on 2019-07-23 09:43 NET未来之路 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/11229873.html

你可能感兴趣的:(眼见为实:.NET类库中的DateTimeOffset用途何在)